關于第三方支付平臺JAVA SDK存在XXE漏洞的安全公告
發布時間:2018-07-172018年7月3日,國家信息安全漏洞共享平臺(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
感謝CNVD成員單位深圳市騰訊計算機系統有限公司、北京知道創宇信息技術有限公司對本公告提供技術支持。