MetaMask 瀏覽器擴展錢包Clickjacking 漏洞分析

背景概述

2022 年6 月3 日,MetaMask(MM)公開了白帽子發現的一個嚴重的Clickjacking 漏洞,這個漏洞可以造成的影響是:在用戶的MM 插件錢包處於解鎖狀態,用戶訪問惡意的站點時,站點可以利用iframe 標籤將解鎖的MM 插件錢包頁面嵌入到網頁中並進行隱藏,然後引導用戶在網站上進行點擊操作,實際上是在MM 解鎖的頁面中進行操作,從而盜取用戶的數字貨幣或藏品等相關資產。鑑於MM 的用戶體量較大,且Fork MetaMask 插件錢包的項目也比較多,因此在MM 公開這個漏洞後,我們立即開始對這個漏洞進行複現,然後開始搜尋這個漏洞對於其他Fork MetaMask 項目的影響。

隨後,慢霧安全團隊盡可能地通知受到影響的項目方,並引導項目方進行修復。現在將這個Clickjacking 漏洞的分析公開出來避免後續的項目踩坑。

漏洞分析

由於MM 在發布這個Clickjacking 漏洞的時候並沒有詳細的說明,僅是解釋了這個漏洞的利用場景以及能夠產生的危害,所以我在進行複現的時候也遇到了挺多坑(各種盲猜漏洞點),所以為了讓大家能夠更好地順暢地理解整個漏洞,我在進行漏洞分析之前先補充下一個知識點。

我們來了解下Manifest – Web Accessible Resources。在瀏覽器擴展錢包中有這麼一個配置:web_accessible_resources,其用來約束Web 頁面能夠訪問到瀏覽器擴展的哪些資源,並且在默認的情況下是Web 頁面訪問不到瀏覽器擴展中的資源文件,僅瀏覽器擴展的本身才能訪問到瀏覽器擴展的資源。簡而言之就是http/https 等協議下的頁面默認是沒法訪問到chrome-extension,當然如果擴展錢包配置了web_accessible_resources 將擴展錢包內部的資源暴露出來,那麼就能被http/https 等協議下的頁面訪問到了。

而MM 擴展錢包在10.14.6 之前的版本(本文以10.14.5 為例)一直保留著”web_accessible_resources”: [“inpage.js”, “phishing.html”] 的配置,而這個配置是漏洞得以被利用的一個關鍵點。

然而在進行漏洞分析的時候,發現在app/scripts/phishing-detect.js(v10.14.5) 中已經對釣魚頁面的跳轉做了協議的限制。 (這裡的限制在我的理解應該是還有其他的坑,畢竟”web_accessible_resources”: [“inpage.js”, “phishing.html”]`這個配置還保留著)。

我們繼續跟進這個協議限制的改動時間點,發現是在如下這個commit 中添加了這個限制,也就是說在v10.14.1 之前由於沒有對跳轉的協議進行限制,導致Clickjacking 漏洞可以輕易被利用。

相關的commit:

https://github.com/MetaMask/metamask-extension/commit/c1ca70d7325577835a23c1fae2b0b9b10df54490

https://github.com/MetaMask/metamask-extension/compare/v10.14.0…v10.14.1

為了驗證代碼的分析過程,我們切換到protocol 限制之前的版本v10.14.0 進行測試,發現可以輕鬆復現整個攻擊過程。

但是在MM 公開的報告中也提到,Clickjacking 漏洞是在v10.14.6 進行了修復,所以v10.14.5 是存在漏洞的,再繼續回頭看這裡的猜想。 (這裡的限制在我的理解應該是還有其他的坑,畢竟”web_accessible_resources”: [“inpage.js”, “phishing.html”] 這個配置還保留著)。

經過反复翻閱代碼,在v10.14.5 以及之前版本的代碼,會在釣魚頁面提示的時候,如果用戶點擊了continuing at your own risk. 之後就會將這個hostname 加入到本地的白名單列表中。從而在下一次訪問到該網站的時候就不會再出現MetaMask Phishing Detection 的提醒。

比如這個釣魚網站:ethstake.exchange,通過iframe 標籤將釣魚網站嵌入到網頁中,然後利用Clickjacking 漏洞就能將惡意的釣魚網站加入到白名單中,同時在用戶下一次訪問釣魚網站的時候MM 不會再繼續彈出警告。

分析結論

如上述的分析過程,其實MM 近期修復的是兩個Clickjacking 漏洞,在復現過程中發現最新的v10.14.6 已經將web_accessible_resources 的相關配置移除了,徹底修復了MetaMask Phishing Detection 頁面的點擊劫持的問題。

(1)利用Clickjacking 漏洞誘導用戶進行轉賬的修復(影響版本:< = v10.14.0):

https://github.com/MetaMask/metamask-extension/commit/c1ca70d7325577835a23c1fae2b0b9b10df54490

(2)利用Clickjacking 漏洞將釣魚網站加入到白名單的修復(影響版本:<= v10.14.5):

https://github.com/MetaMask/metamask-extension/commit/7199d9c56775111f85225fe15297e47de8e2bc96

慢霧安全團隊對chrome 擴展商店中的各個知名的擴展錢包進行了Clickjacking 的漏洞檢測,發現如下的錢包受到Clickjacking 漏洞影響:

  • Coinbase Wallet (v2.17.2)

  • Coin98 Wallet (v6.0.6)

  • Maiar DeFi Wallet (v1.2.17)

慢霧安全團隊第一時間聯繫項目方團隊,但是到目前為止部分項目方還未反饋,並且MM 公開這個漏洞至今已經過去了11 天。為了避免用戶因為該漏洞遭受損失,慢霧安全團隊選擇公開漏洞的分析。如果受影響的相關項目方看到這篇文章需要協助請聯繫慢霧安全團隊。

慢霧安全團隊再次提醒瀏覽器擴展錢包項目方如果有基於MetaMask

慢霧安全團隊建議普通用戶在項目方還未修復漏洞之前可以先暫時停止使用這些擴展錢包(在瀏覽器擴展程序管理中關閉這些擴展錢包),等待錢包官方發布修復版本後,用戶可以及時更新到已修復的版本進行使用。

Total
0
Shares
Related Posts