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