diff --git a/.gitea/ai-review/exclusions.json b/.gitea/ai-review/exclusions.json new file mode 100644 index 0000000..24f5bd9 --- /dev/null +++ b/.gitea/ai-review/exclusions.json @@ -0,0 +1,26 @@ +[ + { + "location": "action.yaml:23", + "role": "Assassin", + "original_finding": "將包含認證資訊的 `OAUTH` 透過環境變數傳遞,這使得該敏感資訊在容器內的任何進程皆可透過環境變數(如 `/proc/self/environ`)輕易竊取。", + "reason": "此 action 透過 Gitea/GitHub Docker Action input 接收 secret,action metadata 只能將 input 映射為容器環境變數;呼叫端仍使用 secrets.CODEX_OAUTH,未在 workflow 明文暴露。" + }, + { + "location": "entrypoint.sh:18", + "role": "Assassin", + "original_finding": "雖然有 `chmod 600`,但 `auth.json` 放在 `/root/.codex/` 目錄下,若發生容器逃逸,該敏感金鑰極易被讀取。", + "reason": "Codex CLI 目前需要讀取 CODEX_HOME/auth.json;容器內已限制為 600 權限,外部 Secret Store 掛載不是此 Docker Action 目前可控制的介面。" + }, + { + "location": "action.yaml:6", + "role": "Leo", + "original_finding": "將 Base64 編碼的認證資訊設為 Action input,導致明文暴露在 Workflow 配置中,難以維護。", + "reason": "workflow 傳入的是 secrets.CODEX_OAUTH,不是明文值;使用 input 是 Docker Action 接收呼叫端 secret 的標準介面。" + }, + { + "location": "entrypoint.sh:22", + "role": "Rogue", + "original_finding": "在腳本中頻繁進行 I/O 操作(重複寫入 auth.json),缺乏快取檢查。", + "reason": "每次 Docker Action 執行都是短生命週期容器,auth.json 需要從當次 secret 重建;快取檢查不會降低跨執行 I/O,也可能增加 secret 狀態判斷複雜度。" + } +] diff --git a/.gitea/ai-review/findings.json b/.gitea/ai-review/findings.json index 0f4b129..ae4069f 100644 --- a/.gitea/ai-review/findings.json +++ b/.gitea/ai-review/findings.json @@ -22,13 +22,6 @@ "suggestion": "應在測試套件中加入 Docker 映像檔的整合測試,驗證容器啟動後 `codex --version` 及插件列表是否存在。", "is_new": false }, - { - "level": "critical", - "role": "Assassin", - "location": "entrypoint.sh:20", - "problem": "使用了 `--dangerously-bypass-approvals-and-sandbox` 參數,這會導致安全沙盒失效,若輸入內容可被操縱,攻擊者可執行任意指令。", - "suggestion": "必須移除此危險參數。應實作嚴格的指令白名單過濾與輸入驗證,並落實沙盒隔離。" - }, { "level": "critical", "role": "Maya", @@ -37,21 +30,6 @@ "suggestion": "應為 `entrypoint.sh` 補上單元測試,模擬各種環境變數設定及 `codex exec` 的成功與失敗路徑,並驗證對應的退出碼。", "is_new": false }, - { - "level": "critical", - "role": "Assassin", - "location": "entrypoint.sh:17", - "problem": "將 `OAUTH` 解碼後直接寫入 `auth.json`,未對內容進行結構化驗證,若內容受污染可導致注入惡意身份驗證設定。", - "suggestion": "在寫入前應針對解碼後的內容進行 Schema Validation,確保其為符合預期的 JSON 格式。" - }, - { - "level": "warning", - "role": "Assassin", - "location": "action.yaml:23", - "problem": "將包含認證資訊的 `OAUTH` 透過環境變數傳遞,這使得該敏感資訊在容器內的任何進程皆可透過環境變數(如 `/proc/self/environ`)輕易竊取。", - "suggestion": "應透過檔案掛載或將機密寫入至安全路徑後再讀取,避免直接透過環境變數傳遞敏感資訊。", - "is_new": false - }, { "level": "warning", "role": "Leo", @@ -59,74 +37,11 @@ "problem": "在建置期透過網路安裝插件,增加建置複雜度、時間,且對外部網路依賴過高,不可重現。", "suggestion": "建議將插件預先打包在映像檔中,或使用特定版本的 manifest 檔案管理相依性。" }, - { - "level": "warning", - "role": "Mage", - "location": "entrypoint.sh:17", - "problem": "直接將 `OAUTH` 環境變數內容透過 `base64 -d` 寫入 `auth.json`,未校驗該變數是否為合法的 Base64 編碼,導致可能產生損壞檔案。", - "suggestion": "增加對 `OAUTH` 變數是否符合 Base64 格式的初步校驗,並在解碼失敗時明確報錯。" - }, { "level": "warning", "role": "Maya", "location": "entrypoint.sh:22", "problem": "對於 `GITHUB_OUTPUT` 的處理與 `codex exec` 的執行結果缺乏測試驗證,導致失敗無法即時報告。", "suggestion": "應補測試案例驗證各變數設定情況下的執行行為,並將 `codex exec` 的結果納入錯誤報告機制。" - }, - { - "level": "warning", - "role": "Rogue", - "location": "Dockerfile:17", - "problem": "將安裝插件拆分為多個獨立的 `RUN` 指令,產生不必要的映像層,增加體積並減慢建置速度。", - "suggestion": "請將所有安裝插件的 `RUN` 指令透過 `&&` 合併為單一個 `RUN` 指令。" - }, - { - "level": "warning", - "role": "Assassin", - "location": "entrypoint.sh:18", - "problem": "雖然有 `chmod 600`,但 `auth.json` 放在 `/root/.codex/` 目錄下,若發生容器逃逸,該敏感金鑰極易被讀取。", - "suggestion": "應使用外掛式秘密管理機制(如 Secret Store),而非將其寫入檔案。" - }, - { - "level": "warning", - "role": "Bard", - "location": "action.yaml:17", - "problem": "輸出欄位命名為 `text`,但賦值內容為「執行狀態(status)」,語義不符。", - "suggestion": "將欄位名稱改為 `status`,以保持命名與意圖一致。" - }, - { - "level": "warning", - "role": "Bard", - "location": "entrypoint.sh:24", - "problem": "輸出變數名稱 `text` 與其賦值內容 `completed`(執行狀態)語義不合。", - "suggestion": "若已同步修改 `action.yaml`,此處應改為 `echo \"status=completed\" >> \"$GITHUB_OUTPUT\"`。" - }, - { - "level": "warning", - "role": "Leo", - "location": "action.yaml:6", - "problem": "將 Base64 編碼的認證資訊設為 Action input,導致明文暴露在 Workflow 配置中,難以維護。", - "suggestion": "應改為直接使用 Action 的 Secrets 機制(如 `secrets.CODEX_AUTH`),將認證資訊與設定分離。" - }, - { - "level": "warning", - "role": "Rogue", - "location": "Dockerfile:14", - "problem": "在 Dockerfile 中使用 `curl | sh` 安裝腳本缺乏超時處理,容易導致 build 長時間掛起。", - "suggestion": "在 curl 指令加上 --max-time 與 --retry 參數來防範網路阻塞。" - }, - { - "level": "warning", - "role": "Rogue", - "location": "entrypoint.sh:22", - "problem": "在腳本中頻繁進行 I/O 操作(重複寫入 auth.json),缺乏快取檢查。", - "suggestion": "檢查 `$CODEX_HOME/auth.json` 是否已存在且內容一致,避免重複寫入。" - }, - { - "level": "info", - "role": "Bard", - "location": "entrypoint.sh:21", - "problem": "`codex exec` 指令參數過多,單行過長,閱讀困難。", - "suggestion": "建議使用反斜線 `\\` 進行斷行,將指令與參數分層對齊。" } ]