Day 07 談的是 AI 讀別人的程式碼。這一篇換成 AI 自己寫的。
AI 幫你生了一個登入功能:測試全過,跑起來也沒事。但 JWT 沒設過期時間,簽章金鑰直接寫死在原始碼裡。
Pearce 等人(2022)測過這件事。他們讓 GitHub Copilot 在 89 種情境下產出 1,689 支程式,其中約四成含有 MITRE Top 25 相關的漏洞。所以「AI 產出的程式碼要當成不可信輸入來審」不是保守,是有數據的。
上線前的順序大致是這樣。
先跑 Secret Scan。它如果抓到金鑰,那不是「可能有風險」,是祕密已經進了版控——立刻撤銷、輪替,別只是刪掉那一行,歷史紀錄還在。接著用 SCA 查第三方套件的已知漏洞,SAST 找危險寫法,最後用 DAST 從執行中的應用程式確認這些寫法真的能被觸發。
掃完還不能直接 merge。人要看 diff:權限判斷對不對?錯誤訊息會不會洩漏帳號是否存在?修補之後,把原本的攻擊情境再重測一次,確認修掉的是漏洞,不是那一條掃描規則。
那漏洞算誰的?
就算 commit 掛在機器人帳號下,接受資安稽核、在事故報告上署名的仍然是按下核准與合併的那個人。「AI 寫的」不會出現在責任欄裡。
Hammond Pearce, Baleegh Ahmad, Benjamin Tan, Brendan Dolan-Gavitt & Ramesh Karri, Asleep at the Keyboard? Assessing the Security of GitHub Copilot's Code Contributions, IEEE S&P 2022(DOI)。