针对Apache Struts框架文件泄露漏洞(以文件上传型漏洞为主)的技术分析与修复方案,综合最新漏洞情报整理而成:
⚠️ 一、漏洞概述与影响
核心漏洞
CVE-2023-50164(S2-066) 与 CVE-2024-53677:攻击者通过污染上传参数(如文件名、路径变量),构造恶意请求实现路径穿越(Path Traversal),将恶意文件(如JSP Webshell)上传至非预期目录,最终导致远程代码执行(RCE)126。
历史同类漏洞:S2-045(CVE-2017-5638)、S2-016 等,均因拦截器逻辑缺陷导致RCE48。
影响范围
Struts 版本范围 状态 2.0.0 – 2.3.37 受影响(EOL) 2.5.0 – 2.5.32 受影响 6.0.0 – 6.3.0.2 受影响 注:使用 FileUploadInterceptor
组件的应用风险最高137。
⚙️ 二、漏洞原理与利用机制
攻击流程
图表
代码
关键绕过手法:利用参数名大小写敏感性问题(如
Dest
vsdest
)或通过URL参数(如?destFileName=../
)覆盖安全过滤逻辑2。漏洞触发点:
FileUploadInterceptor
未正确处理用户输入路径,导致防护函数getCanonicalName()
被绕过2。
🛡️ 三、修复方案
1. 官方升级(首要推荐)
修复版本:
Struts ≥ 2.5.33
Struts ≥ 6.3.0.2 或 ≥ 6.4.0(推荐)137
升级步骤:
访问 Apache Struts 下载页 获取新版。
替换项目中旧版 JAR 文件(如
struts2-core-*.jar
)。迁移至新文件上传机制
ActionFileUploadInterceptor
7。
2. 临时缓解措施(无法立即升级时)
接口管控:禁止对外暴露未授权的文件上传接口15。
二次校验:在业务代码层面对上传文件进行扩展名、内容、路径的严格校验16。
删除危险组件:移除
commons-fileupload-x.x.x.jar
(可能导致上传功能失效)48。WAF/IPS 防护:配置规则拦截包含
../
、%00
等路径穿越特征的请求35。
3. 安全加固建议
配置优化:在
web.xml
中强化Struts2过滤器规则,限制参数解析逻辑10。漏洞监控:使用流量分析设备(如TDP、IDS)监控恶意文件上传行为35。
权限最小化:运行Struts的账户禁止对系统目录有写权限。
🔍 四、检测与验证方法
自查版本
检查项目/WEB-INF/lib/
目录下 JAR 文件版本(如struts2-core-2.3.37.jar
表示受影响)48。渗透测试工具
Struts Scan:检测历史漏洞(S2-045、S2-066等)8:
微步TDP:规则ID
S3100137050
支持检测CVE-2023-5016456。
💎 总结建议
场景 | 措施 |
---|---|
生产环境在受影响范围 | 立即升级至官方修复版本(≥2.5.33或≥6.4.0) |
遗留系统无法升级 | 实施临时缓解 + WAF防护 + 代码层二次校验 |
新系统开发 | 使用新版Struts(≥6.4.0)并采用 ActionFileUploadInterceptor 上传机制7 |