如何修复 Tomcat 9 上的目录遍历漏洞
Posted
技术标签:
【中文标题】如何修复 Tomcat 9 上的目录遍历漏洞【英文标题】:How to fix directory traversal vulnerability on Tomcat 9 【发布时间】:2021-10-24 18:34:21 【问题描述】:我在 Tomcat 9 容器 (Debian 10.8) 上有一个 JEE 服务。在它前面是一个 Apache Web 服务器 + mod_proxy_ajp。
在我的 VH 中,我没有任何 /manager/html 上下文的 ProxyPass 规则,但如果在 Web 客户端上我重写我的 URL 添加 /..;/manager/html(例如:https://www.example.org/site/..;/manager/html)Tomcat 管理器要求凭据。
有什么技巧可以避免吗?也许使用modsecurity? 谢谢。
【问题讨论】:
为什么不直接将代理服务器配置为拒绝所有带分号的路径?甚至只是将它们重写回家 【参考方案1】:由于 path parameters 仅在 Tomcat 中用于会话跟踪(作为 cookie 的替代品),因此您可以在 Apache2 中从 ..
路径段安全地删除它们:
RewriteEngine on
RewriteRule ^(.*)/\.\.;[^/]*(.*)$ $1/..$2 [N]
您也可以完全删除它们:
RewriteEngine on
RewriteRule ^(.*);[^/]*(.*)$ $1$2 [N]
并将 Tomcat 配置为仅在 $CATALINA_BASE/conf/web.xml
中使用 cookie 进行会话跟踪:
<session-config>
...
<tracking-mode>COOKIE</tracking-mode>
</session-config>
【讨论】:
【参考方案2】:我使用 mod_security 规则解决了这个问题:
SecRule REQUEST_URI "@rx ..;/" "phase:1,severity:'CRITICAL',deny,id:129"
有效。
【讨论】:
您的正则表达式无法捕捉到所有可能性:/app/..;abc/manager/html
仍将被 Tomcat 重写为 /manager/html
。试试/\.\.;[^/]*/
。以上是关于如何修复 Tomcat 9 上的目录遍历漏洞的主要内容,如果未能解决你的问题,请参考以下文章