關(guān)于第三方支付平臺JAVA SDK存在XXE漏洞的安全公告
發(fā)布時間:2018-07-172018年7月3日,國家信息安全漏洞共享平臺(CNVD)收錄了第三方支付平臺JAVA SDK存在XXE漏洞(CNVD-2018-12508)。綜合利用上述漏洞,攻擊者可實現(xiàn)商戶服務(wù)器端系統(tǒng)的XML外部實體注入攻擊。目前漏洞的利用細(xì)節(jié)已被公開,廠商已發(fā)布補丁進(jìn)行修復(fù)。
一、漏洞情況分析
可擴展標(biāo)記語言(XML,eXtensible Markup Language)用于標(biāo)記電子文件使其具有結(jié)構(gòu)性的標(biāo)記語言,可以用來標(biāo)記數(shù)據(jù)、定義數(shù)據(jù)類型。XML具備在任何應(yīng)用程序中進(jìn)行數(shù)據(jù)讀寫的簡單特性,使其很快成為數(shù)據(jù)交換的唯一公共語言,被廣泛應(yīng)用于第三支付平臺與商戶之間交換數(shù)據(jù)的格式定義。
XML語言標(biāo)準(zhǔn)支持與外部進(jìn)行實體數(shù)據(jù)交換的特性。應(yīng)用程序在解析XML輸入時,沒有禁止外部實體加載功能,會導(dǎo)致XML外部實體注入漏洞(XML External Entity Injection,XXE)。2018年7月2日,境外SecLists網(wǎng)站發(fā)布了微信支付JAVA軟件工具開發(fā)包(SDK)存在XXE漏洞。利用該漏洞,攻擊者可在使用信息泄露、掃描爆破等特殊手段獲知商戶的通知接口(callback)地址的前提下,發(fā)送惡意XML實體,在商戶服務(wù)器上執(zhí)行代碼,實現(xiàn)對商戶服務(wù)器的任意文件讀取。如果攻擊者進(jìn)一步獲得商家的關(guān)鍵安全密鑰,就可能通過發(fā)送偽造信息實現(xiàn)零元支付。
CNVD對該漏洞的綜合評級為“高?!薄?/span>
二、漏洞影響范圍
該漏洞影響商戶服務(wù)器后臺系統(tǒng)的安全,目前已知微信支付JAVA SDK7月3日之前發(fā)布的版本、陌陌和vivo商戶系統(tǒng)受此漏洞影響。
陌陌公司、騰訊公司和vivo商戶系統(tǒng)已分別于7月2日、7月3日、7月4日完成修復(fù)。
三、漏洞修復(fù)建議
建議第三方支付平臺對本公司開發(fā)的SDK工具進(jìn)行自查,發(fā)現(xiàn)安全隱患請及時通知下屬商戶,及時消除漏洞攻擊威脅。
1、騰訊公司已發(fā)布JAVA SDK修復(fù)版本,建議商戶及時更新至最新版本:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=11_1
2、用戶可使用開發(fā)語言提供的禁用外部實體的方法,JAVA禁用外部實體的代碼如下:
DocumentBuilderFactory dbf =DocumentBuilderFactory.newInstance();
dbf.setExpandEntityReferences(false);
3、過濾用戶側(cè)提交的XML數(shù)據(jù)
過濾關(guān)鍵詞:DOCTYPE、ENTITY、SYSTEM、PUBLIC。
附:參考鏈接:
http://www.cnvd.org.cn/flaw/show/CNVD-2018-12508
http://seclists.org/fulldisclosure/2018/Jul/3
感謝CNVD成員單位深圳市騰訊計算機系統(tǒng)有限公司、北京知道創(chuàng)宇信息技術(shù)有限公司對本公告提供技術(shù)支持。