喝彩科技!精美设计! 用心服务每一位客户!
0371-5665 0505

移动互联网营销,互联网整合营销!

实战 专业 落地 高效  

【微信专区】您现在的位置:首页 > 新闻中心 > 微信专区

微信支付SDK漏洞xxe漏洞修复解决方案

人气: 编辑:喝彩科技   日期:2018/7/5 23:34:20

微信支付SDK漏洞xxe漏洞修复解决方案,在没说解决方案之前,咱们先来回顾下:7月3日,国外安全社区里一名白帽子披露了微信支付官方SDK存在严重的XXE漏洞,可导致商家服务器被入侵,并且黑客可避开真实支付通道,用虚假的支付通知来购买任意产品。另外,陌陌、vivo已经验证被该漏洞影响。

腾讯方面接受《中国经营报》记者采访时表示:“微信支付技术安全团队已及时关注及排查,并于今天中午对官方网站上该SDK漏洞进行更新,修复了已知的安全漏洞,并在此提醒商户及时更新。请大家放心使用微信支付。”

具体通知如下:

微信支付接口安全提醒通知

尊敬的微信支付商户:
您的系统在接受微信支付XML格式的商户回调通知(支付成功通知、退款成功通知、委托代扣签约/解约/扣款通知、车主解约通知)时,如未正确地进行安全设置或编码,将会引入有较大安全隐患的XML 外部实体注入漏洞(XML External Entity Injection,简称 XXE)。
请贵司研发人员务必参考微信支付安全实践指引,进行安全隐患确认和排除。
微信支付团队

2018年7月3号

虽然微信官方已经修复更新了sdk,并且也及时通知了商户进行升级更新,但是大部分商家还是感到恐慌手足无措,因为他们不懂程序,他们不知道到底有多大危害,并且他们大部分是找的网络公司进行开发的,他们只有联系开发服务商来进行处理。


有些网络公司服务商,本身技术能力都有限,只是代理了一些其他公司的产品来进行销售,比如模板网站、模版微站、模板小程序等,他们收到客户反馈的问题后,依靠自身的技术无法进行修复,也感到束手无策。在此我作为喝彩科技的技术工程师,为业界同行尽一份绵薄之力,来为大家分享一下《微信支付SDK漏洞xxe漏洞修复解决方案》。

先来看下漏洞出现的原因,微信支付sdk下XXE漏洞其实就是XML外部实体注入漏洞(XML External Entity Injection,简称 XXE),该安全问题是由XML组件默认没有禁用外部实体引用导致。那么这个问题会出现在哪些场景呢?


场景1:支付成功通知;场景2:退款成功通知;场景3:委托代扣签约、解约、扣款通知;场景4:车主解约通知;

说白了就是出现在支付回调通知的场景中,比如你买的商品,支付成功了,微信上是不是有个支付成功通知。那这个时候如果没修复此漏洞的情况下,就会被黑客利用。再比如,你买个东西,用微信支付成功了,然后又不想买了,申请退款,退款成功后,是不是也收到个退款成功通知,漏洞就是在这个时候出现的。


好了,既然问题和场景都找到了,下一步就是如何修复?


大部分商家用的系统都是网络公司服务商开发的,而不是直接用的官方demo,今天针对PHP编程语言,我详细给大家说下修复方案(并附上修复代码)

1、首先找到微信支付所对应的文件夹。(自行查找,不再赘述)

2、其次找到微信支付的代码,一般是在WxPay.Data.php文件或者是Notify.php文件中,根据自己实际情况具体查找。

3、然后找到如下代码部分

4、最后将在这部分代码前,加上libxml_disable_entity_loader(true);

5、进行漏洞测试验证。


如果不想改动代码,也可以再不修改代码的情况下,借助于WAF或者RASP来修复。具体方法:在WAF添加关键词过滤规则:

另外网上爆出的漏洞是基于微信支付java版的SDK,我在此也给大家说下针对java版的修复方案:

微信官方支付SDK“WXPayUtil.java”没有对xxe漏洞进行防护,导致使用方直接在demo上进行开发。根据WXPayUtil.java的demo,需要禁用DTDs。为什么要禁用DTD呢?

由于大多数脚本解析器并不会默认禁用DTD、Entity,因此系统出现XXE漏洞的可能性很高。Java解析XML的常用三方库,如果不禁用DTD、Entity都会导致XXE漏洞。

java修复方案,直接找到对应代码,加上DocumentBuilderFactory.setExpandEntityReferences(false);

或者如下图所示:

微信支付sdk漏洞java修复方案

好了,今天分享到这里,有什么问题可以关注我,向我提问。

关键词:微信支付SDK漏洞,xxe漏洞修复方案    
    

评论专区

联系方式