第三方支付技术

浅谈微信支付曝出的漏洞

2018年09月13日 热度:142 ℃

关键时刻,第一时间送达!

来源:编程迷思

在DTD中,可以引进实体,在解析XML时,实体将会被替换成相应的引用内容。该实体可以由外部引入(支持http、ftp等协议,后文以http为例说明),如果通过该外部实体进行攻击,就是XXE攻击。

可以说,XXE漏洞之所以能够存在,本质上在于在解析XML的时候,可以与外部进行通信;当XML文档可以由攻击者任意构造时,攻击便成为可能。在利用XXE漏洞可以做的事情当中,最常见最容易实现的,便是读取服务器的信息,包括目录结构、文件内容等;本次微信支付爆出的漏洞便属于这一种。

本次漏洞影响的范围是:在微信支付异步回调接口中,使用微信支付SDK进行XML解析的应用。注意这里的SDK是服务器端的SDK,APP端使用SDK并不受影响。

SDK中导致漏洞的代码是WXPayUtil工具类中的xmlToMap()方法:

如上图所示,由于在解析XML时没有对外部实体的访问做任何限制,如果攻击者恶意构造xml请求,便可以对服务器进行攻击。下面通过实例介绍攻击的方法。

3.  攻击复现

下面在本机环境下进行复现。

假设本地的web服务器127.0.0.1:8080中存在POST接口:/wxpay/callback,该接口中接收xml字符串做参数,并调用前述的WXPayUtil.xmlToMap(strXml)对xml参数进行解析。此外,/etc/password中存储了重要的密码数据(如password1234)。

攻击时构造的请求如下:

其中xml内容如下:

这样,攻击者便得到了/etc/password文件的内容。

在本例中,攻击者窃取了/etc/password文件中的内容,实际上攻击者还可以获取服务器中的目录结构以及其他文件,只要启动web应用的用户具有相应的读权限。如果获取的信息比较复杂,如包含特殊符号,无法直接通过http的URL发送,则可以采用对文件内容进行Base64编码等方法解决。

三、漏洞的解决

解决该漏洞的原理非常简单,只要禁止解析XML时访问外部实体即可。

漏洞曝出以后,微信进行了紧急修复,一方面是更新了SDK,并提醒开发者使用最新的SDK;SDK中修复代码如下:

加入了如下两行代码:

documentBuilderFactory.setExpandEntityReferences(false);

documentBuilderFactory.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING,true);

笔者本人使用上述方案中建议的如下代码修复了该漏洞:

DocumentBuilderFactorydocumentBuilderFactory=DocumentBuilderFactory.newInstance();

DocumentBuilderdocumentBuilder=documentBuilderFactory.newDocumentBuilder();

……

四、扩展与反思

1.  危害不只是“0元也能买买买”

在很多媒体的报道中,强调该漏洞的风险在于攻击者可以不支付也可以获得商品。确实,攻击者在通过上述漏洞获得微信支付的秘钥以后,有不止一种途径可以做到不支付就获得商品:例如,攻击者首先在系统中下单,获得商户订单号;然后便可以调用微信支付的异步回调,其中的签名参数便可以使用前面获取的秘钥对订单号等信息进行MD5获得;这样攻击者的异步回调就可以通过应用服务器的签名认证,从而获得商品。不过,在很多有一定规模的购物网站(或其他有支付功能的网站),会有对账系统,如定时将系统中的订单状态与微信、支付宝的后台对比,如果出现不一致可以及时报警并处理,因此该漏洞在这方面的影响可能并没有想象的那么大。

然而,除了“0元也能买买买”,攻击者可以做的事情还有很多很多;理论上来说,攻击者可能获得应用服务器上的目录结构、代码、数据、配置文件等,可以根据需要进行进一步破坏。

(1)接口使用xml做请求参数

(2)接口对外公开,或容易获得:例如一些接口提供给外部客户调用,或者接口使用http很容易抓包,或者接口比较容易猜到(如微信支付的异步回调接口)

(3)接口中解析xml参数时,没有禁用对外部实体的访问

建议大家最好检查一下自己的应用中是否有类似的漏洞,及时修复。

参考文献

    经典文章回顾:

顺手点点底部小广告哦,爱你们!

发表评论
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

相关文章

不再是谣言!微信、支付宝接入银联,这些重大变化你需要知道!

不再是谣言!微信、支付宝接入银联,这些重大变化你需要知道!

伴随着智能手机的普及,人们的消费和支付习惯也正在经历着前所未有的巨大变动。延续了千年的以币易物的支付模式正在逐渐被无现金化交易所取代,无论是网购还是线下购物,人们都越来越习惯用手机支付,微信和支付宝也...

柬埔寨第三方支付平台一鑫丰德

柬埔寨第三方支付平台一鑫丰德

第三方电子支付平台是属于第三方的服务中介机构,完成第三方担保支付的功能。它主要是面向开展电子商务业务的企支付平台业提供电子商务基础支撑与应用支撑服务,不直接从事具体的电子商务活动。移动支付在柬埔寨生机...

【扫码支付】BOF扫码支付接口正式开通 余额消费有奖励!

【扫码支付】BOF扫码支付接口正式开通 余额消费有奖励!

深圳浠玥珠宝有限公司在9月10日开通了BOF余额线下扫码支付功能,打开APP收付款功能,即可进行商家与会员间点对点交易,所有会员都可成为商家。 此次申请成为联盟商家,只需要支付10元的服务费以激活账户...

从0到1实现一套聚合支付系统

从0到1实现一套聚合支付系统

内容来源:本文来自中生代技术走进盒子支付线下活动分享,转载请联系作者及中生代技术。大家好,我是来自盒子科技研发部支付线刘恒,目前主要是负责公司的一个聚合支付系统的研发工作。今天主要是讲一下我们聚合支付...

【商标注册】准旗市场监督管理局商标注册指南

【商标注册】准旗市场监督管理局商标注册指南

★不忘初心砥砺前行★每日一学《党章》总纲:各项工作都要把_____,作为总的出发点和检验标准。(        )A.是否有利于发展社会主义社会的生产力B.是否有利于增强社会主义国家的综合国力C.是否...

北创营员|王朋:利楚扫呗,不依靠支付赚钱的“第四方”支付企业

REC武汉利楚扫呗,是国内首批从事第四方支付服务技术以及产品研发的科技企业,是全国自主研发移动端融合支付的先驱者。创始人王鹏,北创营全国五期班学员。创业这条路2009年,我在上大学3个月后辍学创业,今...