Nginx 漏洞
一、典型的解析漏洞(配置类)
解析漏洞的核心是Nginx 配置不当,导致服务器错误解析文件类型(如将非脚本文件当作 PHP 执行),属于配置类漏洞的子类,也是最易被忽视的风险之一。
1. 文件名截断解析漏洞(最常见)
- 原理:Nginx 默认会忽略文件路径中
;之后的内容(受 FastCGI 配置影响)。若服务器同时存在 “允许上传图片” 和 “PHP 解析” 的配置,攻击者可构造类似test.jpg;.php的文件名,Nginx 会将其当作test.jpg.php解析为 PHP 脚本。 - 触发条件:
- Nginx 配置中启用了 FastCGI(如对接 PHP-FPM);
- FastCGI 参数
fastcgi_split_path_info配置不当(未过滤特殊字符;); - 服务器允许用户上传文件,且上传目录被配置为可解析 PHP。
2. 目录级解析漏洞
- 原理:若 Nginx 配置中,将某目录(如
/upload/)的.php文件交给 FastCGI 解析,但未限制该目录下的子目录,攻击者可构造路径/upload/test.jpg/1.php。此时 Nginx 会认为1.php是目标文件,但实际1.php不存在,FastCGI 可能回退解析父目录的test.jpg为 PHP(取决于cgi.fix_pathinfo配置,PHP 默认开启该选项)。
二、其他常见的 Nginx 漏洞(非解析漏洞)
除了解析漏洞,Nginx 的安全风险更多集中在配置、协议和软件缺陷上,以下是高频漏洞类别:
(一)配置类漏洞(除解析外)
这类漏洞均由 “错误的 Nginx 配置” 导致,是生产环境中最常见的风险来源。
| 漏洞类型 | 原理 | 危害案例 |
|---|---|---|
| 目录遍历漏洞 | 开启autoindex on(自动目录索引),且root/alias配置路径不当,导致服务器暴露目录结构和敏感文件(如/etc/passwd、源代码)。 | 若配置location /files { autoindex on; root /var/; },访问/files/../etc/可遍历/etc目录。 |
| CORS 配置不当 | 跨域资源共享(CORS)配置中,Access-Control-Allow-Origin设为*(允许所有域名跨域),且同时开启Access-Control-Allow-Credentials on(允许携带 Cookie),导致敏感 Cookie 被第三方网站窃取。 | 攻击者可通过恶意网站,利用跨域请求获取用户在目标网站的登录 Cookie,实现身份伪造。 |
| HTTPS 配置漏洞 | 1. 使用弱加密算法(如 RC4、3DES)或低版本 TLS(SSLv3、TLS 1.0); 2. 未配置 HSTS(HTTP Strict Transport Security),导致用户可能被劫持到 HTTP 明文站点; 3. 证书链不完整,导致浏览器提示 “不安全”。 | 攻击者可通过中间人攻击(MITM)破解弱加密流量,窃取 HTTPS 传输的敏感数据(如密码)。 |
| 反向代理越权 | 反向代理配置中,proxy_pass路径未加限制,攻击者可构造请求绕过代理规则,访问后端内网服务(如数据库、管理后台)。 | 若配置location /api { proxy_pass http://backend:8080; },访问/api/../admin可绕过/api限制,访问后端/admin管理页。 |
(二)HTTP 协议相关漏洞
Nginx 作为 HTTP 服务器,可能因 “对 HTTP 协议的处理逻辑缺陷” 被攻击,典型漏洞包括:
-
CRLF 注入漏洞
- 原理:HTTP 请求头(如
Referer、User-Agent)中的\r\n(CRLF)是 HTTP 协议的 “行分隔符”。若 Nginx 未过滤请求头中的\r\n,攻击者可注入该字符,篡改响应头(如添加Set-Cookie: session=hacker)或注入 HTML 内容(XSS)。 - 案例:构造
Referer: http://attacker.com\r\nSet-Cookie: evil=1,若 Nginx 未过滤,响应头会被注入恶意Set-Cookie。
- 原理:HTTP 请求头(如
-
Slowloris(慢连接)攻击
- 原理:HTTP 协议要求 “客户端发送完整请求后,服务器才处理”。Slowloris 攻击通过 “缓慢发送请求头”(如每秒发 1 个字符),占用 Nginx 的连接数(默认
worker_connections有限),导致服务器无法处理正常请求,属于 DoS(拒绝服务)攻击。 - 防御:配置
client_header_timeout(如 10 秒),超时断开慢连接。
- 原理:HTTP 协议要求 “客户端发送完整请求后,服务器才处理”。Slowloris 攻击通过 “缓慢发送请求头”(如每秒发 1 个字符),占用 Nginx 的连接数(默认
(三)Nginx 自身缺陷(CVE 漏洞)
这类漏洞是 Nginx 软件代码层面的 bug,需通过升级版本修复,典型案例包括:
| CVE 编号 | 漏洞类型 | 影响版本 | 危害 |
|---|---|---|---|
| CVE-2017-7529 | 缓冲区溢出 | Nginx 0.5.6 ~ 1.13.2 | 攻击者通过发送特制的 Chunked 编码请求,触发缓冲区溢出,可远程执行代码(RCE)或导致服务崩溃。 |
| CVE-2021-23017 | 整数溢出 | Nginx 1.19.0 ~ 1.20.0 | 处理range请求时(断点续传),整数溢出导致内存破坏,可远程执行代码或 DoS。 |
| CVE-2022-41741 | 路径遍历 | Nginx 0.7.69 ~ 1.21.5 | 当 Nginx 使用merge_slashes off(关闭路径斜杠合并)且配置alias时,攻击者可通过//../绕过路径限制,访问敏感文件。 |
(四)第三方模块漏洞
Nginx 支持扩展模块(如ngx_http_lua_module、ngx_http_addition_module),若模块版本老旧或存在逻辑缺陷,会引入安全风险:
- 案例 1:
ngx_http_lua_module(Lua 脚本模块)的旧版本(<0.10.15)存在 “沙箱逃逸” 漏洞,攻击者可通过特制 Lua 脚本执行系统命令。 - 案例 2:
ngx_http_image_filter_module(图片处理模块)的某些版本存在 “内存泄漏”,长期使用可能导致 Nginx 内存耗尽,触发 DoS。
三、漏洞防护核心建议
- 及时升级 Nginx 版本:修复已知的 CVE 漏洞(如避免使用 CVE-2017-7529、CVE-2021-23017 影响的版本),优先使用稳定版(如 1.24.x、1.26.x)。
- 优化核心配置(规避配置类漏洞):
- 禁用
autoindex on(除非必要),避免目录遍历; - 解析 PHP 时,严格配置
fastcgi_split_path_info,过滤;等特殊字符(如fastcgi_split_path_info ^(.+\.php)(/.+)$;); - CORS 配置中,避免
Access-Control-Allow-Origin: *与Credentials: on同时启用; - HTTPS 配置:禁用 SSLv3/TLS 1.0,使用 TLS 1.2+,启用 HSTS,确保证书链完整。
- 禁用
- 限制危险功能:
- 禁用不必要的第三方模块;
- 上传目录单独配置,禁止解析 PHP(如
location /upload { types { image/jpeg jpg; } }); - 配置
client_header_timeout(10 秒内)、client_body_timeout,防御 Slowloris 攻击。
- 监控与审计:开启 Nginx 访问日志和错误日志,定期审计异常请求(如
;.php、//../等特征路径)。
本文链接:
/archives/nginx-lou-dong
版权声明:
本站所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自
QiaoShen-World!
喜欢就支持一下吧