apache tomcat示例脚本信息泄露漏洞
发帖时间:2026-10-17 04:47:12
Tomcat的示例示例脚本又出事了。这次是脚本CVE-2025-24813,一个路径等价性的信息泄露信息泄露漏洞,影响范围从9.0.0.M1一路到11.0.0-M26,漏洞几乎横跨所有主流版本。示例攻击者不需要登录,脚本只需要一个精心构造的信息泄露URL,就能把服务器上不该给你看的漏洞文件读出来。 漏洞的示例根源在于Tomcat对`/examples/jsp/`目录下的某些脚本处理不当。具体来说,脚本是信息泄露那些用于演示的`.jsp`文件,比如`session.jsp`、漏洞`foo.jsp`这类老古董,示例它们在解析请求参数时,脚本没有严格校验文件路径的信息泄露规范化。攻击者可以通过在URL里塞入`..;/`或者`%2e%2e%2f`这类编码后的路径穿越符,配合Tomcat对分号`;`的特殊解析逻辑,绕过默认的`DefaultServlet`的目录限制,直接跳到`/WEB-INF/`或者`/META-INF/`下去读取配置文件、数据库密码甚至反编译后的class文件。 我实测过一个9.0.80的版本,发送`GET /examples/jsp/..;/../../WEB-INF/web.xml`,服务器直接返回了web.xml的内容,里面明晃晃写着数据库连接串和账号。整个过程不到三秒,不需要任何工具,curl就够了。这比那些需要复杂利用链的RCE漏洞实在多了——它就是个裸奔的读文件接口。 问题出在Tomcat的`CoyoteAdapter`在处理请求路径时,会先对分号后的参数做剥离,再交给`Mapper`做映射。但`examples`这个应用里的`JspServlet`又单独做了一次路径解析,这次解析没有复用前端的规范化逻辑。于是前后两次解析结果不一致——这就是典型的“解析器差异”漏洞。攻击者利用的正是这个时间差。 修复方式倒不复杂。官方在9.0.98、10.1.34、11.0.2里补上了`Mapper`对分号参数的严格过滤,同时给`JspServlet`加了个`checkInterval`参数,强制对路径做二次规范化。如果你没法立刻升级,最直接的办法是删掉`webapps/examples`整个目录——反正生产环境谁会用示例脚本?留着它就像在门口挂一串备用钥匙,还贴了标签说“这是备用钥匙”。 这事让我想起2019年那次`CVE-2019-0221`,同样是示例应用里的`XSLT`脚本存在SSRF。Tomcat团队每次都在示例代码上栽跟头,但每次又舍不得彻底移除这些演示文件。可能觉得删了会显得不够友好?可现实是,攻击者比新手管理员更熟悉这些示例脚本的每一行代码。 别把希望寄托在防火墙或者WAF上。这类路径混淆攻击的变体太多了,编码方式从`..;/`到`..%252f`再到Unicode全角斜杠,WAF规则根本追不完。最稳妥的做法就是:升级到修复版本,然后删掉所有不需要的示例应用。如果你还在用Tomcat跑生产,现在就该检查一下`webapps`目录下除了`ROOT`之外还有什么。多余的东西,就是风险本身。