国家信息安全漏洞共享平台(CNVD)收录了第三方支付平台JAVA SDK存在XXE漏洞(CNVD-2018-12508)。综合利用上述漏洞,攻击者可实现商户服务器端系统的XML外部实体注入攻击。
一、漏洞情况分析
可扩展标记语言(XML,eXtensible Markup Language)用于标记电子文件使其具有结构性的标记语言,可以用来标记数据、定义数据类型。XML具备在任何应用程序中进行数据读写的简单特性,使其很快成为数据交换的唯一公共语言,被广泛应用于第三支付平台与商户之间交换数据的格式定义。
XML语言标准支持与外部进行实体数据交换的特性。应用程序在解析XML输入时,没有禁止外部实体加载功能,会导致XML外部实体注入漏洞(XML External Entity Injection,XXE)。2018年7月2日,境外SecLists网站发布了微信支付JAVA软件工具开发包(SDK)存在XXE漏洞。利用该漏洞,攻击者可在使用信息泄露、扫描爆破等特殊手段获知商户的通知接口(callback)地址的前提下,发送恶意XML实体,在商户服务器上执行代码,实现对商户服务器的任意文件读取。如果攻击者进一步获得商家的关键安全密钥,就可能通过发送伪造信息实现零元支付。
CNVD对该漏洞的综合评级为“高危”。
二、漏洞影响范围
该漏洞影响商户服务器后台系统的安全,目前已知微信支付JAVA SDK7月3日之前发布的版本、陌陌和vivo商户系统受此漏洞影响。
陌陌公司、腾讯公司和vivo商户系统已分别于7月2日、7月3日、7月4日完成修复。
三、漏洞修复建议
建议第三方支付平台对本公司开发的SDK工具进行自查,发现安全隐患请及时通知下属商户,及时消除漏洞攻击威胁。
1、腾讯公司已发布JAVA SDK修复版本,建议商户及时更新至最新版本:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=11_1
2、用户可使用开发语言提供的禁用外部实体的方法,JAVA禁用外部实体的代码如下:
DocumentBuilderFactory dbf =DocumentBuilderFactory.newInstance();
dbf.setExpandEntityReferences(false);
3、过滤用户侧提交的XML数据
过滤关键词:DOCTYPE、ENTITY、SYSTEM、PUBLIC。
附:参考链接:
http://www.cnvd.org.cn/flaw/show/CNVD-2018-12508
http://seclists.org/fulldisclosure/2018/Jul/3