Eclipse Jetty WEB-INF敏感信息泄露漏洞分析(CVE-2021-28164/CVE-2021-34429)
字数 1815 2025-08-05 08:19:37
Eclipse Jetty WEB-INF敏感信息泄露漏洞分析(CVE-2021-28164/CVE-2021-34429)教学文档
1. 漏洞概述
本教学文档详细分析Eclipse Jetty服务器中两个WEB-INF敏感信息泄露漏洞(CVE-2021-28164和CVE-2021-34429)。这两个漏洞允许攻击者通过精心构造的URL路径绕过安全校验,访问WEB-INF目录下的敏感文件(如web.xml)。
2. 背景知识
2.1 Jetty简介
Jetty是Eclipse基金会下的一个纯Java网页服务器和Servlet容器,支持最新的Java Servlet API、WebSocket、SPDY和HTTP/2协议。
2.2 RFC3986规范
RFC3986定义了URI的规范处理方式,其中:
.和..称为点段,用于路径的相对引用- 在URI路径解析时,点段应被处理并删除
- 解析顺序应为:先规范化路径(处理点段),再进行URL解码和参数处理
3. 漏洞详情
3.1 CVE-2021-28164
影响版本:Jetty 9.4.37及之前版本
漏洞利用:
/%2e/WEB-INF/web.xml
其中%2e是.的URL编码形式。
3.2 CVE-2021-34429
影响版本:Jetty 9.4.40及之前版本
漏洞利用方式:
- Unicode编码绕过:
/%u002e/WEB-INF/web.xml
- 空字符绕过:
/.%00/WEB-INF/web.xml
- 多层路径绕过:
/a/b/..%00/WEB-INF/web.xml
4. 漏洞原理分析
4.1 Jetty路径处理流程(漏洞版本)
- 输入路径:如
/HelloTomcat/%u002e/WEB-INF/web.xml - 规范化路径:
canonicalPath(path)→ 原样返回(未处理%u编码) - URL解码:
decodePath(path)→/HelloTomcat/./WEB-INF/web.xml - 提取目标路径:
target=/./WEB-INF/web.xml - 安全校验:
isProtectTarget(target)→ 检查不以/web-inf或/meta-inf开头 - 再次规范化:
canonicalPath(target)→/WEB-INF/web.xml - 获取资源:读取
/WEB-INF/web.xml
4.2 关键问题点
-
路径解析顺序问题:
- 按照RFC3986应先规范化再解码
- Jetty实现是先解码再规范化
-
歧义路径检测不完整:
- 仅检测了
%2e等编码形式,未检测%u002e - 歧义字符列表不完整
- 仅检测了
-
空字符处理缺陷:
- 对
%00处理逻辑错误 ..%00会被解析为两层父目录跳转
- 对
5. 漏洞修复分析
5.1 CVE-2021-28164修复(9.4.39)
- 在路径解析过程中增加歧义路径检测
- 对检测到的歧义路径强制进行规范化
5.2 CVE-2021-34429修复(9.4.43)
-
改变解析顺序:
- 先进行URL解码和参数删除
- 再进行路径规范化
-
空字符处理:
- 删除对
\u0000的特殊处理 - 在路径截取时直接检测并拒绝空字符
- 删除对
-
编码检测增强:
- 增加对
%25(双重编码)和%2f的检测 - 记录路径中的编码数据类型
- 增加对
6. 安全建议
-
升级建议:
- 升级至Jetty 9.4.43或更高版本
-
配置建议:
- 设置
jetty.http.compliance=RFC7230_NO_AMBIGUOUS_PATH_SEPARATORS - 禁用可能引起歧义的编码形式
- 设置
-
开发建议:
- 实现路径处理时严格遵循RFC3986规范
- 在安全校验前确保路径已完全规范化
7. 深入思考
-
RFC规范与实践的冲突:
- RFC3986要求先规范化再解码
- 但实际安全实现可能需要先解码再规范化
-
潜在问题:
- Jetty未正确处理
,作为参数分隔符 - 歧义路径检测仍可能不完整
- Jetty未正确处理
-
更安全的实现方式:
- 在安全校验时也进行规范化
- 建立更全面的歧义字符列表
8. 参考资料
- RFC3986规范文档
- Jetty官方安全公告
- Vulhub漏洞环境说明
- Jetty GitHub提交记录
9. 实验验证
建议在受控环境中使用以下版本进行验证:
- Jetty 9.4.37(存在CVE-2021-28164)
- Jetty 9.4.40(存在CVE-2021-34429)
- Jetty 9.4.43(已修复)
通过构造不同payload观察响应差异,加深对漏洞原理的理解。