返回所有文章
發佈於 · 作者 Renaud Deraison

當商店本身就是威脅——108 個惡意 Chrome 擴充功能、一台 C2、兩萬次安裝

一個操作者用五個偽造的發布者身分,往 Chrome Web Store 塞進了 108 個惡意擴充功能,累積大約兩萬次安裝,並把全部流量都導向同一台命令與控制伺服器。審查機制沒擋住。這就是一款以安全為先的瀏覽器為什麼必須採取更硬的立場。

瀏覽器擴充功能,是一種你裝上之後,能夠讀取你造訪的每一個頁面、讀取你的瀏覽器所持有的每一個權杖、並以你的名義做事的程式。Chrome Web Store 承諾會審查這些程式。2026 年 4 月,一個操作者一口氣發布了 108 個,收割了大約兩萬次安裝,再把所有流量都導向同一台伺服器。商店沒發現。

4 月 14 日,應用程式安全公司 Socket 揭露了Chrome Web Store 裡一場協調一致的惡意擴充功能行動。研究員 Kush Pandya 找到了 108 個以五個偽造發布者身分——Yana Project、GameGen、SideGames、Rodeo Games 與 InterAlt——上架的擴充功能,全部都指向位於 144.126.135[.]238 的同一台命令與控制(C2)伺服器。合計起來,這些擴充功能已經被安裝了大約兩萬次。同日,The Hacker News 佐證了這些數字。

這些擴充功能既不是什麼壞網址造成的小困擾,也不是在真軟體上貼一點廣告詐欺而已。它們是一整套工具包:

  • 54 個擴充功能會在分頁剛載入的瞬間,抓取 OAuth2 Bearer 權杖——Chrome 用來向 Google 服務標示你身分的那段短暫字串——藉此偷走已登入使用者的 Google 身分。
  • 45 個擴充功能帶有 Socket 所形容的通用後門:它們會在瀏覽器啟動時,根據從 C2 拉回來的命令打開任意網址。這是點擊詐欺、路過式下載,或者悄悄把你導向漏洞利用頁面的一種基礎能力。
  • 其他擴充功能則把攻擊者所控制的 HTML 注入到真實網站裡,剝掉 HTTP 安全標頭好讓注入的內容真的跑得起來,每 15 秒劫持一次 Telegram Web 工作階段,把翻譯請求透過攻擊者代理轉發,或者在 YouTube 和 TikTok 頁面上罩一層博弈覆蓋層。

程式碼在身分認證與工作階段竊取的路徑上,帶有俄語註解。研究員指出,操作者的身分不明;基礎設施託管在 Contabo 的一台 VPS 上,子網域按功能分工(身分蒐集、命令執行、變現、工作階段劫持)。

這件事爆出來的時候,108 個擴充功能中,沒有一個被從 Web Store 下架。

擴充功能到底是什麼,以及為什麼這不只是又一則惡意軟體的報導。

大多數人裝瀏覽器擴充功能,就像在裝字型:看到一個感覺有用的,按下藍色按鈕,然後忘了它。有時會跳出來的那個「權限」對話框,是早期、比較清楚的年代留下來的遺物。在 Chrome 目前的擴充功能模型裡,相當高比例的真實擴充功能會要求類似下面這些東西,而使用者並沒有任何有意義的方式可以只拒絕其中一部分:

擴充功能「Cursor Tails」1,348 位使用者你開的每一個分頁讀取 + 修改頁面Cookie + 儲存空間對你造訪的任何網站網路請求檢視 + 改寫標頭Google OAuth 權杖你已登入的身分瀏覽器啟動時每次啟動都跑一遍程式碼一次「安裝」點擊,上面這些全部授權。瀏覽器不會再問第二次。
使用者按下「安裝」之後,瀏覽器擴充功能能做的事,用大白話說出來。這不是 bug、也不是濫用——這就是這個模型本身。擴充功能是住在你瀏覽器裡的程式,而瀏覽器的工作就是去執行它們。

擴充功能位於同源政策(same-origin policy)之上,而同源政策正是讓各個分頁彼此隔離的那道牆。這就是它們存在的全部意義:廣告封鎖外掛如果不能讀到每個網站上的廣告,就沒辦法做事;密碼管理器如果不能盯著每一個登入表單,也沒辦法做事。瀏覽器相當合理地,在執行時不去區分「廣告封鎖器讀取頁面是為了藏掉一條橫幅廣告」和「惡意擴充功能讀取頁面是為了偷走你的工作階段權杖」。它們是同一種能力,只是以不同的理由被授予。

所以 Socket 揭露的這 108 個擴充功能所做的,並不是什麼對 Chrome 安全機制的巧妙繞過。它們只是擴充功能平台那些正常、被寫進文件的行為,被指向了操作者的伺服器,而不是使用者的利益。

五個偽造發布者,一台伺服器,兩萬次安裝。

這場行動的形狀才是重點。一個行為者、幾個充當人頭帳號的發布者帳戶、一份在表面上看起來類別頗多的目錄——吃角子老虎與 Keno 遊戲、YouTube 和 TikTok 的「強化外掛」、Telegram 側邊欄小工具、翻譯工具、游標裝飾——全部繞回同一個 IP。單看每一個,這些擴充功能都像是劣質的垃圾軟體。合起來看,它們是一場工業化的收割。

五個偽造發布者Yana ProjectGameGenSideGamesRodeo GamesInterAlt108 個擴充功能 · 20,000 次安裝54 個抓取 Google OAuth · 45 個在啟動時開啟任意網址78 個注入攻擊者 HTML · 每 15 秒竊取一次 Telegram 工作階段C2144.126.135.238Socket 看出了這個模式。Web Store 沒有看出。
108 個擴充功能,五個發布者名字,一台命令與控制伺服器。審查系統把每一個帳戶、每一個擴充功能各自獨立通過了。現行流程裡,沒有任何一層去看這個整體的模式。

五個發布者並不是這個模式的外緣,而是它的表面。幾乎在 Socket 揭露的同時,LayerX Security 公司發布了他們所稱 GhostPoster 行動的更大範圍版本,追蹤了在 Chrome、Firefox 與 Edge 上的一批相關惡意擴充功能,累計下載量達數十萬,起源可追溯到 2020 年。重點不是某個特定團夥終於被抓,重點是:擴充功能商店模型——使用者信任商店,商店在送審時檢查,之後就主要相信發布者身分——已經在規模上,靜靜地,失敗了好幾年。

Bromure 的答案:乾脆不允許擴充功能。

Bromure 是一款以安全為先的瀏覽器。在你的 Mac 上,每一個分頁都跑在一台可隨時丟棄的 Linux 虛擬機(Linux VM——它自己是一台獨立的電腦,視窗關掉就一起抹除)裡。在這台虛擬機裡,我們裝上 Chromium,並套用一份裁剪過的政策。這份政策有兩行,對今天這個故事特別重要:

  • chrome://extensions 被封鎖。
  • chromewebstore.google.com 被封鎖。

這裡沒有「警告使用者之後仍讓他繼續」的流程,沒有「在進階設定裡還是允許」的開關,也沒有什麼釣魚頁面可以引導你打開的開發者模式例外。使用者從 Bromure 工作階段裡根本到不了 Web Store,即使他磁碟上已經有 .crx 檔,擴充功能頁面也不可達,沒辦法用來載入它。GhostPoster 行動所仰賴的那個攻擊面,在這裡壓根不存在。

傳統瀏覽器chromewebstore.google.comFormula Rush由 Rodeo Games 提供安裝Teleside Web由 GameGen 提供安裝Keno Plus由 SideGames 提供安裝Cursor Tails由 Yana Project 提供安裝每個擴充功能點一下就裝。之後對每個分頁都擁有完整的讀寫權。自動更新按時、悄悄進行。Bromurechromewebstore.google.com已封鎖瀏覽器政策"URLBlocklist": ["chrome://extensions","chromewebstore.google.com","chrome.google.com/webstore"]沒有安裝頁面。沒有商店。
同一個商店、同樣 108 個擴充功能、同樣那兩萬會去安裝它們的使用者。在傳統瀏覽器裡,「安裝」是一顆藍色按鈕。在 Bromure 裡,根本沒有商店可以打開。

把話說清楚:這是一個有意識的設計決定,不是疏漏。Bromure 的立場是:任何允許使用者自行安裝擴充功能的瀏覽器,在結構上都對這類行動毫無抵抗力。不是「商店一鬆懈就會脆弱」,而是結構性地脆弱。商店審查是使用者與一個具有全頁權限的程式之間唯一的那道牆,而「商店審查」這件事,剛剛以有名有姓的行動、有名有姓的操作者基礎設施、兩萬次安裝,在工業規模上公開失敗了一次。要求使用者做出比 Google 審查團隊更好的判斷,這不是一種安全模型。

這個立場的強硬版——也就是 Bromure 版——是把這個能力直接拿掉。沒有使用者可自行安裝的擴充功能。沒有進階切換開關。沒有「給進階使用者的、從 .crx 載入的未上架擴充功能」。瀏覽器沒有提供出來的能力,攻擊者也就無從利用。

這樣做的代價是什麼,以及為什麼這個取捨是誠實的。

老實說:這是一個真實的取捨,值得把它說清楚。

沒有 uBlock Origin

Bromure 在虛擬機與網路層自帶一套內容過濾,但如果你本來特別用的是 uBlock Origin,那這裡不會有。你可以去看我們另一篇單獨談 Bromure 如何處理廣告的文章;簡短地說,廣告封鎖從瀏覽器搬了出去,搬到了它底下的基礎設施裡。

沒有 1Password、Bitwarden、LastPass 的擴充功能

你的密碼管理器的瀏覽器擴充功能,在 Bromure 裡裝不上。密碼管理器以 Mac 原生應用程式身分運作得很好,大多數都可以順手地從瀏覽器外面複製貼上、或自動輸入到瀏覽器裡。這是工作流上的改變,而不是工具本身的損失。

沒有 Grammarly、React DevTools、Web3 錢包

「替你的瀏覽體驗加功能的擴充功能」和「握有你數位生活鑰匙的擴充功能」這兩類同時消失。對大多數使用者而言,第一類是小損失;對開發者或加密貨幣使用者而言,則比較大。如果這個損失對你而言不可接受,那 Bromure 不是你的主瀏覽器——這也是個公道的答案。

你換來的是什麼

108 個惡意擴充功能沒辦法落到你的 Mac 上,因為根本沒有管道可以安裝它們。五個偽造發布者也沒辦法欺騙一個不存在的審查流程,因為我們一開始就沒邀請你去信任審查人員。這個故事裡的攻擊面——最核心那個——被關掉了。

有一個細節值得直白地說。Bromure 在虛擬機裡確實載入了少數第一方擴充功能——一個用來與你 Mac 上密碼管理器溝通的憑證橋接擴充、一個用於處理我們之前寫過的 IP 洩漏情況的 WebRTC 封鎖擴充、還有幾個用來做檢測的輔助擴充。它們是瀏覽器本身架構的一部分,烤在磁碟映像檔裡,不是一個執行中的工作階段可以增減或替換的東西。它們不是給使用者擴充功能偷偷開的後門,它們就是「瀏覽器在做瀏覽器該做的事」。把它們叫做「擴充功能」,只是對機制的誠實命名,並不代表偷偷藏了個商店。

真正壞掉的是審查模型本身。

把 108 個擴充功能的故事當作是一則特別關於 Google 的故事來讀,是很誘人的。但它不是。根據 LayerX 更大範圍的追蹤,Mozilla 的附加元件商店和 Microsoft 的 Edge 商店也托管過相關行動許多年——有些甚至最先出現在 Edge 上,後來才擴散到 Chrome。共通點不是某一個具體的審查團隊,而是模型本身:送審、被通過、上架,之後便對已安裝的使用者推送自動更新,而幾乎沒有持續的監督。任何在這套模型下、要在幾百萬台機器上跑的程式,遲早都會招來想要把這條縫工業化的人。

因為這個決定,它是一款較小的瀏覽器。這正是重點。一款對 Web Store 裡每一個擴充功能都仍然說「好」的「以安全為先的瀏覽器」,並不是一款以安全為先的瀏覽器,只是換了個 logo 的普通瀏覽器而已。當商店本身就是威脅時,唯一誠實的答案,就是不從商店裡拿擴充功能。我們認為,你的 Mac 最終會更安全。

如果你想要 Bromure 所做的事,那就裝上它,把它當作你瀏覽中比較有風險那一半的預設瀏覽器——群組聊天裡被點開的連結、你不太確定的搜尋結果、那些總是會打開「某個頁面」的工作信件附件。就算 GhostPoster 的操作者還在外頭,下一批 108 個擴充功能明天就登場,一次 Bromure 工作階段也不會知道這件事。