一、漏洞简介

1.1 漏洞背景

HTTP 请求走私(Request Smuggling)是一种利用前后端服务器对 HTTP 请求解析差异的攻击技术。当 Tomcat 作为后端服务器部署在反向代理之后时,可能受到此类攻击。

1.2 漏洞概述(包含 CVE 编号、危害等级、漏洞类型、披露时间等)

项目 内容
漏洞编号 CVE-2022-42252
危害等级 HIGH / 7.5
漏洞类型 HTTP 请求走私漏洞
披露时间 2022-11-01
影响组件 Apache Tomcat 历史
  • CVE 编号:CVE-2022-42252
  • 危害等级:Low(低)
  • 披露时间:2022年10月
  • 漏洞类型:HTTP 请求走私

补充核验信息:公开时间:2022-11-01;NVD 评分:7.5(HIGH);CWE:CWE-444。

二、影响范围

2.1 受影响的版本

版本系列 受影响范围
Tomcat 9.x 9.0.0.M1 ~ 9.0.67
Tomcat 10.x 10.0.0-M1 ~ 10.1.0 / 10.0.0-M1 ~ 10.0.26
Tomcat 8.x 8.5.0 ~ 8.5.82

2.2 不受影响的版本

版本系列 修复版本
Tomcat 9.x ≥ 9.0.68
Tomcat 10.x ≥ 10.1.1 / ≥ 10.0.27
Tomcat 8.x ≥ 8.5.83

2.3 触发条件(如特定模块、特定配置、特定运行环境等)

  1. Tomcat 配置为忽略无效 HTTP 头(rejectIllegalHeader=false,非默认值)
  2. Tomcat 部署在反向代理之后
  3. 反向代理也未正确处理无效的 Content-Length 头

三、漏洞详情与原理解析

3.1 漏洞触发机制

rejectIllegalHeader 设置为 false 时,Tomcat 不会拒绝包含无效 Content-Length 头的请求。攻击者可以构造包含多个 Content-Length 头或格式错误的 Content-Length 头的请求:

POST / HTTP/1.1
Host: target.com
Content-Length: 0
Content-Length: 50

GET /admin HTTP/1.1
Host: target.com

反向代理可能使用第一个 Content-Length 值(0),认为请求体为空,将后续数据视为新请求。而 Tomcat 可能使用第二个值(50),将 GET /admin 作为当前请求的一部分处理。

3.2 源码层面的根因分析(结合源码与补丁对比)

问题代码位置org.apache.coyote.http11.Http11InputBuffer

// 当 rejectIllegalHeader=false 时
// 不会拒绝重复或无效的 Content-Length
if (!rejectIllegalHeader) {
    // 继续处理,可能导致解析差异
}

四、漏洞复现(可选)

4.1 环境搭建

# 需要配置 server.xml
# 在 Connector 中设置 rejectIllegalHeader="false"
<Connector port="8080" protocol="HTTP/1.1"
           rejectIllegalHeader="false" />

4.2 PoC 演示与测试过程

# 使用 telnet 或 nc 发送畸形请求
echo -e "POST / HTTP/1.1\r
Host: target.com\r
Content-Length: 0\r
Content-Length: 5\r
\r
hello" | nc target 8080

五、修复建议与缓解措施

5.1 官方版本升级建议

升级至修复版本。

5.2 临时缓解方案(如修改配置文件、关闭相关模块、增加 WAF 规则等)

  1. 保持默认配置rejectIllegalHeader=true):
<Connector port="8080" protocol="HTTP/1.1"
           rejectIllegalHeader="true" />
  1. 在反向代理层面验证请求
# Nginx 配置
server {
    if ($http_content_length ~ "[^0-9]") {
        return 400;
    }
}

六、参考信息 / 参考链接

6.1 官方安全通告

  • https://lists.apache.org/thread/zzcxzvqfdqn515zfs3dxb7n8gty589sq
  • https://tomcat.apache.org/security-9.html

6.2 其他技术参考资料

  • NVD:https://nvd.nist.gov/vuln/detail/CVE-2022-42252
  • CVE:https://www.cve.org/CVERecord?id=CVE-2022-42252
  • https://lists.apache.org/thread/zzcxzvqfdqn515zfs3dxb7n8gty589sq
  • https://security.gentoo.org/glsa/202305-37
  • https://tomcat.apache.org/security-9.html
  • https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-42252