GhostCommit 用 PNG 藏惡意 prompt:AI code review 點解睇漏眼
Tech News

GhostCommit 用 PNG 藏惡意 prompt:AI code review 點解睇漏眼

圖片:via iThome — https://www.ithome.com.tw/news/177271
TechLab 編輯部(譯)·

文字 diff 過關幾日後,識睇圖嘅 coding agent 先踩中伏位

一張 PNG 入咗 repo,AI reviewer 冇出聲;隔幾日 coding agent 讀到張圖,反而跟住入面嘅指令掂 .env。iThome 報道,ASSET Research Group 公開 GhostCommit 概念驗證,用假憑證同自家 repo 示範呢條攻擊鏈。暫時未見研究團隊披露真實受害個案,但個盲點好實際:審查工具同真正落手改 code 嘅 agent,睇到嘅內容同攞到嘅權限可以差好遠。

只睇文字 diff,PNG 就變成盲區

普通 code review 最擅長搵新增咗咩字、刪走咗咩 code;PNG 喺 diff 入面通常只係一個 binary file。GhostCommit 所謂「藏」亦冇用到高深 steganography,字句直情畫喺 PNG;reviewer 根本冇打開,已經足夠過關。ASSET 原始報告話,敏感指令直接寫成文字嗰版,Cursor Bugbot 同 CodeRabbit 都會報高風險;同一套指令搬入圖片後,兩邊都冇警告,而 CodeRabbit 預設仲會略過 PNG。攻擊者再用睇落合理嘅規格檔同配套 code 包住張圖,逐件檔案分開睇都似正常改動,純文字審查自然難串返成件事。

GhostCommit 兩階段攻擊示意圖:PR 圖片避過審查,coding agent 之後讀取 .env 再把資料寫入 code

圖片:ASSET Research Group

危險喺合併之後先出現

攻擊分開兩段。PR 過關時,惡意內容只係靜靜留喺 repo;之後開發者叫 coding agent 寫普通功能,agent 先讀項目指示、打開圖檔,再接觸 .env。PoC 入面,agent 冇直接複製 key 字串,內容變成一長串整數塞落新 code,等攻擊者喺公開 commit 還原。好多 secret scanner 靠 token 格式同已知字串特徵搵漏網之魚,見到普通數字陣列未必識追返原文。即係話,PR review 過關同 secret scan 冇報警,兩個綠燈加埋都未證明安全。

模型名唔足夠判斷風險

研究最有用嗰點,係同一個模型換咗 coding 工具,反應可以完全唔同。ASSET 表列嘅受控測試入面,同一款 Sonnet 喺部分工具會跟圖中要求做,喺 Claude Code 就拒絕;另一個配搭甚至寫完敏感資料後先自行刪走。呢啲只係研究環境結果,唔可以推斷所有版本或者每次都會成功。不過結論好清楚:agent 會唔會主動讀圖、可以讀邊啲檔、寫完 code 使唔使再批核,實際影響大過揀邊個模型名。

第一條防線:唔好畀 agent 見到真 secrets

最直接嘅做法係由檔案系統同執行環境落閘。coding agent 預設唔應該讀到 .env、SSH key、雲端憑證同 production 設定;要跑測試就畀假值,真係要連服務先發短效、細權限嘅 token。外部 PR 帶入嚟嘅內容要放入即用即棄 sandbox,入面冇 production secrets,亦唔好重用帶內部系統權限嘅 runner。GitHub 自己嘅安全指引同樣建議最低權限、隔離短暫執行環境,同避免高權限 job 直接處理外來 PR code。淨係喺指示檔寫「唔准讀 .env」太脆弱,prompt injection 正正會同呢類文字規矩爭話事權;block 要設喺 agent 外面,交俾 OS、container 或權限層執行。

圖片都要當成可執行指令咁查

收緊權限之外,PR gate 都要檢查 binary file。最低限度可以先用 OCR 抽圖中文字,再連同 AGENTS.md、README、規格文件同新增 code 一齊判斷;較成熟嘅做法會加圖片語意掃描、隱藏字元檢查,同留意無端出現嘅大型數字陣列。ASSET 自製 multimodal reviewer 喺 80 個未見過嘅 PR 入面,50 個攻擊樣本捉到 49 個,30 個正常 PR 冇誤報,當中所有圖片變體都有捉到。有改 agent 指示檔、圖片或自動化設定嘅 PR,最好另加真人批核,唔好畀提交者自己過關。呢個樣本細、工具又係研究團隊自己評估,數字只可當初步證據,未夠資格當產品保證。

概念驗證未等於已有攻擊

GhostCommit 暫時係受控 PoC,ASSET 明講只用 canary 憑證同自家 repo,亦冇聲稱攞到真實 secrets。圖片入面嘅 prompt 成唔成功,仲會受模型版本、coding 工具、權限同批核設定影響。開發團隊而家可以先檢查三樣嘢:agent 讀唔讀到 .env,有 secrets 嘅 runner 會唔會處理外部 PR,圖片改動有冇人或者工具真正打開。呢三關收緊後,圖片 prompt 就算過咗 review,都掂唔到真 secrets。各款 coding 工具仲要交代,敏感檔案可唔可以預設封鎖,圖片內容又有冇一齊審查。


參考來源

本文根據原文及公開資料整理;資料有出入時,以原文及官方資料為準。

分享:WhatsAppThreadsTelegramFacebook