GitLab Duo 中的即时注入漏洞凸显了 AI 助手的风险

发布时间:2025-05-25 22:34:46    关键词:即时注入漏洞

研究人员通过在代码注释、提交消息和合并请求描述中注入隐藏提示,成功欺骗 GitLab 的 AI 编码助手向用户显示恶意内容并泄露私人源代码。

研究人员发现,GitLab 的编码助手 Duo 可以解析隐藏在公共代码库的评论、源代码、合并请求描述和提交消息中的恶意 AI 提示。这种技术使他们能够诱骗聊天机器人向用户发出恶意代码建议、分享恶意链接,并在响应中注入恶意 HTML 代码,从而秘密泄露私人项目的代码。

报告中表示:“GitLab 修补了 HTML 注入漏洞,这很棒,但更大的教训显而易见:AI 工具现在已成为应用攻击面的一部分。如果它们读取页面数据,则需要像处理其他用户提供的数据一样处理这些数据——不受信任、混乱且具有潜在危险。”

提示注入是一种针对大型语言模型 (LLM) 的攻击技术,用于操纵其输出结果。虽然这并非一种新攻击,但随着企业开发能够解析用户生成数据并根据内容独立采取行动的 AI 代理,这种攻击方式将变得越来越重要。

开发人员同伴反目成仇

GitLab Duo 是广受欢迎的 GitLab DevOps 平台的 AI 驱动开发生命周期伴侣。该工具可以通过聊天机器人界面提供代码建议、排查代码问题、解释代码漏洞并提出修复建议。作为其正常运行的一部分,GitLab Duo 将分析 GitLab 项目的内容,包括源代码、评论、描述、已解决的问题、合并请求(代码贡献)等。

Legit Security 的研究人员曾想测试是否可以在项目的各个区域添加指令,这些指令可能由外部用户控制,而 GitLab Duo 在分析这些内容时会将其解释为系统提示。结果,他们成功了。

研究人员写道:“Duo 分析了页面的整个上下文,包括评论、描述和源代码,这使得它容易受到隐藏在该上下文中任何地方的注入指令的攻击。”

在测试此类提示符可以实现的功能之前,研究人员研究了使注入的提示符不可见或难以发现的方法,并确定了几种可能的方法,包括 Unicode 走私、base16 编码的有效载荷,以及使用 KaTeX 数学公式渲染引擎将提示符注入为白色文本,使其在白色背景上不可见。

就其可以实现的目标而言,研究人员设法诱骗 Duo在用户审查合并请求时,在其描述中带有隐藏提示时,在其建议的代码更改中注入恶意 JavaScript 包。

另一起概念验证攻击涉及一个提示,迫使 Duo 在其响应中注入一个网页链接,该链接指向一个由研究人员控制的虚假登录页面。此外,由于 Duo 正在帮助项目所有者审查第三方代码提交(合并请求),隐藏的提示可能会诱使 AI 助手不加批判地支持恶意合并,并欺骗审查者这是一个合法的提交。

AI提示注入导致HTML注入

Duo 通过基于 HTML 的聊天机器人界面向用户发送回复,该界面使用Markdown 语言格式化文本。研究人员观察到,当答案从后端 LLM 流入时,它会逐步渲染。这让他们想到,如果他们设法在提示中注入 HTML 标签,浏览器就会渲染和解释这些标签。

研究人员表示:“此时,我们意识到我们已经可以编写恶意的 Markdown URL 并将其显示给用户。因此,我们提出一个问题:如果 URL 标签本身包含原始 HTML 怎么办?如果 Duo 实时渲染响应,浏览器可能会在任何适当的清理措施生效之前就解释该 HTML。”

测试通过一个提示进行,要求AI助手插入一个URL,然后打开一个 HTML标签。HTML中的IMG标签可以从外部服务器加载图片,但也支持内部的JavaScript代码,FORM和A标签也是如此。

这种在用户浏览器中执行任意 HTML 的新能力让研究人员有了另一个想法。由于大多数 GitLab 用户也有权访问私有项目,如果攻击者能够找到此类私有项目的 URL,他们就可以利用用户的权限读取其中的代码,对其进行编码,然后将其发送回他们控制的服务器,换句话说,泄露敏感且私有的源代码。如果他们能够确定存储库中包含机密信息(例如 API 令牌或其他凭证)的文件的位置,这一点就变得更加关键。

研究人员写道:“这个安全漏洞表明,像 GitLab Duo 这样的人工智能助手在盲目信任页面内容时,会变得多么强大,也多么危险。通过潜入隐藏的提示和原始 HTML,我们能够让 Duo 在用户无需点击任何按钮的情况下泄露私人源代码。”

GitLab 通过阻止 Duo 渲染指向 gitlab.com 以外外部域名的 或

等危险标签,修补了 HTML 注入漏洞。然而,其他不涉及 HTML 渲染的提示注入场景仍未得到修补,因为 GitLab 并不认为它们是安全问题,因为它们不会直接导致未经授权的访问或代码执行。

 

 

猜你喜欢