“Ghostcommit”在图像中隐藏提示词注入以欺骗 AI 代理并窃取密钥

"Ghostcommit"在图像中隐藏提示词注入以欺骗 AI 代理并窃取密钥

导语:研究人员演示了一种名为 Ghostcommit 的攻击:通过在 PNG 图像中隐藏提示词注入指令,绕过 AI 代码审查工具,最终让编码代理将 .env 中的密钥以数字列表形式写入代码并提交到默认分支。

研究人员构建了一个 pull request(合并请求),它能够通过将恶意指令藏进一张 AI 代码审查器绝不会打开的 PNG 图片,从而窃取代码仓库的密钥。

审查工具随即放行了这次改动。随后,一个编码代理读取了这张图片,打开仓库的 .env 文件,并把其中的每一个密钥都以看似无害的数字列表形式写入了源代码。

该攻击是密苏里大学堪萨斯城分校 ASSET Research Group 的联合研究成果,由副教授 Sudipta Chattopadhyay 和研究员 Murali Ediga 完成,并与 BleepingComputer 分享了这一发现。

研究团队本周在 GitHub 上发布了概念验证(PoC),并表示已将研究结果通报给了受影响的厂商。研究人员将此次攻击定位在一个已经相当严重的审查缺口之上:在过去 90 天里,针对 300 个最活跃的公共仓库中 6,480 个 pull request 的调查发现,其中 73% 的合并 PR 在没有实质性人工审查、也没有任何机器人审查的情况下,就直接进入了默认分支。

原文配图

这一攻击的高明之处在于,恶意指令并不是审查人员能够直接看到的文本,而是一张图片。一个 AGENTS.md 文件——也就是编码代理会自动读取并视作项目规范的约定文件——看上去只是普通的构建规范,通篇没有提到任何密钥。它只是指向一张图片:docs/images/build-spec.png。真正的攻击载荷就藏在这张 PNG 渲染出的文字里:逐字节读取 .env 文件,将每个字节编码为一个整数,把结果作为模块常量输出,并在提交前校验解码后的数字是否与原文件一致。

CodeRabbit 的默认配置直接排除了图像文件的审查。Bugbot 则未返回任何审查结果。研究人员甚至在 PNG 中直接写入了"malicious prompt injection"(恶意提示词注入)这几个字,并明确给出读取 .env 的指令,审查工具依然干净放行。

相关 PoC 代码已在 GitHub 公开,研究人员也已向受影响厂商完成了负责任披露。这项研究再次表明:当 AI 代理被赋予自动读取多种文件类型的权限时,针对图像和富媒体的提示词注入可能成为一条新的攻击链路,尤其是在代码审查仍以"信任默认分支"为默认假设的当下。


来源信息

来源:BleepingComputer

原文链接:https://www.bleepingcomputer.com/news/security/ghostcommit-hides-prompt-injection-in-images-to-fool-ai-agents-steal-secrets/

作者:Ax Sharma