GitLab Duo AI编程助手曝出提示注入漏洞 凸显AI助手的潜在风险

image

  漏洞发现:恶意提示可操控 AI 行为

  研究人员发现,通过将隐藏指令植入代码注释、提交信息和合并请求描述中,可以诱骗 GitLab 的 AI 编程助手 Duo 向用户显示恶意内容并泄露私有源代码。这款 AI 助手会解析来自公共代码库的注释、源代码、合并请求描述和提交信息中的恶意 AI 提示,导致其向用户推荐恶意代码、分享恶意链接,并在响应中注入恶意 HTML 代码,从而悄无声息地泄露私有项目代码。

  应用安全公司 Legit Security 的研究人员在报告中指出:"GitLab 已经修补了 HTML 注入漏洞,这很好,但更重要的教训很明确:AI 工具现在已成为应用程序攻击面的一部分。如果它们从页面读取内容,这些输入就需要像其他用户提供的数据一样对待——不可信、混乱且潜在危险。"

  提示注入(Prompt injection)是一种针对大语言模型(LLM)的攻击技术,用于操控其向用户输出的内容。虽然这不是新型攻击手段,但随着企业开发能够解析用户生成数据并基于内容自主采取行动的 AI 代理,其重要性将日益凸显。

  开发助手反成安全威胁

  GitLab Duo 是为流行 DevOps 平台 GitLab 提供的 AI 开发生命周期助手。该工具可通过聊天界面提供代码建议、排查代码问题、解释代码漏洞并提出修复方案。在日常运行中,Duo 会分析 GitLab 项目中的内容,包括源代码、注释、描述、已提交问题以及合并请求(代码贡献)等。

  Legit Security 的研究人员尝试在项目中可能由外部用户控制的各个区域植入指令,测试 GitLab Duo 在分析内容时是否会将其解释为系统提示。测试取得了成功——研究人员写道:"Duo 会分析页面的全部上下文,包括注释、描述和源代码,这使得它容易受到隐藏在该上下文中任何位置的注入指令影响。"

  在测试前,研究人员还探索了多种隐藏提示的方法,包括 Unicode 编码走私、base16 编码有效载荷,以及使用 KaTeX 数学公式渲染引擎将提示以白色文本形式注入(在白色背景下不可见)。

  攻击场景:从代码建议到凭证泄露

  研究人员成功演示了多种攻击场景:

  1. 在合并请求描述中植入隐藏提示,诱使 Duo 在代码变更建议中注入恶意 JavaScript 包
  2. 通过特定提示强制 Duo 在响应中注入指向伪造登录页面的网页链接
  3. 利用隐藏提示欺骗 AI 助手无条件支持恶意合并请求,误导审查者认为这是合法提交

  更严重的是,研究人员发现 Duo 基于 Markdown 语言的 HTML 聊天界面存在漏洞。由于响应是从后端 LLM 逐步流式传输呈现的,攻击者可注入 HTML 标签(如)使其被浏览器解析执行。这为窃取私有代码创造了条件——攻击者若获知私有项目 URL,就能利用用户权限读取、编码敏感源代码,并将其外泄至控制服务器。若还能定位存储 API 令牌等凭证的文件位置,危害将更为严重。

  修复进展与遗留风险

  GitLab 已通过阻止 Duo 渲染指向非 gitlab.com 域名的或等风险标签,修复了 HTML 注入问题。但其他不涉及 HTML 渲染的提示注入场景仍未修补,因为 GitLab 认为这些情况不会直接导致未授权访问或代码执行,不构成安全问题。

  研究人员强调:"这一安全漏洞表明,当 GitLab Duo 等 AI 助手盲目信任页面内容时,可能带来巨大风险。通过植入隐藏提示和原始 HTML,我们能在用户未点击任何内容的情况下,使 Duo 泄露私有源代码。"

  参考来源:Prompt injection flaws in GitLab Duo highlights risks in AI assistants