当商店本身就是威胁——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 拉下来的命令打开任意 URL。这是点击欺诈、路过式下载,或悄悄把你导向漏洞利用页的一种基础能力。
- 还有一些扩展把攻击者控制的 HTML 注入到真实网站里,剥掉 HTTP 安全头以便注入的内容真的能运行,每 15 秒劫持一次 Telegram Web 会话,把翻译请求经由攻击者代理转发,或者在 YouTube 和 TikTok 页面上罩一层赌博覆盖层。
代码在身份认证和会话盗取的路径上带有俄语注释。研究员指出,操作者的身份未知;基础设施托管在 Contabo 的一台 VPS 上,子域按功能分工(身份收集、命令执行、变现、会话劫持)。
在这件事爆出来的时候,108 个扩展中没有一个被从 Web Store 撤下。
扩展到底是什么,以及为什么这不只是又一篇恶意软件报道。
大多数人装浏览器扩展就跟装字体一样:找到一个看起来有用的,点一下蓝色按钮,然后忘掉。偶尔弹出的那个「权限」对话框,是早期更清晰时代遗留下来的东西。在 Chrome 现在的扩展模型里,相当大比例的真实扩展都会要下面差不多这些东西,而用户并没有任何有意义的办法只拒绝其中一部分:
扩展位于同源策略(same-origin policy)之上,而同源策略正是让各个标签页彼此隔离的那道墙。这就是它们的全部意义所在:广告拦截插件如果不能读到每个网站上的广告,就没法干活;密码管理器如果不能盯着每一个登录表单,也没法干活。浏览器很合理地,不在运行时区分「广告拦截器读取页面是为了隐藏一条横幅广告」和「恶意扩展读取页面是为了偷你的会话令牌」。它们是同一个能力,只是被以不同理由授出。
所以 Socket 披露的这 108 个扩展做的,并不是什么对 Chrome 安全机制的巧妙绕过。它们只是扩展平台那种正常、被写进文档的行为,被指向了操作者的服务器,而不是用户的利益。
五个伪造发布者,一台服务器,两万次安装。
这场活动的形状才是重点。一个行为者、一小撮傀儡发布者账号、一份看上去品类挺多的目录——老虎机和 Keno 游戏、YouTube 和 TikTok 的「增强插件」、Telegram 边栏小工具、翻译工具、光标装饰——全部绕回同一个 IP。单看每一个,这些扩展都像低质垃圾软件。合起来看,它们是一场工业化的收割。
五个发布者并不是这个模式的外缘,而是它的表面。和 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 活动赖以生存的那个攻击面,在这里压根不存在。
说清楚一点,这是一个有意识的设计选择,不是疏漏。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 会话也不会知道。