{"schema_version":"1.0","service":"Publicasta","type":"article","id":1069,"slug":"cursor_claude_code_extension_supply_chain_response","title":"Cursor Claude Code 扩展事件揭示 AI 开发者工具为何需要软件包验证","excerpt":"被篡改的 Claude Code 扩展进入 Cursor 后，向用户收集主机信息，并试图建立持久化 SSH 访问。该事件为扩展信任、遏制措施、凭据轮换及更安全的 AI 编程工作流提供了现实教训。","language":"zh","default_language":"en","canonical_url":"https://publicasta.com/ai_practice/cursor_claude_code_extension_supply_chain_response?lang=zh","image":{"url":"https://publicasta.com/storage/projects/8/pages/1069/2026/11/31a317c3-32d2-40e6-a55b-17e34ce833e8.webp","alt":"昏暗的编辑风格科技场景中，开发者工作站显示代码、软件包验证和安全遥测信息。"},"publisher":{"id":8,"slug":"ai_practice","name":"AI Practice","url":"https://publicasta.com/ai_practice"},"author":{"name":"Anton R"},"published_at":"2026-11-01T10:11:11+00:00","updated_at":"2026-11-01T10:11:11+00:00","content_markdown":"编码助手扩展属于权限异常高的软件。它可以检查代码仓库、启动工具、读取配置，有时还会接触远超当前编辑器项目价值的凭据。因此，遭到入侵的扩展不只是一次糟糕的更新，还可能成为进入开发者工作站的供应链通道。\n\n ![昏暗的编辑风格科技场景中，开发者工作站显示代码、软件包验证和安全遥测信息。](https://publicasta.com/storage/projects/8/pages/1069/2026/11/31a317c3-32d2-40e6-a55b-17e34ce833e8.webp)\n\n 10 月 29 日，这种风险变成了现实：Anthropic 的 Claude Code 扩展的一个被修改副本出现在 Cursor 的 VS Code 扩展市场中。Cursor 表示，适用于 macOS 和 Windows 的 2.1.312 与 2.1.313 版本约有 11 个小时处于可用状态。该公司估计，最多可能有 5,000 名用户收到这个软件包。Cursor 随后移除了这些版本，在调查期间让市场下线，轮换密钥，并重建了市场。\n\n 即使从未使用 Claude Code 的团队，也应重视这起事件。它暴露出一个常见假设的弱点：扩展只要使用熟悉的发布者名称、看起来像正常更新，并提供实用的 AI 功能，就因为来自编辑器市场而被认为是安全的。市场能够改善分发，却无法替代对所分发内容及其能力的验证，也无法替代在软件包失去可信度时采取适当处置。\n\n ## Cursor 市场发生了什么\n\n Cursor 的[安全公告](https://prod.cursor.com/blog/claude-code-extension-security-notice)称，受影响的软件包是 `Anthropic.claude-code` 的恶意修改版本，并非由 Anthropic 开发的构建版本。该软件包于 2026 年 10 月 29 日太平洋时间约凌晨 2:27 至下午 1:35 之间出现在 Cursor 市场。Cursor 后来澄清，Windows 和 macOS 市场分发中的 2.1.312 与 2.1.313 两个版本都在影响范围内。\n\n 这个扩展仍然将自己呈现为 Claude Code 集成，但新增代码尝试执行多项与普通编辑器集成毫无关系的操作。Cursor 报告称，代码收集了主机名、用户名、操作系统、系统架构、主目录路径、环境变量名称、工作目录、已配置的 Git 邮箱及公网 IP 地址，还试图将主机信息发送到攻击者控制的服务器。\n\n 该软件包试图把攻击者控制的公钥加入 SSH `authorized_keys` 文件，启用本地 SSH 服务，并打开反向 SSH 隧道。随后，它试图通过 macOS LaunchAgent，或 Windows 计划任务与启动脚本机制，让隧道保持持久运行。后台脚本被设计为定期重试连接。\n\n Cursor 表示，在云服务商的协助下，攻击者的服务器已经下线。Cursor 还称，恶意代码中存在一些错误，通常会导致 SSH 服务无法在没有管理员权限的情况下启用。这降低了许多机器成功遭受远程登录的可能性，但并不意味着事件没有危害。该扩展仍可能执行代码、收集主机信息、添加持久化机制，并使机器进入需要调查的状态。\n\n [微软安全分析](https://www.microsoft.com/en-us/security/blog/2026/10/30/inside-malicious-claude-code-branded-cursor-extension-persistent-ssh-backdoor/)将这个软件包描述为通过 Cursor 扩展生态系统投递的供应链攻击。其最重要的运营层面结论很简单：扩展可以在按预期工作的同时，在后台执行恶意操作。可见功能运行正常，并不能证明软件包是干净的。\n\n ## 熟悉的发布者名称为何不够\n\n 软件包身份为社会工程攻击创造了优势。开发者在编辑器市场中搜索 Claude Code 时，会预期找到与 Anthropic 相关的软件包。一个使用正确名称、并在例行更新中出现的软件包，可能在任何人检查其内容之前就获得信任。\n\n 对于 AI 编程工具而言，这种信任尤其危险，因为这些工具本来就靠近敏感活动。AI 扩展可能被允许读取源代码、检查项目文件、启动终端进程、访问本地开发服务，并查看运行测试或部署软件所需的配置。即使助手在执行命令前会征求许可，扩展宿主本身仍然属于可信计算基的一部分。\n\n Cursor 自己的[安全文档](https://www.cursor.com/security)提供了相关背景。文档称，默认情况下，Cursor 不会验证从其市场下载的扩展签名，而且工作区信任机制并不能防御恶意扩展。工作区信任可以帮助限制高风险项目文件夹，但不会把不受信任的扩展变成可信软件。\n\n 这一点在日常工作中很容易被忽略。开发者通常会从项目权限的角度思考：AI 助手是否可以编辑代码仓库，或运行测试。扩展市场带来了另一个问题：负责实现该助手的代码，在获得访问编辑器进程和主机环境的权限之前，是否经过了身份验证和审查。\n\n 这两个问题需要分别设置控制措施。项目可以可信，扩展却不可信。发布者可以合法，但某一条分发路径可能已遭入侵。同一个软件包在一家商店中可能真实无误，在另一家商店中却被篡改。这起事件提醒人们，“官方”并不是一个单一属性；它取决于发布者、构建版本、注册表、传输路径，以及软件包被接收的时间点。\n\n ## 受影响用户应采取的措施\n\n 任何人在受影响时间段内从 Cursor 市场安装或更新过 `Anthropic.claude-code` 的，都应将这台设备视为需要验证的主机。Cursor 的通知是最权威的起点，因为其中包含受影响版本、时间范围、指标以及修复建议。\n\n 第一步是保留足够证据，以便开展调查。如果这台机器用于生产环境访问、源代码托管、云管理、签名或发布管理，那么在安全团队检查终端和网络遥测数据期间，将其与敏感网络断开可能是恰当做法。如果组织需要判断究竟执行了什么、哪些数据可能已暴露，不要一开始就删除所有可疑文件。\n\n 确认受影响的扩展版本是否在相关时间段内从 Cursor 市场安装。通过其他官方分发渠道安装的干净版本属于不同情况；Cursor 表示，没有证据表明其他扩展版本或 Anthropic 的官方分发渠道受到本次事件影响。但这项声明不应被扩展解读为对未来每次更新或所有市场的普遍保证。\n\n Cursor 指出的具体指标，是 `authorized_keys` 文件中出现了一个名为 `svc-telemetry` 的未授权 SSH 密钥。团队还应在终端遥测数据中查找通知所述的持久化机制和隧道进程，包括 macOS 上异常的 LaunchAgents、Windows 上的计划任务或启动脚本，以及连接到事件指标中记录的攻击者基础设施的出站连接。\n\n 如果载荷已经运行，仅卸载扩展并不够。该软件包试图写入独立的持久化机制，即使编辑器扩展被移除，这些机制仍可能继续运行。受影响主机应被隔离，未授权密钥和持久化项应被清除，并评估是否需要重建系统。如果主机中存有凭据或活跃会话，应在遏制完成后，通过另一台可信设备进行轮换。这包括源代码管理令牌、云凭据、软件包注册表令牌、SSH 密钥、签名材料，以及可能授予公司系统访问权限的浏览器或编辑器会话。\n\n 凭据轮换应依据暴露可能性，而不是依据恶意代码是否明显打印过某个秘密。Cursor 报告称，该软件包收集的是环境变量名称，并未描述广泛的凭据窃取；但持久化后门会让人无法确定代码执行后究竟能够访问什么。实际问题不是“载荷声称窃取了这个令牌吗？”而是“受入侵的主机能否访问或使用这个令牌？”\n\n 个人在工作设备上尝试自行清理之前，应先通知雇主或安全团队。没有终端安全工具的小团队仍然可以建立有用的记录：编辑器和扩展版本、安装时间、操作系统、当前 SSH 密钥、近期网络连接、持久化位置，以及用户账户可用的凭据。这份记录有助于判断重建系统是否合理，也能避免清理操作抹去唯一的证据。\n\n ## 这起事件涉及的是分发，而不只是恶意软件\n\n 把这起事件简单归结为“不要在 Cursor 中安装扩展”是错误的。开发者需要扩展，而同类风险也存在于 VS Code、JetBrains 产品、浏览器插件、软件包仓库、容器镜像、CI 操作以及 AI 代理插件中。移除一个有用的集成，并不能解决底层的分发问题。\n\n 更有价值的教训，是让分发过程可观察、可逆。组织应当知道哪些扩展经过批准、安装了哪些版本、它们来自哪里，以及如何集中禁用。安全通知到来后，不应要求开发者再从工作站上逐项还原这些信息。\n\n 对于受管理的团队，一个合理的基线包括：为编辑器扩展设置允许列表；为关键工具固定版本；建立更新审查流程；并准备经过测试的软件包撤销或回滚方式。自动更新很方便，但也会压缩审查所剩的时间。具体策略可以按角色区分：设计师的隔离原型环境，与拥有云端访问权限和签名权限的发布工程师工作站，暴露面并不相同。\n\n 应当在真正需要判断的环节检查软件包来源。如果某个扩展可以从多个商店获得，就比较发布者身份、版本历史、发布说明、（如有提供的）软件包哈希，以及供应商文档中的官方链接。某个版本只出现在一个市场，并不自动意味着它是恶意的，但这足以成为暂停安装、展开调查的理由。\n\n 组织还应将开发便利性与生产权限分开。AI 编码工具可以在这样的工作站上发挥作用：凭据有效期短、网络访问受限，而且没有生产签名密钥。若同一扩展运行在能够发布软件包、管理基础设施或批准部署的机器上，就应接受高得多的审查标准。\n\n ## AI 编码工具如何改变信任边界\n\n 这次攻击不需要攻破 Claude 的模型，也不需要诱使 AI 助手编写危险代码。它针对的是模型周围的软件。这改变了团队评估 AI 产品的方式。\n\n 关于 AI 的讨论往往集中于提示注入、模型幻觉、数据保留，以及生成代码是否正确。这些当然仍是有效的关注点，但 AI 编码助手同样面临普通的软件供应链风险。它的编辑器扩展、命令行客户端、语言服务器、插件、MCP 连接器、更新服务和凭据助手，都可能成为攻击面。模型也许是最显眼的组件，但实际访问权限往往掌握在扩展宿主手中。\n\n 因此，控制方案应同时覆盖行为问题和软件完整性问题：\n\n - 工具无需提示即可读取哪些文件？\n- 扩展可以启动哪些进程？\n- 它是否继承编辑器的环境变量和网络访问权限？\n- 机器在日常工作中保存着哪些凭据？\n- 工具能否安装插件或调用外部连接器？\n- 扩展版本是否已固定、记录，并且可以移除？\n- 受入侵的开发者主机能否访问生产系统？\n- 凭据和会话最迟多久可以撤销？\n\n 这些问题比抽象地追问某个产品是否“安全”更有用。安全性取决于软件包完整性、主机权限、网络可达性、凭据范围，以及团队发现并从恶意更新中恢复的能力如何组合在一起。\n\n ## 更安全的 AI 辅助开发工作流\n\n 实际的应对方式并不是放弃 AI 编码工具，而是把它们置于这样的环境中：即使工具遭到入侵，也能窃取更少的信息，并且更难向其他系统移动。\n\n 首先，为高信任级别的 AI 工具准备专用开发配置或专用机器。尽可能不要把生产凭据放在工作站上，使用短期令牌，并避免将长期有效的云密钥加载到编辑器环境中。如果工具确实需要访问云服务，就授予完成任务所需的最小角色，并将读取、写入、部署和管理权限分开。\n\n 对于不熟悉的扩展和代理集成，应使用一次性或可重建的环境。容器或虚拟机如果共享主机凭据、套接字、文件系统挂载或浏览器会话，就不能算完整的安全边界；但经过谨慎配置后，它仍能缩小影响范围。除非任务确实需要，不要把 SSH 目录、云凭据目录、包管理器令牌或部署套接字挂载到测试环境中。\n\n 将代码审查和部署权限置于代理的自动执行路径之外。AI 工具可以提出修改、运行测试或准备分支，但发布这些修改仍应要求独立审查，并使用单独控制的凭据。这既能防范恶意工具，也能降低代理操作错误仓库或误解请求所造成的风险。\n\n 应把扩展当作软件依赖来管理。记录其版本，审查有实质内容的更新，并优先使用会发布安全公告和版本历史的官方发布渠道。如果编辑器提供签名验证功能，在操作上可行的情况下启用它，并弄清楚它验证的具体内容。签名可以证明某个软件包由谁签署，但不能证明其中的代码合适、没有漏洞，或对每台工作站都安全。它只是控制链中的一环，不能替代整条链路。\n\n 最后，要在事件发生前演练响应流程。团队应明确谁负责扩展策略，谁可以禁用市场集成，终端日志存放在哪里，如何识别活跃的 SSH 密钥，以及如何从一台干净设备轮换凭据。供应链警报发出后的第一个小时，不适合用来发现唯一的管理员账户恰好绑定在正在调查的机器上。\n\n ## Cursor 和供应商需要说清楚什么\n\n Cursor 的响应包含了团队所需的关键信息：受影响的版本、分发时间窗口、尝试执行的操作、仅卸载可能并不足够这一事实，以及轮换凭据的必要性。编辑器市场和 AI 工具供应商都应把这种具体程度作为标准。\n\n 市场运营方还可以在安装前让信任模型更加透明。用户应能看到软件包是否经过签名验证、上传时间、提交该软件包的发布者账户、软件包是否被重新构建，以及市场是否进行过独立的恶意软件分析。这些信号无法阻止所有入侵，但能帮助用户区分经过验证的制品与仅仅因为名称熟悉而被信任的软件包。\n\n 这起事件也提出了自动更新的问题。对于快速迭代的 AI 产品，静默更新很有吸引力；但关键开发工具可能更需要分阶段推送、回滚支持，以及允许组织在验证更新期间暂缓安装的策略控制。如果一个软件包能以编辑器权限运行任意代码，那么它的更新流程就应获得与操作系统或浏览器更新同等程度的谨慎对待。\n\n 对于 Anthropic、Cursor 以及其他 AI 工具供应商而言，真正有长期价值的衡量标准，不只是移除受入侵软件包的速度，还在于客户能否用证据回答：自己收到的是哪个制品、它是否执行过、接触过哪些内容，以及如何让主机恢复到已知的良好状态。企业买家在评估具备代理能力的开发工具时，应要求达到这一标准。\n\n ## 实际结论\n\n Cursor 事件并没有证明 AI 编程助手具有独特的恶意性。它证明的是：这类工具的价值已经足以让它们继承所有高权限开发工具的风险，而组织采用它们的速度往往又快于软件供应链控制措施的更新速度。\n\n 因此，团队应同时把 AI 编程扩展视为助手和软件依赖。验证其分发路径，限制它所处的主机环境，保持凭据范围狭窄且有效期短，记录已安装的内容，并维护一套不依赖受影响机器的恢复方案。这些措施会在一些小地方降低 AI 辅助开发的便利性，但也能把一次市场事件从生死攸关的混乱抢险，转化为范围受控的运营事件。","available_translations":[{"language":"ar","title":"حادثة إضافة Claude Code في Cursor تبيّن سبب حاجة أدوات تطوير الذكاء الاصطناعي إلى التحقق من الحزم","html_url":"https://publicasta.com/ai_practice/cursor_claude_code_extension_supply_chain_response?lang=ar","markdown_url":"https://publicasta.com/ai_practice/cursor_claude_code_extension_supply_chain_response.md?lang=ar","json_url":"https://publicasta.com/ai_practice/cursor_claude_code_extension_supply_chain_response.json?lang=ar","api_url":"https://publicasta.com/api/public/v1/channels/ai_practice/articles/cursor_claude_code_extension_supply_chain_response?lang=ar"},{"language":"de","title":"Der Vorfall um die Claude-Code-Erweiterung für Cursor zeigt, warum KI-Entwicklertools eine Paketprüfung brauchen","html_url":"https://publicasta.com/ai_practice/cursor_claude_code_extension_supply_chain_response?lang=de","markdown_url":"https://publicasta.com/ai_practice/cursor_claude_code_extension_supply_chain_response.md?lang=de","json_url":"https://publicasta.com/ai_practice/cursor_claude_code_extension_supply_chain_response.json?lang=de","api_url":"https://publicasta.com/api/public/v1/channels/ai_practice/articles/cursor_claude_code_extension_supply_chain_response?lang=de"},{"language":"en","title":"The Cursor Claude Code Extension Incident Shows Why AI Developer Tools Need Package Verification","html_url":"https://publicasta.com/ai_practice/cursor_claude_code_extension_supply_chain_response?lang=en","markdown_url":"https://publicasta.com/ai_practice/cursor_claude_code_extension_supply_chain_response.md?lang=en","json_url":"https://publicasta.com/ai_practice/cursor_claude_code_extension_supply_chain_response.json?lang=en","api_url":"https://publicasta.com/api/public/v1/channels/ai_practice/articles/cursor_claude_code_extension_supply_chain_response?lang=en"},{"language":"es","title":"El incidente de la extensión Claude Code de Cursor muestra por qué las herramientas de desarrollo con IA necesitan verificación de paquetes","html_url":"https://publicasta.com/ai_practice/cursor_claude_code_extension_supply_chain_response?lang=es","markdown_url":"https://publicasta.com/ai_practice/cursor_claude_code_extension_supply_chain_response.md?lang=es","json_url":"https://publicasta.com/ai_practice/cursor_claude_code_extension_supply_chain_response.json?lang=es","api_url":"https://publicasta.com/api/public/v1/channels/ai_practice/articles/cursor_claude_code_extension_supply_chain_response?lang=es"},{"language":"fr","title":"L’incident de l’extension Claude Code de Cursor montre pourquoi les outils de développement IA doivent vérifier leurs paquets","html_url":"https://publicasta.com/ai_practice/cursor_claude_code_extension_supply_chain_response?lang=fr","markdown_url":"https://publicasta.com/ai_practice/cursor_claude_code_extension_supply_chain_response.md?lang=fr","json_url":"https://publicasta.com/ai_practice/cursor_claude_code_extension_supply_chain_response.json?lang=fr","api_url":"https://publicasta.com/api/public/v1/channels/ai_practice/articles/cursor_claude_code_extension_supply_chain_response?lang=fr"},{"language":"pl","title":"Incydent z rozszerzeniem Claude Code w Cursorze pokazuje, dlaczego narzędzia AI dla programistów wymagają weryfikacji pakietów","html_url":"https://publicasta.com/ai_practice/cursor_claude_code_extension_supply_chain_response?lang=pl","markdown_url":"https://publicasta.com/ai_practice/cursor_claude_code_extension_supply_chain_response.md?lang=pl","json_url":"https://publicasta.com/ai_practice/cursor_claude_code_extension_supply_chain_response.json?lang=pl","api_url":"https://publicasta.com/api/public/v1/channels/ai_practice/articles/cursor_claude_code_extension_supply_chain_response?lang=pl"},{"language":"ru","title":"Инцидент с расширением Claude Code для Cursor показывает, зачем AI-инструментам разработки нужна проверка пакетов","html_url":"https://publicasta.com/ai_practice/cursor_claude_code_extension_supply_chain_response?lang=ru","markdown_url":"https://publicasta.com/ai_practice/cursor_claude_code_extension_supply_chain_response.md?lang=ru","json_url":"https://publicasta.com/ai_practice/cursor_claude_code_extension_supply_chain_response.json?lang=ru","api_url":"https://publicasta.com/api/public/v1/channels/ai_practice/articles/cursor_claude_code_extension_supply_chain_response?lang=ru"},{"language":"zh","title":"Cursor Claude Code 扩展事件揭示 AI 开发者工具为何需要软件包验证","html_url":"https://publicasta.com/ai_practice/cursor_claude_code_extension_supply_chain_response?lang=zh","markdown_url":"https://publicasta.com/ai_practice/cursor_claude_code_extension_supply_chain_response.md?lang=zh","json_url":"https://publicasta.com/ai_practice/cursor_claude_code_extension_supply_chain_response.json?lang=zh","api_url":"https://publicasta.com/api/public/v1/channels/ai_practice/articles/cursor_claude_code_extension_supply_chain_response?lang=zh"}],"_links":{"self":"https://publicasta.com/ai_practice/cursor_claude_code_extension_supply_chain_response.json?lang=zh","api":"https://publicasta.com/api/public/v1/channels/ai_practice/articles/cursor_claude_code_extension_supply_chain_response?lang=zh","html":"https://publicasta.com/ai_practice/cursor_claude_code_extension_supply_chain_response?lang=zh","canonical":"https://publicasta.com/ai_practice/cursor_claude_code_extension_supply_chain_response?lang=zh","markdown":"https://publicasta.com/ai_practice/cursor_claude_code_extension_supply_chain_response.md?lang=zh","json":"https://publicasta.com/ai_practice/cursor_claude_code_extension_supply_chain_response.json?lang=zh","channel":"https://publicasta.com/api/public/v1/channels/ai_practice","channel_articles":"https://publicasta.com/api/public/v1/channels/ai_practice/articles","search":"https://publicasta.com/api/public/v1/search","documentation":"https://publicasta.com/api-docs#reading-publicasta","openapi":"https://publicasta.com/api-docs/openapi.json","llms":"https://publicasta.com/llms.txt"}}