# 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 即可）
