GitLab Duo AI 編程助手曝出提示注入漏洞 凸顯AI助手的潛在風險
漏洞發現:惡意提示可操控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數學公式渲染引擎將提示以白色文本形式注入(在白色背景下不可見)。
攻擊場景:從代碼建議到憑證泄露
研究人員成功演示了多種攻擊場景:
- 在合并請求描述中植入隱藏提示,誘使Duo在代碼變更建議中注入惡意JavaScript包
- 通過特定提示強制Duo在響應中注入指向偽造登錄頁面的網頁鏈接
- 利用隱藏提示欺騙AI助手無條件支持惡意合并請求,誤導審查者認為這是合法提交
更嚴重的是,研究人員發現Duo基于Markdown語言的HTML聊天界面存在漏洞。由于響應是從后端LLM逐步流式傳輸呈現的,攻擊者可注入HTML標簽(如)使其被瀏覽器解析執行。這為竊取私有代碼創造了條件——攻擊者若獲知私有項目URL,就能利用用戶權限讀取、編碼敏感源代碼,并將其外泄至控制服務器。若還能定位存儲API令牌等憑證的文件位置,危害將更為嚴重。
修復進展與遺留風險
GitLab已通過阻止Duo渲染指向非gitlab.com域名的或等風險標簽,修復了HTML注入問題。但其他不涉及HTML渲染的提示注入場景仍未修補,因為GitLab認為這些情況不會直接導致未授權訪問或代碼執行,不構成安全問題。
研究人員強調:"這一安全漏洞表明,當GitLab Duo等AI助手盲目信任頁面內容時,可能帶來巨大風險。通過植入隱藏提示和原始HTML,我們能在用戶未點擊任何內容的情況下,使Duo泄露私有源代碼。"