Tomcat请求走私漏洞分析
[toc]
CVE-2022-42252 Apache Tomcat - Request Smuggling
漏洞描述
Apache Tomcat 是一个 Java Web 应用程序服务器。
在 tomcat 中,如果设置 rejectIllegalHeader 为 false(不是默认值)用来忽略无效的 HTTP 头或者在反向代理配置 Tomcat,那么 Tomcat 不会拒绝包含无效内容长度 HTTP 头的请求,攻击者可能利用此漏洞造成请求走私。
1 | Description: |
漏洞名称 | Apache Tomcat 请求走私漏洞 |
---|---|
漏洞类型 | HTTP 请求的解释不一致性(HTTP 请求私运) |
发现时间 | 2022-11-01 |
漏洞影响广度 | 广 |
MPS 编号 | MPS-2022-58907 |
CVE 编号 | CVE-2022-42252 |
CNVD 编号 | - |
影响范围
org.apache.tomcat:tomcat@[10.1.0-M1, 10.1.1)
org.apache.tomcat:tomcat@[10.0.0-M1, 10.0.27)
org.apache.tomcat:tomcat@[8.5.0, 8.5.83)
org.apache.tomcat:tomcat@[9.0.0-M1, 9.0.68)
1 | Versions Affected: |
修复方案
升级 org.apache.tomcat:tomcat 到 10.1.1 或更高版本
升级 org.apache.tomcat:tomcat 到 10.0.27 或更高版本
升级 org.apache.tomcat:tomcat 到 8.5.83 或更高版本
升级 org.apache.tomcat:tomcat 到 9.0.68 或更高版本
Reference
Requests with invalid content-length should always be rejected · apache/tomcat@4c7f4fd (github.com)
Apache Httpd AJP请求走私 CVE-2022-26377 漏洞分析 | CN-SEC 中文网
Apache Tomcat HTTP请求走私 (CVE-2021-33037)
漏洞信息
Apache Tomcat 在某些情况下没有正确解析 HTTP 传输编码请求标头,导致在与反向代理一起使用时可能出现请求走私。具体来说:如果客户端声明它只接受 HTTP/1.0 响应,Tomcat 会错误地忽略传输编码标头;Tomcat 尊重身份编码;并且 Tomcat 不能确保分块编码(如果存在)是最终编码。
影响版本:
Apache Tomcat 10.0.0-M1-10.0.6
Apache Tomcat 9.0.0.M1-9.0.46
Apache Tomcat 8.5.0-8.5.66
环境搭建
Tomcat-9.0.46
搭建步骤同上
漏洞分析
在org.apache.coyote.http11.Http11Processor
中的prepareRequest
函数下个断点,此函数作用就是在读取到请求头后,设置request filters
其中的一段逻辑是判断transfer-encoding
,并且添加到inputFilters中,但只有http11会进入这段处理,从而导致了走私
1 | if (http11) { |
传入HTTP/1.1可以正常解析TE,接收的post数据是p
但如果传入HTTP/1.0,TE就不会被解析,会用CL来判断请求体
官方修复
Process T-E header from both HTTP 1.0 and HTTP 1.1. clients · apache/tomcat@05f9e8b (github.com)
复现
apache
apache收到的报文是正常
但是转发出去的时候apache自动解析成了HTTP/1.1,并且自己计算了正确的CL来代替TE
这样一来就没法触发tomcat得这个漏洞,得到的回显还是正常的
Nginx
大概也不行,原文就没有复现成功
HAProxy
Traefik
Caddy
腾讯云 CDN
Aliyun CDN
Reference
Apache Tomcat HTTP请求走私(CVE-2021-33037)漏洞分析 - 先知社区 (aliyun.com)
(208条消息) Tomcat HTTP请求走私(CVE-2021-33037)_Iwanturoot的博客-CSDN博客