FR-128 交接現況(STATE)

這份是 living 檔:每棒就地 Edit,只描述「此刻」。歷史脈絡看同資料夾的 FR-128-LOG.md。

項目 值
最後更新 2026-10-05 深夜(收案)
狀態 已收案——目標「四顆出貨 image 零 Critical」達成,1.25.0 已出包
branch BE/FE/jedi-python-package/evidence-agent 全在 fix/security
母案卡 CM-2479 https://app.notion.com/p/FR-128-image-Critical-3f0346da4cd081f0b4f5fb621dd5b826 (Done)
後續 FR-131:四顆 image 弱點總數壓到個位數(High 以下與 Ubuntu 22.04 底層弱點)
Notion 回寫規範 docs/claude/notion-issue-tracker.md

🧭 原始需求 / WHY

  • 決策者原話:客戶要求出貨 image「一條 Critical 都不能有」。後來補一句「我們要治根——客戶一定自己也會掃一次」。
  • 這整件事要解決什麼:客戶驗收會用自己的掃描器(多半 Trivy,也可能 Grype)掃我們交付的 docker image。我們要讓任何一個工具掃都是 0 Critical,不是挑對自己有利的工具把數字做漂亮。
  • 目標模型:四顆 Guidant AI 出貨 image(be/classifier/fe/init)+檔案 Agent image,Trivy+Grype 掃都 Critical=0;CI 出包時自動擋「白名單外的 Critical」;白名單每條有理由與到期日。
  • 範圍的界線:本 FR 只處理 Critical。決策者看完結果認為「治根」指的是全部要少,High 以下與 Ubuntu 22.04 底層弱點轉 FR-131。

§0 接手讀序

本 FR 已收案,一般不需接手。要查細節:

  1. 本檔 §1
  2. Notion 母卡 CM-2479 卡尾「收案」段與「特殊處理登記表」
  3. docs/security-reports/2026-10-04/README.md(給人看的最終數字頁,本機留存、不入版控)
  4. docs/analysis/2026-10-05-fr128-osv-to-trivy-grype-and-classifier-rebase.md

✅ 冷接自檢

  1. 為什麼 osv-scanner 不能當依據?(判定不準+看不到 omnibus 內嵌的 Ruby gem)
  2. 為什麼白名單裡的條目到期會自動失效?(逼人回來重評,不是永久豁免)
  3. 為什麼 classifier 換底而不是拆掉 LibreOffice?(拆出去成獨立容器客戶一樣會掃到;換 Ubuntu 22.04 後 Trivy/Grype 雙 0)

§1 當前狀態

Notion 卡

卡 內容 狀態
CM-2479 母卡 Done
CM-2480 .1 四顆基底 digest+apt/apk upgrade+init 刪 gosu Done
CM-2481 .2 be:CINC 7.2.1+三支 gem 補升 Done
CM-2482 .3 classifier 拿掉編譯工具與 -dev、pip 解釘版 Done
CM-2483 .4 classifier 換 Ubuntu 22.04 Done
CM-2484 .5 CI 換 Trivy+Grype、白名單、gate Done
CM-2500 .6 Agent 工具清單升 CINC 7.2.1 Done
CM-2501 .7 Agent 容器版換 Ubuntu 22.04 Done
CM-2502 .8 三支 gem 上 Nexus Done
CM-2505 .9 Agent 接進弱點關卡,krb5 先白名單 Done

1.25.0 出包結果(pipeline #2913839025,關卡第一次真跑放行)

工具(四顆合計) Critical High Medium Low 可修
Trivy 0 8 154 71 7
Grype 0 13 774 113 —
  • pip-audit:後端 263、沙箱 35 套件,0 漏洞。
  • 修前基準:1.24.3 Trivy Critical 6(be 2/classifier 3/init 1/fe 0);1.24.3 CI osv-scanner Critical 12。
  • 剩餘弱點根源:Ubuntu 22.04 系統套件 53 條(be/classifier 共用,官方無修正版)、deadsnakes python3.11 30 條 CVE(classifier,4 子套件各報一次=120 條)、pip 26.2.1 自帶 6 條、be Ruby json 1 條(Low)。fe/init Trivy 已 0。

白名單 scripts/build/vuln-allowlist.txt(8 條,本輪 0 條被用到)

  • be Ruby json 2.9.1 — 到期 2027-01-31
  • classifier pip 26.2.1 自帶 msgpack/setuptools×2/urllib3×3 — 到期 2026-12-31
  • Agent krb5 1.18.3(CVE-2024-37371)— 到期 2026-12-31

環境

  • 190 e2e 已升 1.25.0。
  • 188 的 *-fr128 temp image 與兩個 .build/fr128-verify/ 已清。
  • Agent 1.4.0 image 尚未 build(另一條線負責)。

§2 已定裁示

  • OS 層弱點一律 Trivy+Grype,不再用 osv-scanner。
  • classifier 換 Ubuntu 22.04 而非拆 LibreOffice;Python 維持 3.11 走 deadsnakes。
  • Agent 與 be 同用 CINC 7.2.1;Agent 容器版也是 Ubuntu 22.04。
  • gate:Trivy 或 Grype 任一報白名單外 Critical 就擋;兩個工具數字並列不合併。
  • 報告落點:pipeline artifacts+188 本機+job log,不進 repo(docs/security-reports/ 在 gitignore)。
  • 「Grype 對 deadsnakes python3.11 誤報 276 條 Medium」不特別提(決策者裁)。

§3 下一步

已收案,後續見 FR-131(目標:四顆 image 弱點總數壓到個位數;主路線 Ubuntu 24.04,副路線 distroless/Chainguard 評估)。

§4 待辦與風險(不屬本 FR,留給後續)

  • Agent 的 krb5 1.18.3:Agent 自帶 syslibs 從 debian:11 收集,Grype 報 Critical、Trivy 不報,不會自己消失。白名單到 2026-12-31;另案把 syslibs 採集基底換 Ubuntu 22.04(還沒開卡),到期前要做,否則 Agent 出包會被擋。
  • 白名單到期:classifier pip 自帶六條 2026-12-31、be json 2027-01-31;到期前要重評(多半隨 FR-131 換基底一起消失)。
  • 手測三項改列 1.25.0 驗收:①檢測基準頁上傳 InSpec profile 看控制項正常 ②丟 docx 證據跑分類 ③Agent 1.4.0 出包後派一次中文 TWGCB 任務確認 CINC 7.2.1。
  • 兩個 DEV 環境問題不在 FR-128,要開 issue 記 docs/issues/pending/(還沒做):設定檔庫 TWGCB Ubuntu 22.04(version uid b051f4ff…)資料庫有登記但檔案儲存(bucket guidant-ai-dev)裡沒有檔,從設定檔庫選會 500;DEV 舊派工單有 79 筆帶明文 SSH 私鑰/WinRM 密碼的歷史資料(現在程式已不會這樣寫)。

§5 環境座標

  • 188 build 機:ssh jedi@192.168.50.188(免密、docker 免 sudo);BE /opt/guidant-ai-be、FE /opt/guidant-ai-fe、jedi /opt/jedi-python-package、Agent /opt/guidant-ai-agent——程式碼只走 git pull,禁 scp/rsync。
  • 掃描工具(188 /usr/local/bin):trivy 0.75.0、grype 0.120.0(漏洞庫 ~3GB 在 ~/.cache/grype)、syft 1.54.0。
  • Nexus:192.168.50.171:8082,帳密在 188 ~/.netrc(curl -n),agent-tools 的 fr066/ 下放三支 gem。

§6 不在本期 scope

  • High 以下弱點、Ubuntu 22.04 底層弱點 → FR-131
  • 拆掉 LibreOffice
  • syslibs 採集基底換 Ubuntu(krb5,另案)
  • Docker build cache 清理(決策者明說不動)
  • DEV 兩個資料問題(開 issue 即可)