跳轉到

Guidant AI v1.25.1 Release Note

項目 內容
版本 1.25.1(BUG 版號;主軸=出貨 image 弱點處理:基底換 Ubuntu 24.04、LibreOffice 改官方版、安裝包附的第三方 image 升級)
發布日期 2026-10-06
上一版本 1.25.0(2026-10-05)
涵蓋區間 BE v1.25.0..本版進版 commit;FE 無程式改動(版號對齊);檔案 Agent 隨本版改 Dockerfile 與工具包,Agent 本身另由出包線出版
涵蓋需求 FR-131 出貨 image 弱點處理(CM-2507 母卡、CM-2508 討論稿、CM-2509 實作)
規模 無 DB migration、無 Python 套件升版、無 API 變動;改 image 基底與內容、安裝包第三方 image 版本、安裝程式兩項修正
適用部署 188 出包後部署 190 e2e 驗;STG/POC 待決策者放行

為什麼是 BUG 版號:使用者看不到新功能,行為不變;改的是交付的 image 內容與安裝程式。


0. 發版前回歸 gate

出包後部署 190 e2e,site-regression core 對 190 跑(結果待回填)。

1. 概述

客戶驗收會拿 Trivy 不帶參數掃交付的 image。1.25.0 已做到零 Critical,但總數仍多:自家四顆合計 233 條、檔案 Agent 449 條;安裝包另附的資料庫、快取、物件儲存三顆從沒掃過,合計 790 條(其中 Critical 22 條)。

本版照風險等級處理,不設數量目標:能修的修、用不到的拿掉、拿不掉的逐條寫明理由揭露。結果:我們自己 build 的 image Critical 與 High 全部是 0,剩下的全是 Ubuntu 官方還沒出修正的 Medium/Low。

2. 出貨 image 改了什麼(FR-131)

image 改了什麼 Trivy(1.25.0 → 本版)
證據分類沙箱(classifier) 基底 Ubuntu 22.04 → 24.04;Python 改 deadsnakes 3.13;出貨段拿掉 pip;LibreOffice 改官方 25.8.7 版並刪掉它自帶的 Python 179 → 28
後端(be) 基底換 24.04;LibreOffice 同上;CINC Auditor 改 24.04 版;清掉 CINC 內建的 Ruby json 舊檔 54 → 29
前端(fe)、資料庫初始化(init) 未動 0 → 0
檔案 Agent(容器版) 基底換 24.04;LibreOffice 改用 image 內的系統庫並刪自帶 Python;sonar-scanner 7.3 → 8.1;清 Ruby json 舊檔 449 → 32(隨 Agent 下一版出貨)

三顆共同: - LibreOffice 安裝檔在 build 時下載並驗 sha256,正式 build 腳本不必另外準備檔案。 - LibreOffice 自帶的 Python 刪掉:只有 Grype 看得到,報 10 條 High;產品只走 soffice 命令列轉檔,用不到它。 - 建帳號後清空子帳號範圍設定(/etc/subuid、/etc/subgid)。

剩下的弱點逐條(CVE、Ubuntu 修補狀態、處理方式、對應 CISA VEX 類別的理由)見 docs/features/FR-131-2610-image-vulns-to-single-digit/scan/2026-10-06-remaining-vulns.md。

掃描器看不到的部分(必須揭露)

  • classifier 的 Python 3.13:Ubuntu 24.04 官方沒出 3.13,漏洞資料庫沒有它的紀錄,Trivy 永遠報 0。
  • 三顆的官方版 LibreOffice 25.8.7:解開放進 /opt,沒登記在 Ubuntu 套件清單。
  • 後端與 Agent 的 Nuitka 執行檔(同 1.25.0)。

SBOM 要寫明這些版本,每次發版追官方安全公告。

3. 安裝包附的第三方 image

image 1.25.0 本版 Trivy
redis 7-alpine 8-alpine 46 → 0
seaweedfs(物件儲存,後端與 Agent 共用) 3.99 4.48 198 → 2
postgres 16(2026-08 取得) 16(2026-10-06 取得) 546 → 342(Critical 14 → 2)
  • 三顆都在出包腳本裡釘 digest:出包前比對 build 機上那個 tag 的 digest,不是釘定的那一顆就不出包。compose 照舊寫 name:tag(docker save/load 會丟掉 digest,寫在 compose 會讓 air-gap 安裝找不到 image)。
  • 第三方 image 只揭露、不擋出包。
  • postgres 不換 alpine:現有資料庫排序規則是 glibc 的 en_US.utf8,換成 alpine(musl)文字索引會對不上,屬資料庫遷移,另案。
  • seaweedfs 3.99 → 4.48 已實測:3.99 寫入的資料 4.48 讀得到、內容一致;Agent 用的防竄改保存(Object Lock)全項通過,且 3.99「桶裡有鎖住的檔案仍能整桶刪除」的缺口在 4.48 已修。
  • redis 8 已實測:正式 ACL/TLS 設定原樣起,四個帳號 20 項指令與 7 版結果相同。

4. 安裝程式修正

問題 影響 修法
seaweedfs 4.x 對已存在的 bucket,建立指令回錯誤碼(3.99 回 0) 安裝程式照退出碼判斷,重跑安裝與升級會直接失敗 改以 bucket 清單讀回確認(3.99、4.x 的清單格式都認)
guidantai rotate-credentials 換 redis 密碼後,舊密碼照樣能登入 換密碼等於沒換(redis 7、8 都一樣,原本就有的缺口) ACL SETUSER 加 resetpass;換完舊密碼被拒,失敗回滾也正確

5. 升級須知

  1. 升級照常 install.sh --upgrade。redis 與 seaweedfs 的容器會換成新版 image;seaweedfs 資料沿用原 volume。
  2. 證據分類服務的 image 名稱仍是 evidence-classifier:1.6.2(套件版號未升),但內容已換成 24.04 版。升級時 docker load 會把同一個名稱指到新內容、compose 依 image ID 重建容器,不需額外操作。
  3. 升級後建議跑一次 guidantai rotate-credentials:舊版換過的 redis 密碼,舊的那組其實仍有效,重換一次才會真正失效。

6. Breaking Changes

無。

7. DB Migration

無。

8. 相依套件版本

Python 套件與 1.25.0 相同。jedi-evidence-classification 仍為 1.6.2(docker 目錄內容改了,套件程式碼未改、未發版)。

image 基底:be ubuntu:24.04、classifier ubuntu:24.04(deadsnakes Python 3.13)、init postgres:16-alpine、fe nginx alpine,皆釘 digest。第三方:postgres:16、redis:8-alpine、chrislusf/seaweedfs:4.48,於出包腳本釘 digest。

本版 SBOM 與弱點比對結果

數字待 CI package job 的 vuln-summary.md 回填;以下為 188 以正式 build 腳本建出最終 image 的實測:

  • Python 層(pip-audit):待回填
  • OS 層(Trivy):四顆 image Critical 0/High 0/可修 0(classifier 28、be 29、fe 0、init 0,全為 Medium/Low);Grype 第二意見 Critical 0、High 0;白名單豁免 0 條(白名單只剩檔案 Agent 一條,理由與到期日見 scripts/build/vuln-allowlist.txt)
  • 本版修掉:四顆合計 233 → 57(High 8 → 0);可修 7 → 0

9. 部署順序

  1. 188 build 機:/opt/guidant-ai-be、/opt/guidant-ai-fe 跟 main;/opt/jedi-python-package 由 pipeline 拉 main(classifier 改動已在 main)。先 df -h / 與 pgrep -f 'nuitka|build_all'。
  2. pipeline 完整出包;看 package 段的弱點摘要與「第三方 image 皆為釘定版本(3 顆)」。
  3. 部署 190 e2e 驗:
  4. 上傳一份 docx 證據跑分類、匯出一份 SSP PDF、產一份摘要報告 PDF(這項在 188 沒有資料可測,要在這裡補驗),中文都正常
  5. 升級前已存在的證據檔仍開得起來(seaweedfs 3.99 → 4.48)
  6. guidantai rotate-credentials 跑一次,確認舊 redis 密碼登不進去
  7. STG(188)、POC(189):等決策者放行。
  8. 檔案 Agent:本版的 Dockerfile 與工具包改動要隨 Agent 下一版出貨(新骨架需 License Center 簽章),由 Agent 出包線處理。

10. 已知限制與 follow-up(不擋本版)

  • postgres 換 alpine(342 → 約 46):排序規則與 805 個索引,需資料庫遷移流程。
  • Agent 原生安裝版的系統庫採集:仍從 debian:11 採集,debian-security 已下架部分檔案,重抓工具包時會失敗;白名單的 krb5 豁免 2026-12-31 到期。
  • sonar-scanner 自帶 Java 21.0.9:Grype 6 條 High(Trivy 看不到),等 sonar-scanner 出新版。
  • jedi-evidence-classification 版號未升:image 同名不同內容,追溯上要看出包日期;下次套件發版時一併升。
  • 剩餘弱點每月重新 build 吃 Ubuntu 修正、追上游(pcre2、libXrender 等 7 個上游已修的 CVE)的流程未建。
  • 弱點關卡仍只擋 Critical(決策者裁維持)。

11. 相關文件

  • Notion:母卡 CM-2507、CM-2508(討論稿)、CM-2509(實作)
  • docs/features/FR-131-2610-image-vulns-to-single-digit/(證據頁 scan/2026-10-06-remaining-vulns.md、交接 handoff/FR-131-STATE.md)
  • 白名單:scripts/build/vuln-allowlist.txt