没改一行原代码,只多加了一句:5000 个开发者的机器差点被人从里面打开
10 月 29 日,Cursor 的插件商城里上架了一个 Claude Code 扩展,版本号 2.1.313。它在货架上待了 11 个小时,约 5000 名开发者把它装进了电脑。装完不用点任何东西,它会自己跑起来,给你的机器配一把 SSH 后门。Cursor 已经确认,下架了包,还把整个扩展市场先关了。
让我后背发凉的不是投毒本身,是它有多省事:攻击者一行原有功能代码都没改,只在 extension.js 开头插了一段加载器,剩下的原样保留,功能照常。
审核流程里那些问题——「这个包是谁发的」「签名对不对」——全都答得上。它确实就是那个包,只是被人掏了一块换掉芯。像一箱封条完好的酒,瓶子是真的,里面灌的是别的。
它偷的东西也讲究。不是密码,是「地图」:主机名、公网 IP、Git 邮箱,还有名字里带 token、key、secret 的环境变量名。光名字就够判断:你挂着哪家的云、连着哪段内网、这台机器值不值得下手。剩下的动作很标准——装 SSH 公钥、开反向隧道、写进计划任务,每分钟重试一次。
这次没出大事,原因很讽刺:攻击者自己写错了。Windows 版本里它去调用 /bin/sh,Windows 上根本没这东西;macOS 那句查权限的命令没以管理员身份跑。所以不少机器可能压根没被打开。
拦住这次事故的不是哪道防线,是一个手滑的路径。这东西叫运气,不叫安全。
Cursor 的处理也说明问题:它没只删那一个包,是把整个扩展市场关了,所有插件翻一遍、轮换密钥。它自己也不确定仓库里还埋着几颗雷。就像一户的门禁卡被复制,物业不去查那户,把整栋楼的门禁停了重做。
往深了说,这是所有 AI 编程工具的新麻烦。以前装个 IDE 插件,你大概知道它能干什么,顶多弹个窗,权限是界面级的。现在 Cursor 这类工具本身就是 Agent:读你的代码库、跑终端命令、连仓库、用你的凭据。给它装的东西,权限层级早不是「插件」了。
可人心里的门槛还停在「装个输入法皮肤」。差的这一截,就是漏洞的全部空间。
对比苹果那套。App Store 审核慢、抽成狠、被骂了十几年,但它至少让「点一下安装」的可预测性高一点。开放生态的代价不是自由,是你每装一次东西都得自己做一次风险评估——而大部分人没这个能力,包括写代码的人。
这次 11 小时、5000 人,靠对方写错一行路径收场。下次没这么巧。