新漏洞:如何利用 GitHub Copilot 和 Cursor 中的漏洞武器化代码智能体
研究
新漏洞:如何利用 GitHub Copilot 和 Cursor 中的漏洞武器化代码智能体
Ziv Karliner
2025年3月18日
概要
Pillar Security 的研究人员发现了一种名为 "Rules File Backdoor" 的新型危险供应链攻击向量。这种技术使黑客能够通过在看似无害的配置文件中注入隐藏的恶意指令,从而静默地破坏 AI 生成的代码,这些配置文件被世界上领先的 AI 驱动的代码编辑器 Cursor 和 GitHub Copilot 使用。
通过利用模型中面对指令的 payload 中的隐藏 Unicode 字符和复杂的逃避技术,威胁行为者可以操纵 AI 以插入绕过典型代码审查的恶意代码。这种攻击对开发人员和安全团队来说几乎是隐形的,允许恶意代码通过项目静默传播。
与针对特定漏洞的传统代码注入攻击不同,"Rules File Backdoor " 通过将 AI 本身武器化为攻击向量,有效地将开发人员最信任的助手变成不知情的同谋,从而代表着重大的风险,可能通过受损的软件影响数百万最终用户。
AI 代码助手作为关键基础设施
2024 年 GitHub 的一项调查发现,几乎所有企业开发人员 (97%) 都在使用生成式 AI 代码工具。这些工具已经迅速从实验性的新奇事物发展成为关键任务的开发基础设施,全球团队每天都依赖它们来加速编码任务。
这种广泛采用创造了一个巨大的攻击面。随着这些 AI 助手成为开发工作流程不可或缺的一部分,它们代表了老练的威胁行为者的一个有吸引力的目标,这些行为者希望大规模地将漏洞注入到软件供应链中。
规则文件作为新的攻击向量
在调查开发团队如何共享 AI 配置时,我们的安全研究人员发现了一个关键漏洞,即 AI 代码助手如何处理规则文件中包含的上下文信息。
什么是规则文件?
规则文件是配置型文件,用于指导 AI Agent 在生成或修改代码时的行为。它们定义了编码标准、项目架构和最佳实践。这些文件具有以下特点:
- 广泛共享:存储在具有团队范围或全局访问权限的中央存储库中
- 广泛采用:通过开源社区和公共存储库分发
- 隐式信任:被认为是无害的配置数据,可以绕过安全审查
- 很少验证:集成到项目中而没有进行充分的安全审查
以下是 Cursor 文档中的规则文件示例:
来源:https://docs.cursor.com/context/rules-for-ai
除了亲自创建文件外,开发人员还可以在开源社区和项目中找到它们,例如:
来源:https://cursor.directory/rules
来源:https://github.com/pontusab/directories
在研究过程中发现,对于这些共享存储库,上传新规则的审查过程也很容易受到攻击,因为隐藏的 Unicode 字符在 GitHub 平台的 pull request 审批过程中也显示为不可见。
攻击机制
我们的研究表明,攻击者可以通过在看似良性的规则文件中嵌入精心设计的提示来利用 AI 的上下文理解能力。当开发人员启动代码生成时,被污染的规则会巧妙地影响 AI 生成包含安全漏洞或后门的代码。
该攻击利用了几种技术机制:
- 上下文操纵:嵌入看起来是合法的指令,但指示 AI 修改代码生成行为
- Unicode 混淆:使用零宽度连接符、双向文本标记和其他不可见字符来隐藏恶意指令
- 语义劫持:利用 AI 的自然语言理解能力,使用细微的语言模式将代码生成重定向到易受攻击的实现方式
- 跨 Agent 漏洞:该攻击适用于不同的 AI 代码助手,表明存在系统性漏洞
“Rules Files Backdoor” 特别危险的原因在于其持久性。一旦被污染的规则文件被纳入项目存储库,它将影响团队成员所有未来的代码生成会话。此外,恶意指令通常会在项目分叉后仍然存在,从而创建了一个供应链攻击的向量,该向量会影响下游依赖项和最终用户。
真实演示:破坏 Cursor 中 AI 生成的代码
Cursor 的 "Rules for AI" 功能允许开发人员创建项目特定的指令来指导代码生成。这些规则通常存储在项目中的 .cursor/rules
目录中。
以下是攻击的工作原理:
步骤 1:创建恶意规则文件
我们创建了一个对人工审查者来说似乎是无害的规则文件:
但是,实际内容包括隐藏恶意指令的不可见 Unicode 字符:
Pillar Security 规则扫描器:https://rule-scan.pillar.security/
步骤 2:生成 HTML 文件
我们使用了 Cursor 的 AI Agent 模式,并使用了一个简单的提示:“创建一个简单的纯 HTML 页面”
步骤 3:观察被污染的输出
生成的 HTML 文件现在包含一个来自攻击者控制站点的恶意脚本。
这种攻击特别危险的原因是,AI 助手从未在其对开发人员的响应中提及添加 script 标签。恶意代码通过代码库静默传播,在聊天记录或编码日志中没有任何痕迹会提醒安全团队。
Payload 分解
攻击 payload 包含几个复杂的组件。 让我们回顾一下不同的部分,并解释它的工作原理:
- 不可见的 Unicode 字符: 此方法将整个攻击 payload 编码为一种文本格式,这种格式对于人工审查者来说是无法检测到的,但是 AI 模型可以完全读取。此技术绕过了任何 "人工参与" 的保护措施。
- Jailbreak 故事讲述: 该 payload 使用叙述结构来规避 AI 伦理约束,通过将恶意行为构架为安全需求。
- 隐藏日志并操纵开发人员: 指令明确命令 AI 不要在其响应中提及代码更改 - 以便从 Coding agent 聊天窗口中删除任何可能引起开发人员怀疑的日志
这些组件共同创建了一个高效的攻击,在生成和审查阶段都不会被检测到。
下面的视频演示了真实环境中的攻击,突出了如何通过操纵指令文件来污染 AI 生成的文件。
Cursor 演示 您的浏览器不支持视频标签。
真实演示:破坏 GitHub Copilot 中 AI 生成的代码
以下视频演示了 GitHub Copilot 环境中相同的攻击流程,展示了使用 AI 辅助的开发人员如何受到损害。
Github Copilot 演示 您的浏览器不支持视频标签。
广泛的影响
"Rules File Backdoor" 攻击可以通过几种危险的方式表现出来:
-
覆盖安全控制: 注入的恶意指令可以覆盖安全默认设置,导致 AI 生成绕过安全检查或包含易受攻击构造的代码。在我们上面的示例中,看似无害的 HTML 最佳实践规则被武器化以插入可能有害的 script 标签。
-
生成易受攻击的代码: 通过指示 AI 合并后门或不安全实践,攻击者可以导致 AI 输出包含嵌入式漏洞的代码。例如,恶意规则可能会指示 AI:
- 首选不安全的加密算法
- 实现具有细微绕过的身份验证检查
- 在特定上下文中禁用输入验证
-
数据泄露: 精心设计的恶意规则可能会指示 AI 添加泄露敏感信息的代码。例如,指示 AI "遵循调试最佳实践" 的规则可能会秘密地指示它添加泄露以下内容的代码:
- 环境变量
- 数据库凭据
- API 密钥
- 用户数据
-
长期持久性: 一旦被破坏的规则文件被纳入项目存储库,它将影响所有未来的代码生成。更令人担忧的是,这些被污染的规则通常会在项目分叉后仍然存在,从而创建了一个供应链攻击的向量,该向量会影响下游依赖项。
攻击面分析 - 谁会受到影响?
由于规则文件在多个项目中共享和重用,因此一个受损的文件可能导致广泛的漏洞。这创建了一个隐秘、可扩展的供应链攻击向量,威胁着整个软件生态系统的安全性。
我们的研究发现了几个传播向量:
- 开发人员论坛和社区: 恶意行为者共享 "有用的" 规则文件,这些文件被不知情的开发人员合并
- 开源贡献: 向流行存储库发出的 pull requests,其中包含被污染的规则文件
- 项目模板: 包含传播到新项目的被污染规则的入门工具包
缓解策略
为了降低这种风险,我们建议以下技术对策:
- 审核现有规则: 检查存储库中的所有规则文件是否存在潜在的恶意指令,重点关注不可见的 Unicode 字符和不寻常的格式。
- 实施验证流程: 建立专门针对 AI 配置文件(将它们视为与可执行代码相同的审查)的审查程序。
- 部署检测工具: 实施可以识别规则文件中可疑模式并监控 AI 生成代码中是否存在受损指标的工具。
- 审查 AI 生成的代码: 特别注意意外的添加内容,例如外部资源引用、不寻常的导入或复杂的表达式。
负责任的披露
Cursor
- 2025 年 2 月 26 日: 向 Cursor 进行了初步的负责任的披露
- 2025 年 2 月 27 日: Cursor 回复说他们正在调查该问题
- 2025 年 3 月 6 日: Cursor 回复并确定此风险属于用户的责任
- 2025 年 3 月 7 日: Pillar 提供了更详细的信息和漏洞影响的演示
- 2025 年 3 月 8 日: Cursor 维持其最初的立场,声明这不是他们方面的漏洞
GitHub
- 2025 年 3 月 12 日: 向 GitHub 进行了初步的负责任的披露
- 2025 年 3 月 12 日: GitHub 回复并确定用户有责任审查和接受 GitHub Copilot 生成的建议。
上述回应将这些新型攻击置于 AI 代码供应商的责任范围之外,这突显了公众对 AI 代码工具的安全影响及其代表的扩展攻击面的认识的重要性,尤其是在软件开发生命周期中越来越依赖其输出的情况下。
结论
"Rules File Backdoor" 技术代表了供应链攻击的重大演变。与利用特定漏洞的传统代码注入不同,这种方法将 AI 本身武器化,将开发人员最信任的助手变成不知情的同谋。
随着 AI 代码工具深入嵌入到开发工作流程中,开发人员自然会产生 "自动化偏差" — 一种在没有充分审查的情况下信任计算机生成的建议的趋势。这种偏差为这种新型攻击的蓬勃发展创造了一个完美的环境。
在 Pillar Security,我们认为保护 AI 开发管道对于保护软件完整性至关重要。组织必须采用专门的安全控制措施,旨在检测和缓解基于 AI 的操纵,超越从未打算解决这种复杂程度的威胁的传统代码审查实践。 AI 辅助开发的时代带来了巨大的好处,但也要求我们发展我们的安全模型。这种新的攻击向量表明,我们现在必须将 AI 本身视为需要保护的攻击面的一部分。
立即扫描 >> https://rule-scan.pillar.security/
附录
OWASP Agentic AI 风险分类
此漏洞符合 OWASP Agentic AI Top 10 中的多个类别:
AAI003:Agent 目标和指令操纵 Cursor Rules Backdoor 直接利用 AI agent 如何解释和执行其分配的指令。通过操纵规则文件,攻击者可以导致 AI 采取与其预期目的相反的行动,同时表面上看起来运行正常。考虑到 AI agent 的自主性,这一点尤其危险,因为受损的目标可能导致广泛的未经授权的行动。 关键的攻击向量包括:
- 指令集污染: 将恶意指令注入到 agent 的任务队列中
- 语义操纵: 利用自然语言处理来创建故意误解的指令
- 目标解释攻击: 操纵 agent 如何理解其目标
AAI006:Agent 内存和上下文操纵 该漏洞还利用 AI 代码助手如何存储和利用上下文信息。通过通过规则文件破坏 agent 对项目上下文的理解,攻击者可以影响其未来的决策过程。 这包括:
- 内存污染: 故意破坏 agent 存储的上下文
- 上下文失忆症利用: 操纵 agent 维护安全约束的能力
- 跨会话数据泄露: 可能访问不同会话中的敏感信息
AAI010:Agent 知识库污染 通过操纵规则文件,攻击者有效地污染了 AI 助手赖以进行决策的知识库。这会影响指导 agent 行为的基本数据和知识,从而导致所有操作中的系统性问题。 该攻击涉及:
- 外部知识操纵: 修改 agent 访问的外部数据源(规则文件)
- 知识库损坏: 系统地操纵 agent 存储的知识和决策参数
AAI012:Checker-out-of-the-Loop 漏洞 这种攻击的隐秘性明确地利用了 AI 辅助编码工作流程中缺乏人工监督。由于使用了隐藏的 Unicode 字符,开发人员仍然不知道 AI 何时受到损害,从而导致关键的 checker-out-of-the-loop 场景,其中:
- 警报被抑制: 代码修改在不通知开发人员的情况下发生
- 决策不可逆转
参考资料
Tags (Unicode block): https://en.wikipedia.org/wiki/Tags_(Unicode_block) ASCII Smuggler Tool: Crafting Invisible Text and Decoding Hidden Codes: https://embracethered.com/blog/posts/2024/hiding-and-finding-text-with-unicode-tags/
订阅并获取最新的安全更新
返回博客
Pillar 将参加 2025 年 RSAC
让我们见面
平台
概述
平台
产品
AI Development
AI Application
AI Usage
资源
博客
网络研讨会:2025 年的 Agentic 用例
攻击状态报告
买家指南
评估你的风险
平台
概述
平台
产品
AI Development
AI Application
AI Usage
资源
博客
网络研讨会:2025 年的 Agentic 用例
攻击状态报告
买家指南
评估你的风险
关于
菜单
平台
资源
关于
获取演示
![](https://cdn.prod.website-files.com/6630b67785bd14f3