掃描範圍是 2026-11-01(FR-172 開案)到 11-09 之間,主系統與
jedi-remote-agent套件新寫或大改的程式:長輪詢通道、設定下發、金鑰登記簿、Agent 授權照、更新中心 Agent 區、系統日誌查詢、設定檔加密、容器非 root、出版管線。工具是 Claude Code 官方claude-securityplugin,每棒一位研究員讀全範圍、三位獨立檢查員對每條候選投票。首腦對每條通過的發現都開檔核對過行號,中以上的追到呼叫端。每條的檔名、行號、修法在跨案總表
security-scan-consolidated/§3.1 第 241~262 項;每棒的白話報告在本資料夾reports/,套件兩棒在 jedi-packages repodocs/security-scan/FR-187/。
15 棒全部完成,檢查員投票每棒都跑完,沒有一棒中斷、沒有一棒缺交。找到 22 條:2 高、7 中、13 低。
最要緊的四件,都是落地版第一版就打得到的:
| 問題 | 嚴重度 | 總表 | 修正卡 |
|---|---|---|---|
| 正式發版的簽章步驟會執行建置機共用資料夾裡可被偷改的腳本;蓋章程式與證據分類映像都追分支最新版、沒有固定版本。改的人能用正式章對所有客戶發惡意更新 | 高 2、中 1 | #259~261 | 決策者裁定先不做,未開卡 |
Agent 的憑證中心被加進主系統所有對外 HTTPS 的信任清單,而它會照 Agent 註冊時自填的網址簽任意網域的憑證。拿到註冊碼的人能取得 api.anthropic.com 的合法憑證,攔截網路就能偷 AI 金鑰、郵件密碼、物件儲存密鑰。預設設定就打得到 |
中 | #254 | SEC-4 |
| 主系統認 Agent 憑證只看「是自家 CA 簽的、名字是那台的指紋」,指紋又是註冊時自報的。拿兩個租戶的註冊碼就能接管另一個租戶已核准的 Agent;同一個 CA 也替未核准者簽伺服器憑證 | 中 2 | #245、#249 | SEC-3(套件);已註冊舊 Agent 升級後立刻換一次證(jedi-remote-agent 1.18.3) |
| 落地版的出廠系統管理員角色擁有全部權限,子公司管理員自動拿到更新中心與支援頁權限,可以下載含所有公司紀錄的整機診斷包、讓整台機器升級。根因是程式假設「落地版一台機器只有一個客戶」 | 中 2、低 1 | #252、#253、#255 | SEC-1 |
管理員設給 Agent 的檢測工具密碼以明文永久存在 agent_requests 表,沒有任何程式會刪 |
中 | #241 | SEC-2 |
其餘 13 條低風險都要先控制一台 Agent、先攻破容器,或者先有主機帳號,詳見總表。
| 批 | 棒 | 發現 | 總表 |
|---|---|---|---|
| 1 | A1 長輪詢通道(主系統端) | 中 1 | #241 |
| 1 | J1 長輪詢通道(套件端) | 中 1 | #245 |
| 1 | A2 設定下發與工具帳密 | 中 1(與 A1 同條) | #241 |
| 1 | B Agent 回報事件 | 低 3 | #242~244 |
| 2 | C 金鑰登記簿、授權照開通、註冊碼 | 低 2 | #250、#251 |
| 2 | J2 Agent 註冊與通行證(套件端) | 中 2(一條與 J1 同條) | #245、#249 |
| 2 | D1 Agent 新版下載與驗章 | 低 1 | #246 |
| 2 | D2 推送 Agent 升級與紀錄 | 低 3(一條與 D1 同條) | #246~248 |
| 3 | D3 更新中心主系統端 | 中 1、低 1 | #252、#253 |
| 3 | E 系統日誌查詢與分租戶 | 中 1 | #255 |
| 3 | F1 設定檔加密:維運指令、舊機轉換 | 0(工具 0 候選,人工 7 項不成立) | — |
| 3 | F2 加密金鑰遷移與容器啟動 | 中 1 | #254 |
| 4 | G 容器非 root 與 compose | 低 3 | #256~258 |
| 4 | H 出版管線與發布簽章 | 高 2、中 1 | #259~261 |
| 4 | I 證據檔、自主執行報告、測試端點 | 低 1(人工,未經投票) | #262 |
拆棒後沒有一個研究員一次看完整條鏈的地方,首腦驗收時串過:
DEBUG=false,小弟回報有誤;#262 已由 SEC-6 修掉,掛載條件只認專用開關。22 條裡有 19 條已經修完並合回主線,修正卡是 FR-188 母卡 CM-3728 底下的 SEC-1~10(CM-3748~3756、CM-3760),改到套件的部分都已發版、主系統改回釘版。出版管線三條(#259~261)決策者裁定先不做;這三條只在正式發版那一刻能被利用,建議發下一個正式版前排入。
| 卡 | 修了什麼 | 總表 |
|---|---|---|
| SEC-1 | 落地版子公司管理員不能再碰整機的診斷包、升級紀錄與升級操作,只有總部能做;子公司仍看得到自己的系統日誌 | #252、#253、#255 |
| SEC-2 | Agent 信箱裡的工具帳密改成加密落庫、用完清空 | #241 |
| SEC-3 | Agent 憑證只認「簽給這台的那張」;待核准的 Agent 拿不到伺服器憑證;直推讀連線上真正出示的憑證 | #245、#249 |
| SEC-3 補 | 已註冊的舊 Agent 沒有釘公鑰,升級後主系統會叫它立刻換一次證,不必等到期前 90 天自動換證(一年證最長要等約 9 個月)(jedi-remote-agent 1.18.3,migration 022) |
#245 |
| SEC-4 | 內部服務改用只簽內部名稱的專用 CA,不再把 Agent CA 放進主系統對外信任清單;Redis 密碼不上指令列;Agent 金鑰目錄真唯讀 | #254、#257、#258 |
| SEC-5 | Agent 回報收緊:日誌截斷、去重鍵限長、稽核操作者核對主系統簽過的票、升級分批分租戶、升級紀錄只收真的派過的工單 | #242、#243、#244、#247、#248 |
| SEC-6 | 檢查更新只回必要欄位、線上開通加限流、壓測端點只認專用開關 | #246、#250、#262 |
| SEC-7、SEC-10 | 升級進度檔不寫管理員帳號;拆成內部檔與維護頁公開檔,公開檔升級結束 15 分鐘後自刪 | #256 |
| SEC-8 | 前門 nginx 只在升級期間給讀進度檔 | #256 |
| SEC-9 | 日誌與錯誤追蹤遮罩加上 Agent 線上開通碼 | #251 |
每棒的驗收紀錄在 Notion 母卡 CM-3711 與各子卡「首腦復核」段,沿革見 git log。