【漏洞預警】CNNVD 關于微信支付官方SDK XXE漏洞情況的通報
近日,國家信息安全漏洞庫(CNNVD)收到關于微信支付SDK XXE(XML External Entity)漏洞(CNNVD-201807-083)情況的報送。成功利用該漏洞的攻擊者可以遠程讀取服務器文件,獲取商戶服務器上的隱私數據,甚至可以支付任意金額購買商品。使用有漏洞的Java版本微信支付SDK進行支付交易的商家網站可能受此漏洞影響。目前,微信官方已經發布補丁修復該漏洞,建議用戶及時確認是否受到漏洞影響,盡快采取修補措施。 一、漏洞介紹 微信支付官方SDK是微信支付官方的軟件工具開發包,在使用微信支付時,商家需要向微信提供一個URL用來接收異步支付結果的通知,該接口接受XML格式的數據。XML語言標準支持了與外部進行實體數據交換的特性,如果程序在解析XML時沒有限制或關閉該特性,同時外部又可以傳入有惡意代碼的XML數據就會觸發漏洞。微信支付官方提供的SDK由于編碼遺漏,未關閉該XML特性。商家在其系統中如果使用該版本SDK,系統便會受漏洞影響。 微信在支付過程中,其Java版本的SDK沒有關閉該XML特性,導致攻擊者在獲取了接收通知的URL地址的前提下,可以通過構造惡意的XML數據包發送到該URL來竊取商家網站服務器上的隱私數據。 二、危害影響 成功利用該漏洞的攻擊者可以遠程讀取服務器文件,獲取商戶服務器上的隱私數據,甚至可以支付任意金額購買商品。使用有漏洞的Java版本微信支付SDK進行支付交易的商家網站可能受此漏洞影響。 三、修復建議 目前,微信官方已經發布補丁修復該漏洞,建議用戶及時確認是否受到漏洞影響,盡快采取修補措施,具體措施如下: 1.如果后臺系統使用了官方SDK,請更新SDK到最新版本,鏈接如下: https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=11_1 2.如果有系統提供商,請聯系提供商進行核查和升級修復; 3.如果是自研系統,請聯系技術部門按以下指引核查和修復: XXE漏洞需要在代碼中進行相應的設置,不同語言設置的內容不同,下面提供了幾種主流開發語言的設置指引: 【PHP】 libxml_disable_entity_loader(true); 【JAVA】 不同java組件修復方案不一樣,請參考OWASP修復建議: https://www.owasp.org/index.php/XML_External_Entity_(XXE)_Prevention_Cheat_Sheet#Java 【.Net】 XmlResolver = null 【Python】 from lxml import etree xmlData = etree.parse(xmlSource,etree.XMLParser(resolve_entities=False)) 【c/c++(常用庫為libxml2 libxerces-c)】 【libxml2】: 確保關閉配置選項:XML_PARSE_NOENT 和 XML_PARSE_DTDLOAD 2.9版本以上已修復xxe 【libxerces-c】: 如果用的是XercesDOMParser: XercesDOMParser *parser = new XercesDOMParser; parser->setCreateEntityReferenceNodes(false); 如果是用SAXParser: SAXParser* parser = new SAXParser; parser->setDisableDefaultEntityResolution(true); 如果是用SAX2XMLReader: SAX2XMLReader* reader = XMLReaderFactory::createXMLReader(); parser->setFeature(XMLUni::fgXercesDisableDefaultEntityResolution, true); 此外,針對使用XML進行數據交換的網絡系統(如:第三方支付平臺等),建議相關系統廠商對解析處理XML數據的功能代碼進行安全檢查,可參考上述方法修復漏洞,及時消除漏洞風險。 來源:國家信息安全漏洞庫