CVE-2017-12615high
Tomcat PUT 方法远程代码执行
Tomcat 7/8/9 在 Windows 且 DefaultServlet 的 readonly 为 false 时,可通过 PUT 上传文件,结合文件名特性写出可执行内容。
# CVE-2017-12615 · Tomcat PUT 方法远程代码执行
## 基本信息
- 编号:CVE-2017-12615
- 组件:Apache Tomcat 7 / 8 / 9
- 影响条件:Windows 环境,且 servlet 的 readonly 初始化参数为 false
- 严重度:high
## 问题成因
Tomcat 的 DefaultServlet 支持 PUT 方法上传文件。当 readonly 配置为 false 时,PUT 请求可以把文件写进 Web 目录。Windows 下文件名末尾的点、空格以及流数据后缀会被系统处理掉,攻击者借此绕过 Tomcat 对可执行后缀的拦截,最终写出可执行页面。
## 关键点
- 不是所有 Tomcat 都中招:需要 readonly=false,默认配置是 true
- 平台相关:利用依赖 Windows 的文件名处理特性
- 危害路径是"写文件 → 写成可执行内容 → 访问执行"
## 修复与缓解
1. 升级 Tomcat 到官方修复版本
2. 确认 DefaultServlet 的 readonly 为 true(默认值)
3. 在 Web 服务器层禁用 PUT / DELETE 方法,只开放需要的动词
4. 应用以低权限账户运行,Web 目录不给执行权限
## 常见坑
- 只看了 Tomcat 版本,没检查 conf/web.xml 里 readonly 是否被改成 false
- 以为内网系统不暴露就没风险,忽略了横向移动场景
- 升级后没有复核方法白名单,历史遗留的 PUT 规则仍在
## 怎么验证
在测试环境对静态目录做路径穿越请求,观察是否返回 405 或 403。