夜雨聆风学习资料网

ARTICLE · 1292784

Claude Code插件被投毒?3分钟自查,别用sed删钥匙

Claude Code插件被投毒?3分钟自查,别用sed删钥匙

一句话:北京时间 10月29日 17:27 至 10月30日 04:35,在 Mac 或 Windows 上通过 Cursor 安装或更新过 Claude Code 扩展的,现在跑一下这条命令:

grep -qs svc-telemetry ~/.ssh/authorized_keys && echo "中招了" || echo "没发现"

显示「没发现」,基本可以放心。显示「中招了」,往下看清理步骤,千万别自己手动删。

01发生了什么

10 月 29 日,Cursor 官方发布安全公告:它自家的扩展市场里出现了被篡改的 Anthropic.claude-code2.1.312 和 2.1.313(Windows、macOS 版),不是 Anthropic 发布的。

恶意扩展会做三件事:

1. 收集主机名、用户名、系统、Git 邮箱、公网 IP,发给攻击者;

2. 往 ~/.ssh/authorized_keys 塞一把攻击者公钥(注释 svc-telemetry),并尝试开反向 SSH 隧道;

3. 用 LaunchAgent(macOS)或计划任务(Windows)做持久化,每 60 秒重连一次。

好消息:攻击者服务器已下线,而且开 SSH 服务要管理员权限,大多数机器上这一步失败了。但公钥和持久化脚本已经落地,官方要求无论如何都要清理。

只影响从 Cursor 扩展市场装的这两个版本。VS Code 官方市场、Claude Code 命令行版不在公告范围内。

02我是怎么测的

手上没有中招的 Mac,我在一台 Linux 机器上真实跑了两组:

1.干净环境:跑自查脚本,看会不会误报;

2.模拟中招:按官方公布的入侵痕迹,在隔离目录里造出一个「中招的用户目录」,再分别用网上常见的删法和官方脚本去清理,对比结果。

模拟只用了官方公布的攻击者公钥(公钥本身无害),没有运行任何恶意代码。

干净环境:5 项全部通过,没有误报

模拟中招:6 处痕迹全部命中

注意第二行:被篡改的扩展,版本号就是正常的 2.1.313。官方脚本里写得很清楚,篡改包保留了真实版本号。所以只看版本号判断不了,要查文件内容里有没有 svc-telemetry。

03最大的坑:别用 sed 一行删

很多人第一反应是这样删:

sed -i "/svc-telemetry/d" ~/.ssh/authorized_keys

实测:整个文件被清空

原因:恶意代码追加公钥时没有先换行,攻击者的钥匙和你原来最后一把挤在了同一行。按行删除,会把你自己的公钥一起删掉。轻则 SSH 登不上服务器,重则远程机器直接失联。

04正确清理:用官方脚本

macOS:下载 remediate-macos.sh,用当前用户运行,不要加 sudo:

bash remediate-macos.sh

Windows:下载 remediate-windows.ps1,以管理员身份打开 PowerShell 运行:

powershell -ExecutionPolicy Bypass -File .\remediate-windows.ps1

脚本下载地址在 Cursor 官方公告里(文末「阅读原文」)。我在模拟环境里跑了 macOS 版:

官方脚本只删攻击者那一段,自己的公钥完整保留

清理后复查:全部通过

Windows 自查命令(PowerShell):

$files = "$HOME\.ssh\authorized_keys", "C:\ProgramData\ssh\administrators_authorized_keys" | Where-Object { Test-Path $_ }

if ($files -and (Select-String svc-telemetry $files)) { "中招了" } else { "没发现" }

05清理完还要做三件事

1.换凭据:在另一台干净电脑上,更换这台机器能访问的 Git 令牌、云服务密钥、SSH 私钥;

2.查持久化:Windows 看计划任务有没有 SysMon、启动文件夹有没有 sysmon.cmd;macOS 看 com.apple.sysmond.plist,这名字故意伪装成苹果系统服务;

3.只卸载扩展不够:持久化脚本独立运行,卸载扩展后还会继续跑。

附完整自查脚本(只读,不删东西)

适用于 macOS / Linux,保存为 check.sh,运行 bash check.sh:

#!/usr/bin/env bash

shopt -s nullglob

MARK=svc-telemetry; hit=0

say(){ printf '%s:%s\n' "$1" "$2"; }

if grep -qs "$MARK" ~/.ssh/authorized_keys; then say "[!] authorized_keys" "发现 svc-telemetry 公钥"; hit=1; else say "[ok] authorized_keys" "未发现"; fi

ext=0; for js in ~/.[!.]*/extensions/anthropic.claude-code-*/extension.js; do

ifgrep -qF "$MARK" "$js"; then say "[!] 扩展被篡改" "${js%/*}"; hit=1; ext=1; fi; done

[ $ext = 0 ] && say "[ok] 扩展 extension.js" "未发现标记"

f=0; for p in ~/.config/.smt ~/.config/.smtk ~/Library/LaunchAgents/com.apple.sysmond.plist /tmp/.stk_* "${TMPDIR:-/tmp}"/.stk_*; do

[-e "$p" ] && { say "[!] 可疑文件" "$p"; hit=1; f=1; }; done

[ $f = 0 ] && say "[ok] 落地文件" "未发现"

if crontab -l 2>/dev/null | grep -q '\.config/\.smt'; then say "[!] crontab" "发现 @reboot .smt"; hit=1; else say "[ok] crontab" "未发现"; fi

if pgrep -fl '/\.stk_[0-9a-f]{10}|/\.config/\.smtk|autossh -M 0' >/dev/null 2>&1; then say "[!] 进程" "发现隧道进程"; hit=1; else say "[ok] 隧道进程" "未发现"; fi

echo; [ $hit = 1 ] && echo "结论:中招,请按官方脚本清理并更换凭据" || echo "结论:未发现后门痕迹"

如果只有「进程」一项报警,先关掉终端重开再跑。我测试时遇到过误报:某个终端会话的命令行里刚好带着 .config/.smtk 这串路径,被 pgrep -f 匹配到了。

参考:Cursor 官方安全公告《Security notice — malicious version of Anthropic.claude-code (2.1.312 and 2.1.313)》,2026-10-29 发布,10-30 更新。

觉得有用,转给身边用 Cursor 的朋友查一下。关注「凌冬已至丶」,只写自己跑过的 AI 工具实测和避坑。

回首页,搜索你想要的文档

在首页搜索框输入关键词,快速定位资料

文库首页搜索指引 立即搜索

相关学习资料