1、概述
福州富昌维控(WECON)电子科技有限公司是一家专业从事自动化领域产品研究、开发与销售的高科技公司,公司生产工业互联网网关、工业人机界面和通用型PLC等产品,WECON LeviStudio是一套人机界面编程软件,经过研究,我司发现了该软件的某些版本中存在缓冲区溢出、XXE等漏洞。2020年12月初ICS-CERT对漏洞信息进行更新和纰漏,本文章对其中的一个XXE漏洞进行分析和复现。
2、XXE注入
XXE Injection即XML External Entity Injection,也就是XML外部实体注入攻击,漏洞是在对非安全的外部实体数据进⾏行处理时引发的安全问题。
在XML1.0标准里,XML文档结构中定义了实体(entity)这个概念,实体可以通过预定义在文档中调用,实体的标识符可访问本地或远程内容。如果在这个过程中引入了”污染”源,在对XML文档处理后则可能导致信息泄漏等安全问题。
XML大家再熟悉不过了,XML是用于标记电子文件使其具有结构性的标记语言,可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。XML文档结构包括XML声明、DTD文档类型定义(可选)、文档元素。
其中,DTD实体是用于定义引用普通文本或特殊字符的快捷方式的变量,可以内部声明或外部引用。当允许引用外部实体时,通过构造恶意内容,可导致读取任意文件、执行系统命令、探测内网端口、攻击内网网站等危害。
3、漏洞复现
从ICS-CERT网站发布的漏洞信息可知,存在漏洞的软件版本为:Build 2019-09-21及其之前的build,安装对应的软件版本,打开运行即可:
软件存的XXE漏洞存在于程序处理UMP格式的工程文件过程中,未对外部实体解析进行适当限制和处理,由此可导致敏感信息泄露。
触发此漏洞,第一步需要一个相关的工程文件,工程文件可以通过创建工程来获得:
或者直接使用程序自带的demo工程:
任意挑选一个demo工程,打开可以看到.ump的文件:
此处需要着重分析UMP文件,打开此文件可发现其实质为一个XML格式的文件,那么XXE是不是就有机会了呢?
使用软件打开此工程,即可推测UMP文件实质为对各个页面、元素属性的定义:
接下来就需要创建XXE的payload,插入到UMP文件中进行尝试了。使用最常用的payload:
注意,上述IP地址需要更换为攻击机的IP,XXE.txt为靶机中实际存在的一个样例文件:
在攻击机中使用 Python 搭建简易 HTTP Server:
在把靶机中,使用软件打开被XXE注入的工程文件:
发现工程打开报错,难道此路不通?实际上漏洞已经利用成功:C:\XXE.txt中的内容已经返回到攻击机的HTTP Server中:
由此XXE漏洞复现成功。
参考资料:
[1] https://us-cert.cisa.gov/ics/advisories/icsa-20-238-03
[2] https://www.vsecurity.com//download/papers/XMLDTDEntityAttacks.pdf