IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者

XML实体注入漏洞安全警告

80sec 2011-11-04 22:28:39 累计浏览 3,373 次
本机暂存

漏洞介绍:可扩展标记语言 (Extensible Markup Language, XML) ,用于标记电子文件使其具有结构性的标记语言,可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。 XML是标准通用标记语言 (SGML) 的子集,非常适合 Web 传输。XML 提供统一的方法来描述和交换独立于应用程序或供应商的结构化数据。80sec发现目前一些普遍使用xml的场景中都存在一种古老的XML实体注入漏洞,这可能导致较为严重的安全问题,使得攻击者可能可以任意访问服务器以及应用所在网络的任何资源;

漏洞分析:XML作为一种使用较为广泛的数据传输格式,在语言内部允许引用外部资源来作为语言的补充,譬如


<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!DOCTYPE copyright [
<!ELEMENT copyright (#PCDATA)>
<!ENTITY hi80sec SYSTEM "http://www.wooyun.org/">
]>
<wooyun version="2.0">
<whitehats>
&hi80sec; is a legend
</whitehats>
</wooyun>

这将使得xml解析器以当前上下文的环境引用外部的资源www.wooyun.org作为hi80sec实体的内容,从而在实际的应用上下文里将该部分数据引入逻辑流程进行处理。同样,我们可以使用

file:///etc/passwd
file://localhost/etc/password

进行访问本地文件系统的操作。

不同的解析器可能默认对于外部实体会有不同的处理规则,以PHP语言为例,默认处理xml的方法就包括:

xml_parse

simplexml_load

两种不同的方法,这两种不同的方法在底层完全采取不同的底层逻辑实现,xml_parse的实现方式为expat库,而simplexml_load使用的是libxml库,两个底层库在解析的时候细节并不一样,expat默认对外部实体并不解析,而simplexml_load默认情况下会解析外部实体等,所以simplexml_load和DOM等函数会受此问题影响,而xml_parse则默认不会受到影响。
我们不止在PHP,在包括Java,Python等处理xml的外部组件及函数中都证明可能存在此问题,而且已经在一些互联网公司的应用及一些使用广泛的开源软件中都发现存在问题。

漏洞证明:我们将在WooYun漏洞报告平台上提交我们发现的已经被证明的安全漏洞

解决方案:检查所使用的底层xml解析库,默认禁止外部实体的解析,同时增强对系统的监控,防止此问题被人利用;我们将在WooYun漏洞报告平台上发布可能受影响的,请及时关注;

同分类推荐文章

  1. 绿盟科技《APT组织研究年鉴》(2026 版)正式发布 (2026-06-16 20:21:10)
  2. 【已复现】Linux内核Fragnesia权限提升漏洞(CVE-2026-46300) (2026-06-15 10:53:58)
  3. 企业文档安全最佳实践(二):给文档上“身份证”——手动标密与智能自动标密 (2026-06-12 17:18:33)

查看更多 安全 文章 →

建议继续学习

  1. XML和JSON (累计阅读 7,727)
  2. AWStats是一个基于Perl的WEB日志分析工具。 (累计阅读 7,176)
  3. WordPress安全建议 (累计阅读 6,384)
  4. 使用SoapHeader实现Soap请求验证 (累计阅读 6,061)
  5. 国内团购网前端严重安全漏洞– 以满座网为案例分析 (累计阅读 5,874)
  6. 如何向外行人解释什么是内存溢出 (累计阅读 5,820)
  7. 什么是OpenID?OpenID概念、原理和案例 (累计阅读 5,495)
  8. 深入浅出Session攻击方式之一 – 固定会话ID (累计阅读 5,426)
  9. 利用系统时间可预测破解java随机数 (累计阅读 4,796)
  10. CSDN明文口令泄露的启示 (累计阅读 4,775)