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可能不稳定)
复现步骤
-
第一步:在浏览器中打开第一个标签页,访问目标网站的登录页面(不进行登录)
http://target/ -
第二步:打开第二个标签页,访问构造的POC URL
http://target//www.baidu.com -
第三步:返回第一个标签页的登录表单,提交有效的用户名和密码
-
预期结果:登录成功后,浏览器会跳转到百度网站(或其他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(保留当前协议),从而跳转到指定域名。
漏洞触发流程
- 攻击者诱导用户访问恶意URL(如
http://target//www.baidu.com) - Tomcat存储请求URI(
//www.baidu.com)到session中 - 用户提交登录表单时,Tomcat从session读取存储的URI构造重定向
- 浏览器执行重定向到攻击者控制的网站
0x04 环境搭建与分析
测试环境配置
- 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>
- 用户配置(tomcat-users.xml):
<tomcat-users>
<role rolename="manager-gui"/>
<user username="tomcat" password="aaaaaa" roles="manager-gui"/>
</tomcat-users>
- 登录页面(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>
数据流分析
- 用户访问恶意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验证