你的浏览器里有什么,LinkedIn 比你更清楚

今天 HN 上有两件值得写的事。

第一件事,LinkedIn 正在扫描你安装了哪些浏览器扩展。

404privacy 的作者在 Chrome 里打开 LinkedIn,打开开发者工具的 console 标签页,结果看到了一堆红色错误。每一个错误,都是 LinkedIn 在问你的浏览器:你有没有安装这个扩展?

它不是只问了一两个。它问了 6,278 个。

从 2017 年的 38 个扩展,到 2026 年 4 月的 6,278 个。这个列表不是人工维护的,有人写了工具去爬 Chrome 应用商店,解析每个扩展的 manifest,找到 web_accessible_resources 里的文件路径,然后逐一探测。

技术实现很直接。LinkedIn 的 JavaScript 代码对每一个扩展 ID 发起 fetch 请求。扩展装了你就会收到一个静默成功的响应,没装 Chrome 就会报一个错误。两种结果都被 LinkedIn 记录下来了。

扫描跑了大约 15 分钟。探测结果用 RSA 公钥加密,发送到 LinkedIn 的 li/track 端点,然后注入为 HTTP header,在你整个访问期间随每个 API 请求一起传送。

嗯,这不是那种"追踪你看了哪些网页"的普通指纹采集。这更严重。

LinkedIn 知道你的名字、公司、职位、薪资范围、社交网络。当它扫描你的扩展时,它不是在为一个匿名访客建立设备画像——它是在把你的浏览器里装了什么软件,直接附加到你的真实身份上。

那些求职扩展,告诉 LinkedIn 你在悄悄找工作。那些政治内容、宗教实践、残疾辅助、神经多样性相关的扩展,告诉 LinkedIn 你关心什么。而因为 LinkedIn 知道你为哪家公司工作,一个员工的扫描结果能拼出整个公司的内部工具、安全产品和工作流程。

这没有写在 LinkedIn 的任何隐私政策里。没有用户被征求过同意。没有用户被告知过这件事。

第二件事,PyTorch Lightning 被植入了恶意代码。

lightning 包的 2.6.2 和 2.6.3 版本,4 月 30 号发布在 PyPI 上。只要运行 pip install lightning,导入模块时就会自动执行恶意载荷。

这个攻击者的代号很有趣——Shai-Hulud,是《沙丘》里的沙虫。这次叫"Mini Shai-Hulud"。恶意提交的信息遵循沙丘主题命名,创建了一个叫 EveryBoiWeBuildIsaWormBoi 的公开仓库。

攻击者的手法很系统化。四个并行渠道外传数据:HTTPS POST 到 C2 服务器、通过 GitHub commit search API 投递双 base64 编码的 token、在攻击者控制的公开 GitHub 仓库提交被盗凭证、直接把数据推送到受害者自己的仓库里。

偷的东西很全面:本地文件系统的 80 多种凭证文件、环境中的所有变量、GitHub Actions 运行器的内存中的 secret、AWS/Azure/GCP 三个云平台的密钥。任何导入了这个恶意包的机器,都应该被当作完全失陷。

更让人不安的是持久化手段。这个恶意软件往受害者的仓库里注入了 Claude Code 和 VS Code 的 hook。.claude/settings.json 里的 SessionStart hook,.vscode/tasks.json 里的 runOn 任务。每次开发者在受感染的仓库里打开 Claude Code 或 VS Code,payload 就会重新执行。

这已经是我们看到的第一次在真实攻击中滥用 Claude Code hook 系统的案例。

两件事放在一起看。

LinkedIn 在扫描你的浏览器扩展,PyTorch Lightning 在扫描你的机器。一个是你主动登录的平台,一个是你主动安装的依赖。它们都在以你看不见的方式,收集你的信息。区别只是动机——一个是为了商业画像,一个是为了窃取凭证。

但本质上,问题是一样的:你信任的东西,正在收集你不信任的东西。

从工程角度,能做的防护也很有限。浏览器扩展扫描,你甚至可以在 console 里看到它,但大多数开发者不会打开开发者工具去检查自己访问的每个网站在做什么。供应链攻击更难防——你在 CI 里装了最新版本的依赖,根本不知道它被污染了。

所以今天真正值得记住的是:在 AI 时代,"隐私"和"安全"越来越不是一个配置选项,而是一种持续的、主动的行为。你要知道你的浏览器里装了什么、你的依赖树里有什么、你的 CI 里跑了什么。而这些事情,大多数人不知道,也没有精力去追踪。

当你打开 LinkedIn 的时候,它正在扫描你的 6,278 个可能扩展。当你运行 pip install 的时候,它可能正在执行 14.8 MB 的恶意 JavaScript。

这不是两个孤立的事件。这是同一个世界的两个侧面。