MetaMask 瀏覽器擴充套件錢包 Clickjacking 漏洞分析

語言: CN / TW / HK

By:Thinking@慢 霧安全團隊

背景概述

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_accessi ble_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 <v10.14.6 的版本進行開發的要注意排查是否有受到該漏洞的影響,如需要協助請聯絡慢霧安全團隊。

慢霧安全團隊建議普通使用者在專案方還未修復漏洞之前可以先暫時停止使用這些擴充套件錢包(在瀏覽器擴充套件程式管理中關閉這些擴充套件錢包 ,等待錢包官方釋出修復版本後,使用者可以及時更新到已修復的版本進行使用。

參考連結

https://medium.com/metamask/metamask-awards-bug-bounty-for-clickjacking-vulnerability-9f53618e3c3a

慢霧導航

慢霧科技官網

https://www.slowmist.com/

慢霧區官網

https://slowmist.io/

慢霧 GitHub

https://github.com/slowmist

Telegram

https://t.me/slowmistteam

Twitter

https://twitter.com/@slowmist_team

Medium

https://medium.com/@slowmist

知識星球

https://t.zsxq.com/Q3zNvvF