---
title: TC 修正前後對照
eyebrow: Guidant AI 資安檢視總報告 · 安全測試案例（TC）
h1: 修正前後對照
subtitle: 測試主機 190 從 1.23.1 升到 1.24.0 後，第 4 棒測出的紅逐條重跑的結果
lede: 修正前＝第 4 棒在 190（1.23.1）實跑的結果；修正後＝190 升 1.24.0（commit 1e4d2ff49）後同一套測試重跑。一列一條安全需求，只列修正前是紅（含待測）、或修正後是紅的，共 36 條：修正前紅 31 條，其中 21 條轉綠、10 條仍紅；另有 5 條修正前不紅、修正後紅。「沒轉綠的原因」分四種：修正沒做到、修正還沒裝上 190、測試本身被修正打壞、測試環境殘留。
chips:
  - { text: "轉綠 21", kind: ok }
  - { text: "仍紅 10", kind: accent }
  - { text: "新紅 5", kind: accent }
  - { text: "改判人工 0", kind: plain }
---

> 讀法見[測試案例總表](TC-00-overview.html)。審計報告（`audit-report.html`）81 條全列；這頁只看修正有沒有生效。
>
> **修正後的整體數字**：81 條中綠 65、紅 15、人工 1、未測 0。API 情境 144 條 126 綠（第二輪，序列跑）；守衛 292 條 284 綠 8 略過（8 支是刻意不掛能力點的選單，非環境問題）；部署檢查 50 項 27 綠 10 紅 13 人工。
>
> **修正前的數字從哪來**：190 上留存的 1.23.1 審計報告是用不完整的結果檔產的（29 條顯示未測），不能當基準。修正前狀態取自測試 repo `security-compliance/docs/traceability.md`（第 4 棒每條在 190 實跑的紀錄）與第 4 棒的部署檢查、守衛 JUnit。

## 一、轉綠（21 條）

| SR | 一句話 | 修正前 | 修正卡 | 修正後 |
|----|--------|--------|--------|--------|
| SR-01.5 | 安全計數不得只存易失儲存 | 紅：Redis 重啟後雙因子失敗計數歸零 | CM-2454 | 綠：守衛 6/6 |
| SR-01.7 | 機器報到比其他端點更嚴 | 紅：同一組註冊 token 可報到第二台並直接工作 | CM-2426 | 綠：第二台停在待核准、核准前心跳 403，3/3 |
| SR-02.3 | 背景工作不得用無身分連線 | 紅：AI 呼叫記錄清理排程沒宣告系統身分，靜默什麼都沒清 | CM-2428 | 綠：守衛 17/17 |
| SR-02.4 | 帶資源編號的端點先確認歸屬 | 紅：輪次讀取回 403、輪次結案與摘要報告的錯誤碼與不存在不同 | CM-2427 | 綠：11/11，非成員一律 404 且與不存在逐字相同 |
| SR-02.8 | 檔案歸屬登記，看與刪分開問 | 紅：非成員錯誤碼洩漏檔案存在；唯讀成員刪證據檔靠外鍵才擋下 | CM-2427 | 綠：5/5 |
| SR-03.1 | 對外入口只走 HTTPS | 紅：https 回應缺 HSTS | CM-2449 | 綠：部署檢查 2/3（1 項人工：要移走憑證重啟前門） |
| SR-03.4 | 對內 SSH 驗主機指紋 | 紅：agent SSH 兩處 AutoAddPolicy | CM-2453 | 綠：守衛 3/3 |
| SR-04.3 | 列表條件沒填就拒絕 | 紅：操作日誌空條件回整張表 39495 筆 | CM-2454 | 綠：2/2 |
| SR-04.4 | 交回瀏覽器的檔案由伺服器決定格式 | 紅：下載端點缺 nosniff | CM-2451 | 綠：2/2 |
| SR-04.8 | 交給外部程式的內容先看內容 | 紅：含 `<%` 的規則包上傳回 200 | CM-2452 | 綠：上傳即拒，1/1 |
| SR-05.2 | 設定回應遮密鑰、錯誤只回代碼 | 紅：名單外欄位明文回出；匯入回 psycopg 原文；寄信失敗回 500 | CM-2450、CM-2451、CM-2458 | 綠：6/6 |
| SR-05.4 | 第三方頻道訊息不帶可冒用內容 | 紅：守衛 0/4 | CM-2452 | 綠：守衛 4/4 |
| SR-06.6 | 各行程的 Redis 帳號權限最小 | 紅：三服務共用一個全權帳號，刪得了節流 key | CM-2453 | 綠：部署檢查 6/6 |
| SR-06.8 | 診斷包與備份搜不到祕密 | 紅：診斷包命中祕密 | CM-2450 | 綠：部署檢查 2/2，診斷包 0 命中 |
| SR-07.1 | 請求大小與免登入端點限速 | 紅：超大請求到得了後端、webhook 連打不限速 | CM-2449 | 綠：部署檢查 2/3（1 項人工） |
| SR-08.1 | 日誌出口遮罩 | 紅：守衛 5/6 | CM-2450 | 綠：守衛 6/6 |
| SR-08.2 | 呼叫者填目標的動作要稽核 | 紅：發動掃描與改目標都沒有稽核事件 | CM-2452 | 綠：3/3 |
| SR-08.6 | 抽取失敗的規則包不得派工 | 紅：抽取失敗的版本仍在下拉、可派出 | CM-2452、CM-2455 | 綠：3/3 |
| SR-09.7 | 外部位址掃描要額外確認 | 紅：含 8.8.8.8 不帶確認旗標照樣派工 | CM-2452 | 綠：1/1 |
| SR-10.1 | Drive 不收呼叫者給的檔案編號、scope 收窄 | 紅：守衛 1/2（scope 是完整 drive） | CM-2454 | 綠：API 4/4、守衛 1/1 |
| SR-06.5 | AI 服務位址永遠是原廠的 | 待測：租戶寫得進 `base_url` | CM-2447 | 綠：租戶寫 `base_url` 回 400，2/2 |

CM-2441（雙因子第二關不檢查第一關）是 SR-01.6 測案順手測出的洞，SR-01.6 本身修正前後都綠，不列入；修正後 `/otp-verify` 不過第一關已不能猜碼，含在 SR-01.3 的 2/2 裡。

## 二、修正後紅（15 條：仍紅 10、新紅 5）

| SR | 一句話 | 修正前 | 修正卡 | 修正後 | 沒轉綠的原因 |
|----|--------|--------|--------|--------|--------------|
| SR-03.6 | mTLS 要嘛真驗、要嘛拿掉 | 紅：控制面宣稱 mTLS 但不驗 | CM-2448 | 紅：部署檢查 1/3 | **修正還沒裝上 190**：190 的 agent 是 1.1.0（9/27 裝），README 是舊版，沒寫「控制面只靠通行證」。新版 agent 交付包裝上後重測 |
| SR-07.7 | agent 暫存有容量上限 | 未判（部署檢查略過） | CM-2453 | 紅：bucket quota=0 | **修正還沒裝上 190**：配額設定在新版 agent 交付包，190 仍是 1.1.0 |
| SR-09.2 | agent 8443 只對雲端開 | 紅：非雲端連得上、文件沒限來源 | CM-2453 | 紅：部署檢查 1/4 | **修正還沒裝上 190**（文件在新版 agent 交付包）；防火牆是主機設定，產品不能代做，要客戶照文件做 |
| SR-05.3 | 前門四個安全標頭、CSP 嚴格 | 紅：缺 CSP | CM-2449 | 紅：部署檢查 1/4 | **修正沒做到（刻意分兩段）**：CSP 目前是 Report-Only，正式擋另派（DOMPurify style→class、兩處標頭改正式），FR-126 待辦第 5 項 |
| SR-09.5 | 容器非 root、能力收窄 | 紅 | — | 紅：部署檢查 0/4 | **修正沒做到**：決策者裁最後做，未開卡 |
| SR-02.14 | 出貨版只認正式簽發站公鑰 | 綠（API 1/1；部署檢查有跑但沒掛回 SR） | CM-2454 | 紅：API 1/1、部署檢查 0/1 | **修正沒做到**：image 內建 3 把公鑰（開發 1、STG/POC 2），正式公鑰推回 FR-114.10-B。本棒補上部署檢查落點，報告才看得到這條紅 |
| SR-02.10 | AI 代查的查詢都申報權限 | 紅：專案清單小點打折 | CM-2452 | 紅：API 0/2（守衛 3/3） | **測試被修正打壞**：測試把子公司的 AI 位址指到替身，CM-2447 正確地拒收租戶寫 `base_url`，替身架不起來，4 條 AI 情境全部停在前置。產品行為未被判定 |
| SR-04.7 | 使用者的字進 AI 前與指令分開 | 綠 3/3 | — | 紅：API 0/3 | **測試被修正打壞**：同 SR-02.10（AI 替身前置 400）。修正前的綠是在「租戶還能改位址」時跑的 |
| SR-07.2 | 外部 AI 呼叫四道上限 | 綠 4/4 | — | 紅：API 0/4 | **測試被修正打壞**：同上 |
| SR-10.5 | 外部 AI 輸入與出口守門 | 紅：AI 回私鑰原樣顯示 | CM-2456 | 紅：API 0/3 | **測試被修正打壞**：同上，出口守門修正無從實測；套件守衛另驗 |
| SR-06.1 | 整合憑證加密落庫 | 紅：SMTP／物件儲存密鑰是可讀字串 | CM-2450 | 紅：API 2/3 | **測試被修正打壞**：加密落庫已綠。紅的是「只改寄件者名稱、密碼指紋不變」——斷言比對的是密文的 md5，加密後每次存檔密文都不同（Fernet 帶時間與隨機 IV）。同一輪 SR-06.3「伺服器不變、密碼留空、沿用存著的密碼登入」綠，密碼實際沒被洗掉 |
| SR-07.5 | 即時連線上限 | 紅 3 條 | CM-2449 | 紅：API 3/4 | **測試觀察不到**：連線數上限與 Origin 白名單轉綠。速率那條，190 socketio 日誌記下「每秒事件超過上限 20」斷線、200 條只回 1 條，但測試在 1.5 秒時讀 `connected` 旗標仍是 true，判紅 |
| SR-10.3 | Drive webhook 固定時間比對 | 綠 4/4 | — | 紅：API 2/4 | **測試被修正打壞**：計時情境每組打 50 次，被 CM-2449 前門 webhook 限速（每分鐘 30、突發 20）回 429。限速本身就是 SR-07.1 要的 |
| SR-05.1 | 出口依目的地跳脫 | 紅：通知信沒跳脫 | CM-2451 | 紅：API 3/4（守衛 8/8） | **測試時序**：通知信那條轉綠。syslog 那條第一輪綠、第二輪逾時（步驟限 60 秒、自己等 75 秒，轉送設定最多 30 秒才生效） |
| SR-03.3 | 可選加密的整合預設加密 | 紅：日誌轉送預設 udp 明文 | CM-2453 | 紅：API 0/1 | **測試環境殘留**：出廠預設已改 tcp＋TLS（190 DB 欄位預設實查）。190 已有一筆 udp 設定（9/30 建，SR-05.1 每輪改完還原回 udp），API 讀的是那筆，不是出廠值 |

## 三、統計

| 類別 | 條數 | SR |
|------|------|----|
| 轉綠 | 21 | 01.5、01.7、02.3、02.4、02.8、03.1、03.4、04.3、04.4、04.8、05.2、05.4、06.5、06.6、06.8、07.1、08.1、08.2、08.6、09.7、10.1 |
| 仍紅：修正還沒裝上 190 | 2 | 03.6、09.2 |
| 仍紅：修正沒做到（刻意分段、裁定最後做） | 2 | 05.3、09.5 |
| 仍紅：測試被修正打壞或觀察不到 | 4 | 02.10、10.5、06.1、07.5 |
| 仍紅：測試時序 | 1 | 05.1（通知信那條已綠） |
| 仍紅：測試環境殘留 | 1 | 03.3 |
| 新紅：修正前沒看到、修正後測得到 | 2 | 02.14（本棒補上部署檢查落點才掛回）、07.7（修正前部署檢查略過；新版 agent 未裝） |
| 新紅：測試被修正打壞 | 3 | 04.7、07.2、10.3 |
| 改判人工 | 0 | — |

扣掉測試本身的問題（打壞、觀察不到、時序、殘留共 10 條），產品面真正還沒守住的是 6 條：03.6、09.2、07.7（新版 agent 交付包未裝上 190）、05.3（CSP 正式擋另派）、09.5（裁定最後做）、02.14（正式公鑰推回 FR-114.10-B）。

修正前後整體：綠 25→65、紅 17→15、人工 10→1、未測 29→0（修正前的未測多半是舊報告的結果檔不完整，不代表當時沒測；本表的「修正前」以第 4 棒實跑紀錄為準）。

## 四、要開的卡

- **AI 替身改指平台層位址**（解 SR-02.10／04.7／07.2／10.5 共 12 條情境）：租戶層不收 `base_url` 後，替身只能指 ROOT 的位址，但那會影響 190 上所有租戶，要先裁做法（獨立測試機、或測試期間鎖整台）。
- **SR-06.1 只改別欄那條改比解密值或登入結果**：密文指紋不能再當判準；After 還原檢查用同一個判準，目前每輪誤報「還原失敗」。
- **SR-07.5 速率情境改看斷線事件**：監聽 `disconnect` 事件或比對伺服器回應數，不讀 `connected` 旗標。
- **SR-10.3 計時情境的請求量壓到前門限速以下**：或改從前門內側量。
- **SR-05.1 syslog 步驟逾時拉到 90 秒**：步驟限時短於自己的等待時間。
- **整套測試對 190 只能序列跑**：前門登入限速是每 IP 每分鐘 60、突發 30，4 個平行 worker 第一輪就有 13 條情境卡在登入 429。`cucumber.config.js` 的 `parallel: 4` 對 190 要改 1，或分散來源 IP。
- **190 裝新版 agent 交付包**後重跑部署檢查（SR-03.6／07.7／09.2）。
- **符合性矩陣改讀測試結果**：`build_sr_matrix.py` 目前只讀連線頁；另外它重產會把 h1／subtitle 改回單行舊格式，要一起改。
