Apache Tomcat 默认示例目录不安全配置漏洞1. 漏洞基础信息2. 漏洞影响范围3. 漏洞攻击手法3.1 examples 目录操纵 Session3.2 XSS 风险3.3 CookieExample 信息泄露4. 漏洞修复4.1 在生产环境中移除可能造成信息泄漏的目录推荐4.2 通过配置禁止访问1. 漏洞基础信息组件简介 Apache Tomcat 是由 Apache 软件基金会开源的 Servlet 容器与 Web 服务器是目前 Java Web 领域使用最广泛的中间件之一。Tomcat 在默认安装包中自带了 examples示例应用、docs在线文档、manager应用管理后台、host-manager虚拟主机管理等 Web 应用方便开发者学习和运维使用漏洞类型不安全配置 / 信息泄露 / 越权访问CWE-16、CWE-200、CWE-552漏洞危害等级中危 ~ 高危取决于业务系统是否依赖共享 Session漏洞本质 Tomcat 默认部署后源码包 Web 根目录下包含 servlets-examples示例 Servlet与 tomcat-docs在线文档目录可通过 /examples/ 与 /docs/ 路径在公网直接访问。examples 中包含的 Session、Cookie 操纵示例代码允许任意访问者通过 HTTP 参数读写服务端 Session 与 Cookie2. 漏洞影响范围受影响版本默认安装且未清理示例目录的全版本 Tomcat5.x ~ 10.x示例目录暴露的高危端点3. 漏洞攻击手法3.1 examples 目录操纵 Session在现实生产环境中我们很难知道服务器后端的 Session 中是通过什么参数(Name)和值(Value)来判断用户登录状态的。所以就是我们根本很难利用该页面来进行任意用户伪造只是说理论上是可行的session样例(/examples/servlets/servlet/SessionExample)允许用户对session进行操纵。因为session可能是全局通用的所以用户可能可以通过操纵session获取管理员权限SessionExample代码实现本质上是StringdataNamerequest.getParameter(dataname);StringdataValuerequest.getParameter(datavalue);if(dataName!nulldataValue!null){session.setAttribute(dataName,dataValue);}只要访问 SessionExample 并传入dataname和datavalueTomcat 就会把它写入到 Session。此时如果另一个 Web 应用使用 Session 并依赖某个字段判定用户身份session.setAttribute(login,admin)则攻击者绕过登录校验。3.2 XSS 风险很多 Tomcat Examples 示例页面会存在XSS漏洞需要进一步测试验证GET /examples/servlets/servlet/RequestParamExample?firstnamescriptalert(document.cookie)/scriptlastnametest可借助 XSS 实现钓鱼跳板等攻击行为3.3 CookieExample 信息泄露路径/examples/servlets/servlet/CookieExample有时候会有意想不到的收获4. 漏洞修复4.1 在生产环境中移除可能造成信息泄漏的目录推荐1、找到Tomcat的安装目录如 /usr/local/tomcat以这个目录为例2、进入 webapps 目录3、删除以下目录和文件ROOT/ - 此文件夹是 Tomcat 的默认根应用目录如果存在测试页面可能会泄露 Tomcat 版本、服务器信息默认页包含 “Apache Tomcat” 标识未部署自定义业务ROOT 目录里只有 Tomcat 自带的测试页此时删除整个 ROOT 目录无影响已部署自定义业务若已经将自己的业务服务部署到 ROOT 目录ROOT 目录中包含业务代码 Tomcat 默认测试页此时仅需删除测试页文件常见测试文件如下1index.jsp Tomcat 默认欢迎页访问 http://ip:8080 看到的测试页2index.html 备用欢迎页部分 Tomcat 版本自带3tomcat.png/tomcat.svg 测试页上的 Tomcat 图标4tomcat.css 测试页的样式文件5RELEASE-NOTES.txt Tomcat 版本更新记录可能会泄露 Tomcat 版本信息6NOTICE/LICENSE Tomcat 版权 / 许可声明可能会泄露版本相关信息docs/ - Tomcat 文档泄露 Tomcat 版本、配置说明生产环境也应考虑移除examples/ - 包含 JSP/Servlet/websocket 示例代码攻击者可通过示例分析漏洞、构造攻击manager/ - 管理后台若弱密码 / 未授权访问可部署恶意应用、操控服务器host-manager/如有- 主机管理后台风险同 manager 目录4、重启Tomcat服务后尝试访问以下URL应返回 404未找到 状态码或 302 跳转到默认页面http://your-server:port/examples/http://your-server:port/docs/http://your-server:port/manager/html/http://your-server:port没有默认的 tomcat 测试页面4.2 通过配置禁止访问如果由于某些原因无法删除文件可以通过配置来禁止外部访问。例如使用Tomcat的 Context 配置在 conf/server.xml 或 conf/context.xml 中为应用配置一个无法访问的规则?xml version1.0 encodingUTF-8?Context!-- 禁止外部访问 examples 应用 --ValveclassNameorg.apache.catalina.valves.RemoteAddrValvepath/examplesallow127.0.0.1|::1deny*denyStatus403/!-- 禁止外部访问 docs 应用 --ValveclassNameorg.apache.catalina.valves.RemoteAddrValvepath/docsallow127.0.0.1|::1deny*denyStatus403/!-- 禁止外部访问 manager/host-manager 应用 --ValveclassNameorg.apache.catalina.valves.RemoteAddrValvepath/managerallow127.0.0.1|::1deny*denyStatus403/ValveclassNameorg.apache.catalina.valves.RemoteAddrValvepath/host-managerallow127.0.0.1|::1deny*denyStatus403/WatchedResourceWEB-INF/web.xml/WatchedResourceWatchedResource${catalina.base}/conf/web.xml/WatchedResource/Context只允许来自本机 (127.0.0.1) 的请求其他所有外部IP的请求都会被拒绝