Tomcat CVE-2023-41080 分析与复现
字数 1259 2025-08-23 18:31:34

Tomcat CVE-2023-41080 分析与复现教学文档

0x00 漏洞概述

CVE-2023-41080是Apache Tomcat中的一个开放重定向漏洞,影响使用表单认证(form-based authentication)的Tomcat实例。攻击者可以利用此漏洞构造恶意URL,当用户提交登录表单后,浏览器会被重定向到攻击者控制的任意网站。

0x01 漏洞复现

复现环境要求

  • 受影响的Tomcat版本(9.0.79及以下)
  • 配置了表单认证的Web应用
  • 推荐使用Firefox或旧版Chrome浏览器(新版Chrome可能不稳定)

复现步骤

  1. 第一步:在浏览器中打开第一个标签页,访问目标网站的登录页面(不进行登录)

    http://target/
    
  2. 第二步:打开第二个标签页,访问构造的POC URL

    http://target//www.baidu.com
    
  3. 第三步:返回第一个标签页的登录表单,提交有效的用户名和密码

  4. 预期结果:登录成功后,浏览器会跳转到百度网站(或其他POC中指定的网站)

0x02 补丁分析

补丁在FormAuthenticator.java中增加了路径校验逻辑:

  • 当路径长度大于2且第二个字符是斜杠/时,删除该斜杠
  • 例如://test/test

补丁对比:

https://github.com/apache/tomcat/compare/9.0.79...9.0.80

0x03 漏洞原理

HTTP重定向机制

Tomcat在处理表单认证时,会返回303重定向响应,其中Location头指定跳转目标:

正常跳转:

HTTP/1.1 303 
Location: /test/

恶意跳转:

HTTP/1.1 303 
Location: //www.baidu.com

浏览器行为

Location头以双斜杠//开头时,浏览器会将其解释为绝对URL(保留当前协议),从而跳转到指定域名。

漏洞触发流程

  1. 攻击者诱导用户访问恶意URL(如http://target//www.baidu.com)
  2. Tomcat存储请求URI(//www.baidu.com)到session中
  3. 用户提交登录表单时,Tomcat从session读取存储的URI构造重定向
  4. 浏览器执行重定向到攻击者控制的网站

0x04 环境搭建与分析

测试环境配置

  1. web.xml配置
<web-app>
  <security-constraint>
    <web-resource-collection>
      <url-pattern>/*</url-pattern>
    </web-resource-collection>
    <auth-constraint>
      <role-name>manager-gui</role-name>
    </auth-constraint>
  </security-constraint>
  
  <login-config>
    <auth-method>FORM</auth-method>
    <form-login-config>
      <form-login-page>/login.jsp</form-login-page>
      <form-error-page>/error.jsp</form-error-page>
    </form-login-config>
  </login-config>
  
  <security-role>
    <role-name>manager-gui</role-name>
  </security-role>
</web-app>
  1. 用户配置(tomcat-users.xml)
<tomcat-users>
  <role rolename="manager-gui"/>
  <user username="tomcat" password="aaaaaa" roles="manager-gui"/>
</tomcat-users>
  1. 登录页面(login.jsp)
<form method="post" action="j_security_check">
  <input type="text" name="j_username"/>
  <input type="password" name="j_password"/>
  <button type="submit">登录</button>
</form>

数据流分析

  1. 用户访问恶意URL时,Tomcat初始化session并存储请求URI
  2. 提交登录表单时,FormAuthenticator从session读取存储的URI构造重定向
  3. 漏洞点在于未正确处理以双斜杠开头的URI

0x05 限制条件

  1. 需要从根路径触发(如http://target//example.com)
  2. 首次直接访问POC URL并提交登录可能成功,但后续尝试可能失败
  3. 浏览器兼容性问题:Firefox和旧版Chrome稳定,新版Chrome可能不稳定

0x06 防御措施

  1. 升级到Tomcat 9.0.80或更高版本
  2. 在反向代理/负载均衡器层面对重定向URL进行校验
  3. 实现自定义的FormAuthenticator,增加严格的URL验证

0x07 参考链接

Tomcat CVE-2023-41080 分析与复现教学文档 0x00 漏洞概述 CVE-2023-41080是Apache Tomcat中的一个开放重定向漏洞,影响使用表单认证(form-based authentication)的Tomcat实例。攻击者可以利用此漏洞构造恶意URL,当用户提交登录表单后,浏览器会被重定向到攻击者控制的任意网站。 0x01 漏洞复现 复现环境要求 受影响的Tomcat版本(9.0.79及以下) 配置了表单认证的Web应用 推荐使用Firefox或旧版Chrome浏览器(新版Chrome可能不稳定) 复现步骤 第一步 :在浏览器中打开第一个标签页,访问目标网站的登录页面(不进行登录) 第二步 :打开第二个标签页,访问构造的POC URL 第三步 :返回第一个标签页的登录表单,提交有效的用户名和密码 预期结果 :登录成功后,浏览器会跳转到百度网站(或其他POC中指定的网站) 0x02 补丁分析 补丁在 FormAuthenticator.java 中增加了路径校验逻辑: 当路径长度大于2且第二个字符是斜杠 / 时,删除该斜杠 例如: //test → /test 补丁对比: 0x03 漏洞原理 HTTP重定向机制 Tomcat在处理表单认证时,会返回303重定向响应,其中 Location 头指定跳转目标: 正常跳转: 恶意跳转: 浏览器行为 当 Location 头以双斜杠 // 开头时,浏览器会将其解释为绝对URL(保留当前协议),从而跳转到指定域名。 漏洞触发流程 攻击者诱导用户访问恶意URL(如 http://target//www.baidu.com ) Tomcat存储请求URI( //www.baidu.com )到session中 用户提交登录表单时,Tomcat从session读取存储的URI构造重定向 浏览器执行重定向到攻击者控制的网站 0x04 环境搭建与分析 测试环境配置 web.xml配置 : 用户配置(tomcat-users.xml) : 登录页面(login.jsp) : 数据流分析 用户访问恶意URL时,Tomcat初始化session并存储请求URI 提交登录表单时, FormAuthenticator 从session读取存储的URI构造重定向 漏洞点在于未正确处理以双斜杠开头的URI 0x05 限制条件 需要从根路径触发(如 http://target//example.com ) 首次直接访问POC URL并提交登录可能成功,但后续尝试可能失败 浏览器兼容性问题:Firefox和旧版Chrome稳定,新版Chrome可能不稳定 0x06 防御措施 升级到Tomcat 9.0.80或更高版本 在反向代理/负载均衡器层面对重定向URL进行校验 实现自定义的 FormAuthenticator ,增加严格的URL验证 0x07 参考链接 Tomcat 9.0.80 更新日志 Tomcat安全配置指南