CVE-2017-12615 实战防御:5步加固Tomcat配置与WAF规则编写

📅 2026/7/8 20:05:48
CVE-2017-12615 实战防御:5步加固Tomcat配置与WAF规则编写
CVE-2017-12615 实战防御5步加固Tomcat配置与WAF规则编写Tomcat作为Java Web应用的核心容器其安全性直接关系到业务系统的稳定运行。CVE-2017-12615漏洞暴露了不当配置可能导致的严重风险——攻击者通过精心构造的PUT请求可上传恶意JSP文件进而获取服务器控制权。本文将提供一套从漏洞检测到彻底修复的完整解决方案涵盖自动化检测脚本、WAF规则编写和系统加固清单。1. 漏洞原理深度解析该漏洞的本质是Tomcat默认Servlet配置缺陷与操作系统特性结合的产物。当同时满足以下两个条件时漏洞即被触发配置缺陷conf/web.xml中DefaultServlet的readonly参数被显式设置为false方法启用服务器未禁用HTTP PUT方法攻击者利用链条通过PUT请求上传文件时Tomcat对文件名的处理存在逻辑缺陷Windows系统的文件名解析特性如::$DATA流、自动去除空格等可绕过后缀检查Linux系统可通过添加/字符绕过如shell.jsp/关键提示即使业务系统不需要PUT/DELETE方法Tomcat 7.x版本默认仍会响应这些请求这是许多管理员容易忽视的风险点。2. 自动化漏洞检测方案2.1 快速检测脚本以下Python脚本可批量扫描web.xml中的不安全配置#!/usr/bin/env python3 import os import xml.etree.ElementTree as ET def check_webxml(config_path): try: tree ET.parse(config_path) root tree.getroot() for servlet in root.findall(.//servlet): if servlet.find(servlet-name).text default: for init_param in servlet.findall(.//init-param): if init_param.find(param-name).text readonly: value init_param.find(param-value).text.lower() if value false: return True return False except Exception as e: print(f检测异常: {str(e)}) return None if __name__ __main__: import sys if len(sys.argv) ! 2: print(Usage: python scanner.py /path/to/tomcat/conf) sys.exit(1) webxml_path os.path.join(sys.argv[1], web.xml) if not os.path.exists(webxml_path): print(f错误: {webxml_path} 不存在) sys.exit(2) is_vulnerable check_webxml(webxml_path) print(f检测结果: {存在风险配置 if is_vulnerable else 未发现风险配置})2.2 检测指标说明检测项安全值风险值修复优先级readonly参数truefalse紧急PUT方法状态禁用启用高危Tomcat版本≥7.0.81≤7.0.79高危3. 多层次防御体系构建3.1 WAF规则配置Nginx示例在Nginx配置中添加以下规则拦截恶意PUT请求location / { # 基础防护规则 if ($request_method ~* (PUT|DELETE)) { return 405; } # 拦截异常JSP上传请求 if ($uri ~* \.jsp($|/|\s|:|%20)) { return 403; } # 拦截Windows特性绕过尝试 if ($uri ~* ::$DATA) { return 403; } }3.2 Apache ModSecurity规则SecRule REQUEST_METHOD ^PUT$ id:10001,phase:1,deny,msg:Block PUT requests SecRule REQUEST_URI \.jsp($|/|%20|:|\\$DATA) id:10002,phase:1,deny,msg:Block JSP upload attempts4. 五步加固检查清单4.1 版本升级# 查看当前版本 ./bin/version.sh # 升级步骤 1. 备份conf/、webapps/目录 2. 下载Tomcat 7.0.81或8.5.x 3. 停止旧服务 → 替换文件 → 恢复配置 4. 验证新版本http://localhost:8080/manager/status4.2 配置修复修改conf/web.xml确保包含init-param param-namereadonly/param-name param-valuetrue/param-value /init-param4.3 权限最小化# 创建专用运行账户 useradd -r -s /bin/false tomcat_user chown -R tomcat_user:tomcat_user /opt/tomcat4.4 网络层防护# 使用iptables限制管理接口访问 iptables -A INPUT -p tcp --dport 8080 -s 192.168.1.0/24 -j ACCEPT iptables -A INPUT -p tcp --dport 8080 -j DROP4.5 监控与审计# 实时监控webapps目录变化 inotifywait -m -r -e create,modify /opt/tomcat/webapps/ | while read path action file; do echo WARNING: File change detected - $path$file at $(date) /var/log/tomcat_audit.log done5. 应急响应指南当发现可疑活动时按以下流程处置立即隔离断开受影响服务器网络取证分析# 查找最近修改的JSP文件 find /opt/tomcat/webapps/ -name *.jsp -mtime -1 -ls # 检查访问日志中的PUT请求 grep -i PUT /opt/tomcat/logs/localhost_access_log.*漏洞修复执行前述加固措施后门排查使用工具检查常见Webshell特征恢复上线通过安全测试后重新接入服务深度防御建议结合SIEM系统对以下异常行为建立告警规则短时间内大量405/403状态码包含特殊字符如::$DATA的URI请求webapps目录下新增可执行文件