---
title: 合規文件核心
eyebrow: Guidant AI 資安檢視 · 模組報告
h1: 合規文件核心（jedi-oscal-v2＋合規範本）
lede: 產品最核心的一塊——控制項、系統安全計畫、稽核計畫都在這裡產生，客戶的合規範本也在這裡管。**這塊底下 45 張資料表完全沒有客戶隔離，程式那一層是唯一的關卡**；而那一層最常見的漏法是「有人守了一半」。最要緊的一條：任何登入帳號知道編號，就能把別家公司整份系統安全計畫下載走。
---

## 這塊在產品裡做什麼

客戶買這套系統，是為了做合規稽核。而**稽核的主要文件都在這一塊產生與保存**：

::: grid2
::: {.card .plain}
#### 它平常在做什麼
1. **控制項目錄**——客戶要符合的那幾百條規定長什麼樣（原廠維護的框架，例如 CMMC）
2. **合規範本（資源庫）**——客戶自己整理好的「我們公司怎麼做到每一條」，開新專案時整份複製過去
3. **系統安全計畫**——每個專案寫「我的系統對每一條規定做了什麼」的那份文件
4. **稽核計畫**——這一輪要查哪些、誰來查

還包含這些文件的 **Word／Excel／YAML 匯入匯出**，以及原廠上傳 CMMC 官方 PDF 自動讀出控制項。
:::
::: {.card .crit}
#### 為什麼它是敏感目標
**這裡存的就是客戶的稽核成果本身。**

其他模組被攻破，外洩的是帳號、清單、設定。**這一塊被攻破，外洩或被竄改的是客戶花幾個月做出來的合規證據**——而那正是客戶買這套系統的理由。

更要緊的是：**這塊底下 45 張資料表完全沒有「這是哪家客戶的」欄位，資料庫那道「每個客戶只能看自己資料」的隔離一張都沒開。** 程式漏掉一道檢查，資料庫不會替你擋。
:::
:::

它分成方向相反的兩半，檢視時也分開查：

| | 它是什麼 | 要擔心的是什麼 |
|---|---|---|
| **我們主系統這一邊**（含合規範本那一整塊） | 決定「誰能讀、誰能改」這些文件的那部分程式 | **權限檢查有沒有做、做得對不對**——會不會別人的計畫也讀得到、別人的範本也改得動 |
| **模組本體** | 純粹的資料存取與格式轉換，**沒有任何對外入口** | 它自己不檢查任何事、全靠呼叫它的人先檢查；以及**惡意檔案**——一份動過手腳的 Word、Excel、PDF 會不會讓系統當掉 |

---

## 檢視軌跡

**檢視期間**：2026-09-21 ～ 2026-09-24｜**範圍**：244 個檔案——我們主系統這一邊 94 個、合規範本那一整塊 70 個、模組本體與主系統的文件解析器 80 個｜**共 27 輪**

> **原始技術報告**放在需求中心兩個站：主系統這一邊與合規範本在 [FR-113 站](https://guidantai-feature-doc.jedicotech.com/FR-113-2609-oscal-host-wiring-security-scan/)、模組本體在 [FR-118 站](https://guidantai-feature-doc.jedicotech.com/FR-118-2609-oscal-v2-package-security-scan/)，檔名見下表最後一欄。那裡有每一輪的完整技術細節、檔案清單與逐條推理，供需要深究或稽核抽查時查閱。

### 我們主系統這一邊（11 輪）

| 輪次 | 查什麼 | 檔數 | 覆核投票 | 結果 | 原始報告檔名 |
|---|---|---:|---|---|---|
| **O1** | 控制項實作與「你能不能看、能不能改這份計畫」的判斷核心 | 6 | 15 票全投完 | 找到 2 條中（第 11 條） | `scan-O1` |
| **O2** | 資源庫、原廠公版範本、系統安全計畫匯出成 Word | 11 | 24 票全投完 | 找到 3 條（第 5、13、18 條），**第 5 條是這塊第一條高等級發現** | `scan-O2` |
| **O3a** | Excel 上傳與確認：誰能傳、誰能看預覽、誰能按確認 | 5 | 6 票全投完 | 找到 2 條（第 2 條高、第 23 條中） | `scan-O3a` |
| **O4** | Word 上傳與解析：三個去向（寫進專案、建新範本、蓋掉既有範本） | 9 | 12 票全投完 | 找到 3 條（第 3 條高、第 19、24 條中） | `scan-O4` |
| **O5** | 系統安全計畫的六種附屬資料的增刪改查 | 15 | 15 票全投完 | **範圍內零發現、而且是有份量的零**（六組逐支守齊）；**越界撿到第 1 條** | `scan-O5` |
| **O6** | 程序書文件池與匯入比對 | 6 | ⚠️ **覆核未完整跑成** | 重現第 11 條並補齊細節；找到第 12 條 | `scan-O6` |
| **O3b** | Excel 內容怎麼被讀成系統資料 | 7 | 21 票全投完 | 找到 2 條中（第 23、25 條） | `scan-O3b` |
| **O8a** | 原廠上傳框架 PDF 的解析工作 | 6 | 12 票全投完 | 找到 1 條中（第 22 條，執行者開檔查出） | `scan-O8a` |
| **O8b** | 合規框架與版本的增刪改查 | 9 | 21 票全投完 | 找到 1 條中（第 27 條，執行者開檔查出） | `scan-O8b` |
| **O9a** | Excel 與 Word 兩條匯入線共用的那段轉換程式 | 3 | 9 票全投完 | 三條都是第 2、3 條的同位置重現，**淨新增 0** | `scan-O9a` |
| **O9b** | 整體接線、稽核階段掛鉤、人員對帳 | 17 | ⚠️ **覆核未完整跑成** | **淨新增 0**；確認權限判斷那支程式少接一個零件，但少接之後走的路**比正常更嚴格**，不用重評前面各輪 | `scan-O9b` |

### 合規範本（資源庫）那一整塊（8 輪）

| 輪次 | 查什麼 | 檔數 | 覆核投票 | 結果 | 原始報告檔名 |
|---|---|---:|---|---|---|
| **B1** | 合規範本本身的增刪改查 | 19 | 6 票全投完 | 找到 2 條中（第 5、14 條） | `scan-B1` |
| **B1-item** | 範本的稽核流程圖 | 4 | ⚠️ **只投了一半**（應投 6 票、實投 3 票） | 找到 3 條中（第 6、7、15 條） | `scan-B1-item` |
| **B2** | 範本底下三組清單：控制項預設、稽核目標預設、程序書 | 12 | 6 票全投完 | 找到 2 條中（第 16、17 條） | `scan-B2` |
| **B3** | 範本版的六類附屬資料＋範本匯出 | 15 | 39 票全投完 | **找到 12 條，歸成第 4、8、28 條**——這一塊收穫最大的一輪 | `scan-B3` |
| **B4** | 系統安全計畫匯出成 Excel 範本的三個入口 | 2 | 9 票全投完 | 找到 2 條（第 20 條中、第 31 條低），**並確認第 1 條是跨客戶** | `scan-B4` |
| **B5** | 範本控制項清單的 Excel 匯出匯入 | 3 | 6 票全投完 | 找到 1 條中（第 9 條） | `scan-B5` |
| **B6** | 產生 Excel 的底層七支程式 | 7 | 6 票全投完 | 找到 1 條中（第 21 條），把「惡意公式」整條路查到底 | `scan-B6` |
| **B1c** | 用 YAML 或 Excel 整批匯入合規範本 | 8 | 9 票全投完 | 找到 3 條（第 10 條中、第 34、35 條低） | `scan-B1c` |

### 模組本體與主系統的文件解析器（8 輪）

| 輪次 | 查什麼 | 檔數 | 覆核投票 | 結果 | 原始報告檔名 |
|---|---|---:|---|---|---|
| **V2** | 稽核計畫、稽核結果、改善計畫的資料存取 | 26 | **一個疑點都沒提** | 執行者照工作單核對出 1 條低（第 29 條）；⚠️ 執行者**沒有逐支讀完 26 個檔**，這一輪可信度最低 | `scan-V2` |
| **V1** | 系統安全計畫本體、深複製與凍結 | 21 | **一個疑點都沒提** | **資安 0 條**；非資安 1 條（第 38 條）。卡片最擔心的「凍結的計畫被事後改掉」不成立 | `scan-V1` |
| **V8** | 主系統的稽核計畫服務 | 1 | 9 票全投完 | 找到 1 條低（第 33 條）；另兩支讀取與[稽核輪次管理第 1 條](M12-compliance-audit.html)同一件事 | `scan-V8` |
| **V4b** | 原廠 CMMC 官方 PDF／Excel 解析器 | 8 | **一個疑點都沒提** | **執行者自己做惡意 PDF 實測**，查出 2 條低（第 36、37 條） | `scan-V4b` |
| **W1** | 主系統的 Word 內容抽取器 | 5 | 9 票全投完 | 併進第 26 條（四處）、另 1 條低（第 32 條）；**每條都實測重現** | `scan-W1` |
| **W2** | 主系統的 CMMC 格式轉換器 | 4 | 3 票全投完 | 併進第 26 條（兩處），實測重現 | `scan-W2` |
| **V4a** | 控制項目錄、基準線、框架 | 14 | **一個疑點都沒提** | 執行者開檔追出 1 條低（第 30 條），**並查出第 27 條要換一種查法才擋得住** | `scan-V4a` |
| **V3** | 整份文件匯入匯出 | 1 | **一個疑點都沒提** | **資安 0 條**；非資安 1 條（第 39 條） | `scan-V3` |

::: {.callout .warn}
**三輪的覆核沒有跑完整，這裡照實交代**

- **O6（程序書文件池）**：主要的檢視跑完了，但「找寫死密碼」那道補充檢查卡住 42 分鐘，當時額度將盡、手動停掉，**三人重查投票沒有跑**。統籌者改用親自開檔核對代替，三處全部屬實。所以這一輪**「找到的這幾條存在嗎」可信**，**「這 6 個檔只有這幾條嗎」不可信**。
- **O9b（整體接線）**：檢查員派出 27 位、**一票都沒收回**就因額度中止；第一次嘗試還跑了 12 小時零產出（工具已知缺陷）。這一輪淨新增 0，唯一那條與別處重複。
- **B1-item（範本流程圖）**：應投 6 票只投了 3 票就因額度停掉，**決策者裁定不補跑**。沒投到票的那條（第 6 條）由執行者開檔核對、統籌者復核屬實後登記。

**這三輪涵蓋的 27 個檔案，不能當成「查乾淨了」。**
:::

::: {.callout .ok}
**模組本體那幾輪「一個疑點都沒提」，靠的是實測，不是空手而回**

模組本體有五輪工具一條疑點都沒提出來。**其中四輪的結論來自執行者自己動手**：V4b 手做 7 種惡意 PDF 量時間與記憶體、拿正常 PDF 亂數變造 3,000 次；W1、W2 把範圍內每一條比對規則拿攻擊字串實跑；V1、V4a 逐支讀完、到開發環境唯讀查資料表。**這幾輪「找到的存在嗎」可信度高，因為有實測數字。**

**例外是 V2**：執行者只核了工作單點名的六件、沒有逐支讀完 26 個檔，還把該做的跨專案追查推回給統籌者（已由統籌者查完）。**V2 這 26 個檔的「只有這幾條嗎」可信度低。**
:::

::: {.callout .ok}
**兩個交接時的擔心，查下去不成立**

- **「惡意 XML 可以讀走伺服器上的檔案」**——模組本體沒有任何一支 XML 解析器，匯出只出 JSON，不成立。
- **「同一個人員編號出現在兩份計畫、互相串到」**——Word 與 Excel 兩條匯入路，編號全部由伺服器產生、複製時也換新，不成立。

目前**沒有任何入口讓使用者直接給一份 OSCAL 格式的文件**；日後若要開放「上傳 OSCAL JSON」或「匯出成 OSCAL JSON」，**開放之前必須先補守門**——模組本體照單全收呼叫者給的內容。
:::

---

## 問題一覽

**排序按風險，同風險的同一類排在一起。**「出事會怎樣」那欄講的是**業務影響**——誰受影響、損失什麼，不是技術現象。

| # | 問題 | 風險 | 分類 | 出事會怎樣（誰受影響） | 怎麼修 | 狀態 |
|---|---|---|---|---|---|---|
| **1** | 🔴 **任何登入帳號知道一份系統安全計畫的編號，就能把它整份下載成 Excel——而且跨客戶** | 🟠 高 | 只驗登入、不檢查歸屬 | **等於把另一家公司的整份稽核底稿端走**：人員姓名、email、電話、地址，設備與 IP、MAC、作業系統，繼承的授權，每一條控制項的做法。只要角色帶「看資源庫」權限，**不必是那個專案的成員**；計畫編號從別的功能回應裡就拿得到。一個請求就結束 | 照隔壁「匯出」那支已經寫對的做法，在服務一開頭檢查「你是這份計畫的參與者」。同一支服務裡「從範本下載」那支也順手補上程式層檢查 | ✅ **已修**（FR-114 CM-2188，commit `82618a297`，1.21.0 出貨） |
| **2** | **合規資源庫用 Excel「蓋掉一份既有範本」，從頭到尾不問你是誰** | 🟠 高 | 只驗登入、不檢查歸屬 | **任何登入帳號（連唯讀的稽核員都算）拿一個範本編號，就能把別家公司或原廠公版範本整份清空重寫**；之後每個用這份範本開專案的客戶，都複製到被改過的內容。同一條路的另外兩個去向（寫進專案、建新範本）都有檢查 | 上傳與確認**兩處都要補**：要求範本修改權限＋確認範本是自己公司的、原廠公版直接拒絕。與第 3、5 條是同一個缺口的三個入口，**一起修** | ✅ **已修**（FR-114 CM-2178，commit `abf1cf8a4`；前半由 CM-2040 `60015232f`，1.21.0 出貨） |
| **3** | **同一件事的 Word 版**：匯入 Word 三個去向，唯獨「蓋掉既有範本」只查範本存不存在 | 🟠 高 | 只驗登入、不檢查歸屬 | 後果同第 2 條。**證據更強**：同一個判斷式裡，建新範本那條旁邊還有十幾行註解解釋為什麼要這樣守，覆寫那條只有一行「查存在」。確認步驟還允許使用者**臨時換一個要覆寫的目標** | 補同一道門＋驗歸屬；**確認時重新檢查、拿掉「確認時可換目標」這個設計**。與第 2、5 條一起修 | ✅ **已修**（FR-114 CM-2178，commit `abf1cf8a4`，1.21.0 出貨） |
| **4** | 範本裡的人員名單、設備清單、系統元件、繼承授權與系統特性，**任何登入帳號拿一個範本編號就讀得到，而且跨公司** | 🟡 中 | 只驗登入、不檢查歸屬 | 外洩的是現成的踩點資料：人員的姓名、email、電話、地址；設備的資產編號、IP、主機名稱；系統開放的通訊協定與連接埠；公司向哪些外部供應商繼承了哪些控制。**原廠公版與母公司分享下來的範本，別家公司也讀得到**。同一支檔案裡的新增、修改、刪除都有權限檢查，**只有讀取漏掉** | 五個讀取入口各補一行「必須有看範本的權限」，一張卡一起補 | ✅ **已修**（FR-114 CM-2186，commit `aafaa070d`，1.21.0 出貨） |
| **5** | **子公司的管理員可以把母公司分享下來、或原廠公版範本的「適用控制項」清單整個改掉甚至清空**，底下每條「我們公司怎麼做到」的說明一併刪除 | 🟡 中 | 只驗登入、不檢查歸屬 | 之後每個用這份範本開專案的人，**以為在稽核範圍內的控制項其實沒被評估**。被害方不會收到通知、畫面上沒有錯誤。同一支程式隔四行，改「分享範圍」那條路有檢查歸屬，改「控制項清單」那條路沒有。**評中不評高**：要先是某家公司的管理員，而且只打得到有上下層分享關係、或原廠公版的範本 | 在任何寫入之前先比對「這份範本是不是你公司的」——把現有那道檢查從「只在改分享範圍時」搬到「只要有寫入就檢查」 | ✅ **已修**（FR-114 CM-2178，commit `abf1cf8a4`；CM-2040 `60015232f`，1.21.0 出貨） |
| **6** | 改範本流程圖時，只有順便改「分享設定」才會檢查範本是不是自己公司的 | 🟡 中 | 只驗登入、不檢查歸屬 | 有範本修改權限的人，不送分享設定那個欄位，就能**改掉原廠公版或母公司範本的稽核流程**（一次稽核走哪些步驟、每步誰負責）。跨不跨公司兩位執行者推論不一致、都沒實測，暫以同一家公司內計 | 把歸屬檢查移到那個判斷式外面，方法一進來就先比對 | ✅ **已修**（FR-114 CM-2178，commit `abf1cf8a4`，1.21.0 出貨） |
| **7** | 刪或改範本子項時，檢查的是網址上那個子項、動手改的是使用者另外送上來的那份範本 | 🟡 中 | 只驗登入、不檢查歸屬 | 入口的權限只問「你能不能做這個動作」、不看要動哪一份範本。**可以造成「刪掉的子項」與「流程圖上被拿掉的方塊」屬於不同範本**，資料悄悄對不上、事後很難查 | 兩支方法開頭先用網址上的子項找出它所屬的範本，拒絕另外送上來的範本編號，再比對歸屬 | ✅ **已修**（FR-114 CM-2178，commit `abf1cf8a4`，1.21.0 出貨） |
| **8** | 範本底下六類附屬資料（人員、元件、設備、繼承授權、系統特性、設備對照）的新增修改刪除，一支都不問範本是不是你家的 | 🟡 中 | 只驗登入、不檢查歸屬 | 子公司的管理員可以改掉原廠公版或母公司範本裡的這六類資料，**之後每個依這份範本開的專案都繼承被改過的基準**。最快的是系統特性（一次請求整份蓋掉），最隱蔽的是繼承授權（刪掉後相關連結悄悄斷掉） | 六支服務解出範本後各加一行歸屬檢查——**六支要一起補，補五支等於沒補** | ✅ **已修**（FR-114 CM-2187，commit `3f15886bb`，1.21.0 出貨） |
| **9** | 用 Excel 批次存檔範本的控制項清單，只查範本存不存在、不查是不是你公司的 | 🟡 中 | 只驗登入、不檢查歸屬 | 有建立範本權限的人，可以用 Excel 改掉原廠公版或分享範本的控制項清單 | 存檔前補一行歸屬檢查；同一條解析路徑上的檢核與兩支下載一起補 | ✅ **已修**（FR-114 CM-2187，commit `3f15886bb`，1.21.0 出貨） |
| **10** | **只被授權「建立範本」的人，走 Excel 整批匯入就能把既有範本整份改掉** | 🟡 中 | 只驗登入、不檢查歸屬 | 同一件事，畫面上一條條改要「修改」權限，走匯入只要「建立」權限——**兩個入口、兩套門**。範圍是同一家公司內 | **已裁定：只有建立權限不能覆蓋既有範本**——匯入走「覆蓋」時多查一次修改權限 | ✅ **已修**（FR-114 CM-2178，commit `abf1cf8a4`，1.21.0 出貨） |
| **11** | 刪除控制項底下的佐證文件、刪除程序書文件庫的文件時，檢查的是「你管不管網址上那份計畫」，刪的卻是「你另外給的那個文件編號」 | 🟡 中 | 只驗登入、不檢查歸屬 | **任何人自己開一個專案（自動是負責人），就能刪掉別的專案、別家公司的佐證文件**；文件庫那條還會連帶刪掉所有掛載關聯、可能把實體檔一起永久銷毀。被害者只看到文件無聲消失，紀錄上查不到是誰。**凍結的稽核快照也擋不住**（檢查的是網址上那份計畫） | 刪除前確認文件屬於這份計畫；模組本體那支刪除只認編號，**要一起改** | ✅ **已修**（FR-114 CM-2041，commit `15d4efd3c`，1.21.0 出貨） |
| **12** | 可以把別人的程序書掛到自己的控制項上，再從回應裡讀到檔案編號去下載 | 🟡 中 | 只驗登入、不檢查歸屬 | 「知道文件編號 → 掛到自己的控制項 → 讀到檔案編號 → 下載」，**A 專案的機密程序書被 B 專案的人拿走**。跨公司被檔案表的隔離擋住，同一家公司內跨專案沒擋 | 換算文件編號時限定「屬於這份計畫的文件庫」；要改模組本體，兩支掛載方法一起改。與第 11 條同一張卡 | ✅ **已修**（FR-114 CM-2173，套件 commit `5170e507`／BE commit `c4b6bdb16`，1.21.0 出貨） |
| **13** | 建立資源庫的入口只驗有沒有登入、沒有權限檢查 | 🟡 中 | 只驗登入、不檢查歸屬 | 公司內任何角色（含唯讀帳號）都能建範本庫；**每建一次就複製一整套控制項目錄**，又沒有用量上限，重複呼叫就能用很小的代價把資料庫灌大。不跨客戶 | 補上與隔壁同類入口一樣的權限檢查。與第 30 條同一張卡 | ✅ **已修**（FR-114 CM-2179，commit `94275d72f`；能力點 CM-2040 `60015232f`，1.21.0 出貨） |
| **14** | 沒被授權看合規範本的員工（選單都看不到），直接打網址就讀走全公司範本清單與每一份的完整內容 | 🟡 中 | 只驗登入、不檢查歸屬 | 同一支檔案裡新增、修改、刪除、複製都有權限檢查，只有兩支讀取漏掉——**不是刻意設計，是漏掉**。原廠公版與母公司分享的範本跨公司也讀得到 | 兩支讀取補「必須有看範本的權限」。⚠️ 補之前先確認：「建立專案」畫面的下拉選單也用這支，要確認有沒有角色「該能建專案、但不該看資源庫」 | ✅ **已修**（FR-114 CM-2186，commit `aafaa070d`，範本下拉依裁定放寬為「看範本或建專案」，1.21.0 出貨） |
| **15** | 範本的稽核流程圖任何登入帳號都讀得到 | 🟡 中 | 只驗登入、不檢查歸屬 | 讀走一次稽核要走哪些步驟、每步誰負責、順序是什麼；同一支檔案的新增、修改、刪除都要權限 | 補「必須有看範本的權限」；先確認這個權限點存在、現有角色拿得到，否則所有人都會看不到（症狀是永遠被拒、畫面沒有錯誤訊息） | ✅ **已修**（FR-114 CM-2186，commit `aafaa070d`，1.21.0 出貨） |
| **16** | 範本掛了哪些程序書任何登入帳號都列得出來，清單附檔案編號、拿去就能下載整份 | 🟡 中 | 只驗登入、不檢查歸屬 | 讀到清單約等於拿到程序書本身——檔案下載那支只認編號 | 補「必須有看範本的權限」；「檔案下載要不要檢查擁有者」影響全系統，另開評估 | 🟡 **部分修**（FR-114 CM-2186，commit `aafaa070d`：讀取入口已補權限；「檔案下載要不要檢查擁有者」另評估，檔案歸屬由 CM-2168 補八類，1.21.0 出貨） |
| **17** | 範本的「稽核目標預設內容」任何登入帳號都讀得到 | 🟡 中 | 只驗登入、不檢查歸屬 | 讀走每條稽核目標的完成狀態、實作說明、備註；同一支檔案的修改、刪除都要權限，隔壁做同一件事的檔案四個入口全掛齊——**是漏掉不是設計** | 兩支讀取補「必須有看範本的權限」 | ✅ **已修**（FR-114 CM-2186，commit `aafaa070d`，1.21.0 出貨） |
| **18** | 匯出 Word 時，使用者填的文字沒有當成「純文字」處理就塞進範本 | 🟡 中 | 外部送什麼就收什麼 | 能編輯計畫文字的人，可以在**要交給稽核方的正式文件裡**插入稽核員沒寫過的段落，或藏一段叫對方 Word 去抓外部內容的指令。**匯出的文件內容能被動手腳，等於證據本身不可信** | 產生 Word 時打開「一律當文字處理」的設定（套件預設是關的，要自己開） | ✅ **已修**（FR-114 CM-2055，commit `f85a82edb`，1.21.0 出貨） |
| **19** | 匯出控制項現況的 Excel 時，使用者寫的描述如果以 `=` 開頭會被寫成公式 | 🟡 中 | 外部送什麼就收什麼 | 複核的人打開匯出檔、按下「啟用內容」，那段指令就在**他自己的電腦上**執行——我們的防護管不到那台電腦 | 輸出前把開頭的公式字元標成純文字；沿用既有那支共用的處理函式，不要再寫一份 | ✅ **已修**（FR-114 CM-2055，commit `f85a82edb`，1.21.0 出貨） |
| **20** | 上傳時塞進去的惡意公式，會在別人下載範本 Excel 打開時執行 | 🟡 中 | 外部送什麼就收什麼 | 從資料進系統到做成 Excel，**六個關卡可以擋、實際擋了零個**；而且產生的 Excel 設定成「打開時重新計算」 | 改用共用套件新做好的「標成純文字、內容一字不改」寫法，五處六行逐一列成驗收項；**排在那支共用函式發版之後** | ✅ **已修**（FR-114 CM-2189，commit `895db0ef8`，1.21.0 出貨） |
| **21** | **任何登入帳號改自己的暱稱，就能在全公司下載的每一份範本裡埋一段公式** | 🟡 中 | 外部送什麼就收什麼 | 門檻比第 20 條低得多：暱稱改成公式，之後公司裡任何人下載任何一份範本（連空白範本）都帶著它；**顧問帶去客戶那裡打開，公式就在他電腦上跑** | 與第 20 條同一批檔案一次改完 | ✅ **已修**（FR-114 CM-2189，commit `895db0ef8`，1.21.0 出貨） |
| **22** | 原廠上傳框架 PDF 解析失敗時，把程式出錯的原始訊息整段存起來、再回給前端 | 🟡 中 | 回應夾帶不該送的欄位 | 攻擊者不必猜伺服器裝在哪、用哪一版套件，**餵一份壞 PDF 系統就自己說出來**；寫資料庫失敗時，連資料庫語句都會帶上。要先是平台管理員，所以評中 | 存進資料庫與回給前端的只放固定錯誤碼與白話訊息，原文只進伺服器日誌；**連同寫資料庫那一段一起包住**。與第 32 條同一張卡 | ✅ **已修**（FR-114 CM-2183，commit `c33f7e828`，1.21.0 出貨） |
| **23** | 合規資源庫與專案計畫的 Excel 匯入，只量上傳檔多大、不量解開後多大（「試算表炸彈」） | 🟡 中 | 資源耗盡 | 任何登入帳號傳一份 2MB、解開好幾 GB 的檔，**處理程序記憶體爆掉被砍，同一台上其他人的請求一起失敗**；每分鐘送幾次就持續不可用 | 解析前先檢查解開後總大小與膨脹倍率；改成一列一列讀（不影響功能）。**與第 24 條、[稽核輪次管理](M12-compliance-audit.html)第 2 條同病，四個入口一張卡** | ✅ **已修**（FR-114 CM-2181，commit `48638cbdb`／套件 `2cb9d2cd`；同型第五入口（任務匯入）見[稽核流程](M06-flow-engine.html)第 23 條，已由 CM-2203 修好，1.21.0 出貨） |
| **24** | 專案計畫的 Word 匯入同樣只量上傳檔多大 | 🟡 中 | 資源耗盡 | 實測：一份 0.32MB 的 Word，打開吃掉 1.9GB 記憶體；而且一份上傳會被完整打開三次 | 同第 23 條；檢查要放在第一次打開之前 | ✅ **已修**（FR-114 CM-2181，commit `48638cbdb`／套件 `2cb9d2cd`，1.21.0 出貨） |
| **25** | Excel「說明」頁那一格填一百萬個數字，檢查版本號的比對就卡住 | 🟡 中 | 資源耗盡 | 一個請求佔住一條處理程序到 120 秒逾時，**四個請求讓整個系統沒回應**，任何登入帳號都能做。同一件事系統裡寫了兩份、一份寫對一份寫錯 | 刪掉寫錯的那份、改用已經寫對的那支 | ✅ **已修**（FR-114 CM-2181，commit `48638cbdb`，1.21.0 出貨） |
| **26** | 一份幾 KB 的特製 Word，讓系統安全計畫匯入解析卡到逾時 | 🟡 中 | 資源耗盡 | 解析路上六個地方遇到刻意做壞的內容會越跑越慢（例：3,200 個空白 66 秒、2KB 三千個空段落 96 秒），**四個請求讓整個產品對所有客戶停擺**。能匯入計畫的帳號都能做；第 3 條修好之後門檻升一級 | 解析前先限制每段長度、段落數與表格欄數；改寫四條比對規則與兩處重複走訪。**六處同一張卡，驗收要用同一份惡意檔從上傳整條跑一次** | ✅ **已修**（FR-114 CM-2182，commit `9edcf4de4`，1.21.0 出貨） |
| **27** | 原廠平台管理員刪掉一整個框架或版本時，後端不檢查還有沒有客戶的資源庫在用 | 🟡 中 | 要先做產品決策 | 資源庫上記的版本變成指向不存在的東西：列表的框架名稱空掉、用 Word 更新既有資源庫時找不到目錄。**客戶自己的控制項不會少**（用的是各自複製的副本）。要先是平台管理員，屬「誤操作釀災」 | **已裁定：刪版本、編輯公版目錄、匯入覆蓋三處一起改成「有任何客戶資源庫引用這個版本就拒絕」**——業界慣例是已經被引用的版本不硬刪 | ✅ **已修**（FR-114 CM-2180，commit `7262b74c8`，1.21.0 出貨） |
| **28** | 範本的「設備／資訊系統對照」清單任何登入帳號都讀得到，還附了真實資產主檔的內部編號 | ⚪ 低 | 只驗登入、不檢查歸屬 | 比第 4 條多一層：帶上資產主檔裡真實紀錄的名稱與編號。三位檢查員投中、低、低，理由是外洩內容較有限、且要範本先掛過這類資料 | 補「必須有看範本的權限」，與第 4 條同一張卡 | ✅ **已修**（FR-114 CM-2186，commit `aafaa070d`，1.21.0 出貨） |
| **29** | 把稽核「判定」接到「風險」上時，模組本體不檢查兩者是不是同一份稽核結果 | ⚪ 低 | 只驗登入、不檢查歸屬 | **今天打不到**：唯一呼叫它的地方有先檢查。它是地雷——下一個呼叫它的程式只要漏一步，就能把 A 份稽核結果的判定接到 B 份的風險上 | 守在模組本體那支方法的開頭，逐一比對；呼叫端現有那道留著 | ✅ **已修**（FR-114 CM-2184，套件 commit `ae5ffff5`，1.21.0 出貨） |
| **30** | 建資源庫時不看框架版本「發佈了沒」，原廠還在編的草稿版本也能被拿去複製 | ⚪ 低 | 只驗登入、不檢查歸屬 | 任何登入帳號拿到還沒公開的控制項內容，並用它建資源庫、開專案；之後原廠改草稿，客戶那份不會跟著改。不跨客戶、不改公版 | 取到版本後補「必須已發佈」。與第 13 條同一張卡 | ✅ **已修**（FR-114 CM-2179，commit `94275d72f`，1.21.0 出貨） |
| **31** | 從框架版本下載「空白範本」，裡面附了全公司的使用者 email、全部設備名稱與 IP、全部資訊系統清單 | ⚪ 低 | 回應夾帶不該送的欄位 | 只該看範本的人，拿到全公司資產與人員清冊。不跨客戶 | 下拉選單的資料依呼叫者實際權限縮減，不要一律給全公司範圍 | 🟡 **部分修**（FR-114 CM-2188，commit `7d62545c3`：決策者選 A，只依權限拿掉 email 與設備 IP，顯示文字保留，1.21.0 出貨） |
| **32** | Word 打不開時，錯誤訊息把伺服器暫存檔的完整路徑回給前端 | ⚪ 低 | 回應夾帶不該送的欄位 | 實測：上傳一個壞檔，前端看到伺服器暫存目錄的路徑。洩漏的只是暫存路徑 | 同第 22 條，併同一張卡 | ✅ **已修**（FR-114 CM-2183，commit `c33f7e828`，1.21.0 出貨） |
| **33** | 「重新產生稽核計畫草稿」不看輪次階段 | ⚪ 低 | 外部送什麼就收什麼 | 稽核中甚至已結案的輪次，稽核員或管理者按一下，**輪次就改指向一份空白的新計畫**；原本那份還在、但跟輪次脫鉤。同一支檔案其他四個改計畫的入口都有檢查階段 | **已裁定：拆掉這個網址**（前端沒有地方在用），連同另外三支退役的一起拆 | 🗑️ **已拆除**（FR-114 CM-2177，commit `1e0879815`） |
| **34** | 有建立範本權限的管理員上傳一個幾 KB 的特製 YAML，伺服器展開時算到當掉 | ⚪ 低 | 資源耗盡 | 一個請求吃滿處理程序到逾時；連送幾個，所有公司的使用者同時連不上。要先有管理員帳號、後果是暫停服務不是外洩 | 拒絕 YAML 裡的「引用前面某一段」、加層數與總數上限 | ✅ **已修**（FR-114 CM-2190，commit `374392065`；錯誤碼改號 `3d97fcaf9`，1.21.0 出貨） |
| **35** | Excel 匯入檢核時送一格很長的怪字串，一個請求佔住處理程序兩分鐘 | ⚪ 低 | 資源耗盡 | 四個請求卡住全部處理程序，後果同第 34 條 | 欄位超過合理長度直接判不合格、比對規則加上限。與第 25 條同一輪看 | ✅ **已修**（FR-114 CM-2181，commit `48638cbdb`，1.21.0 出貨） |
| **36** | 原廠上傳一份頁數極多的 CMMC PDF，解析時記憶體被撐爆 | ⚪ 低 | 資源耗盡 | 實測：3MB、兩萬頁的 PDF 吃掉 3.4GB。要先是平台管理員 | 開檔後先擋總頁數；每頁讀完就關（實測同樣 5,000 頁記憶體 534→128MB）。與第 37 條同一張卡 | ✅ **已修**（FR-114 CM-2184，套件 commit `ae5ffff5`，1.21.0 出貨） |
| **37** | PDF 裡塞一行超長的字，判斷「這行是不是目錄」的比對卡住工作程序 | ⚪ 低 | 資源耗盡 | 實測：0.04MB、五頁的 PDF 跑 52 秒，約十頁就超過逾時 | 太長的行直接當內文、不跑比對 | ✅ **已修**（FR-114 CM-2184，套件 commit `ae5ffff5`，1.21.0 出貨） |
| **40** | 「人員對帳」查資料時收了公司編號卻沒拿來用，四處查詢都一樣 | ⚪ 低 | 客戶資料沒隔開 | 平台管理員身分下跑人員對帳時，**會拿所有客戶的人員資料來比對**。比對結果只寫進附註欄、不影響任何權限；同一套功能的「組織對帳」就有正確用上公司編號 | 比照組織對帳，四處查詢都加上公司條件 | ✅ **已修，1.21.0 出貨**（8-A，CM-2211，commit `fe928859f`）。主系統掃描查出 |
| **41** | 系統安全計畫的 Word／Excel 兩張「解析工作單」表，資料庫的新增規則寫成「一律允許」 | ⚪ 低 | 客戶資料沒隔開 | **今天沒有實際風險**——程式寫入時一律用登入身分的公司，沒有別的路繞過。但資料庫那道最後的牆在這裡等於沒設，哪天多一條寫入路徑，就能寫進別家公司名下 | 照另外兩張同類表已修好的標準寫法補一支資料庫調整；新客戶安裝用的資料庫結構要一起重產 | ✅ **已修，1.21.0 出貨**（8-E，CM-2215，commit `822216b6c`）。主系統掃描查出 |

### 另外兩條：不是資安問題，但會讓稽核文件出錯

| # | 問題 | 影響 | 怎麼修 | 狀態 |
|---|---|---|---|---|
| **38** | 複製系統安全計畫時，三種「用編號互相指向同一份計畫裡另一筆資料」的欄位沒換成新編號 | 開專案時從範本複製、開始稽核時凍結成快照，都走這支。開發環境實查：凍結快照裡 47 筆繼承授權的「提供者」**47 筆全指到別份計畫的人員**。畫面上只會顯示空白、不會讀到別份內容，所以不算資安；但**凍結快照是稽核證據，基準裡的「提供者」對不上任何人** | **已裁定：修程式、舊快照不動**（凍結的證據不事後改）。修在模組本體，與第 39 條同一張卡、同一次發版 | ✅ **已修**（FR-114 CM-2185，套件 commit `1d3a59c8`，舊快照依裁定不動，1.21.0 出貨） |
| **39** | 同一份計畫「再匯入一次」時，人員、實作項目等每次換新編號，外部服務與設備每次多一份 | 專案負責人把同一份 Word 或 Excel 再匯入一次（正常操作），指向人員的欄位就斷掉、外部服務與設備每匯一次多一份。開發環境 604 筆外部服務有 17 筆找不到提供者（混著第 38 條的效果）。⚠️ 開發環境沒有再匯入的紀錄，**這是讀程式推論，修的人要實跑兩次確認** | 修在模組本體，與第 38 條同一張卡 | ✅ **已修**（FR-114 CM-2185，套件 commit `1d3a59c8`，1.21.0 出貨） |

---

::: {.callout .plain}
**下面只展開需要你自己判斷、或容易被誤解的幾條。** 其餘的修法明確，看上面表格的「怎麼修」那一欄就夠了——**沒有展開不代表沒查，也不代表不重要。**
:::

## 第 1 條：一個請求，端走別家公司整份稽核底稿 {#ssp-export}

**在哪個畫面發生**：「合規範本 → 從某份系統安全計畫匯出 Excel 範本」。本意是把一份寫好的計畫倒出來當範本用。

**問題是什麼**：這個入口掛的檢查問的是「**你有沒有看資源庫的權限**」，不是「**這份計畫是不是你的**」——兩件完全不同的事被當成同一件。後面的程式拿到編號就直接查、直接讀，整支沒有一個字在檢查歸屬。

| 下載下來的 Excel 裡有什麼 | |
|---|---|
| 系統本身 | 系統名稱、敏感度分級、授權邊界 |
| **人** | 每一位登記人員的**姓名、email、電話、通訊地址** |
| **設備** | 主機名稱、**IP、MAC**、作業系統、資產編號 |
| **做法** | **每一條控制項的實施狀況與完整敘述**、附帶文件的檔名 |

**為什麼跨客戶也擋不住**：這些資料所在的表**沒有任何「這是哪家客戶的」欄位**，資料庫那道隔離一張都沒開。程式這一關沒擋、資料庫那一關也擋不住，兩關皆空。

**為什麼從中升到高**：工具與三位檢查員一致評中；統籌者驗收時裁定升高——①外洩的是整份文件、不是單一欄位；②跨公司；③一個請求即可、門檻只到「有帳號」。

**有反例證明這裡本來就該守**：做同一件事的隔壁入口「匯出系統安全計畫」有檢查「你是這份計畫的參與者」。修法就是照它抄。

::: {.callout .warn}
**這條說明一個盤點方法不可靠**

只數「25 個入口有 15 個掛了權限檢查」，合規範本那一塊看起來守門完整。**這條證明「掛了檢查」不等於「檢查對了」：它掛的是錯的那一種。** 那一塊單獨查了八輪，每一輪都找到同一個病的不同長相（見下一節）。
:::

## 第 2、3、5 條：同一個缺口，三個入口 {#three-doors}

合規範本的「寫入」被三條不同的路各打穿一次：

| 第幾條 | 入口 | 守了什麼、漏了什麼 |
|---|---|---|
| **第 5 條** | 編輯範本的控制項清單 | 同一支程式隔四行：改分享範圍有檢查歸屬，改控制項清單沒有 |
| **第 2 條** | Excel 匯入覆寫範本 | 三個去向，兩個有檢查，覆寫既有範本那個一行都沒有 |
| **第 3 條** | Word 匯入覆寫範本 | 同一個判斷式三條路，建新範本那條旁邊有十幾行註解解釋為什麼要守，覆寫那條只有「查存在」 |

::: {.callout .crit}
**三條要一起修——只補一條，另外兩條照樣進得去**

三條寫的是同一批資料、造成的破壞相同（範本被清空、底下每條控制項的做法連鎖刪除、原廠公版也打得到），而底下那批資料表沒有資料庫隔離，**程式這一層是唯一關卡**。

**開卡寫成同一張，驗收三個入口各打一次。**

為什麼第 2、3 條評高、第 5 條評中：第 5 條要先是某家公司的管理員，而且只打得到有上下層分享關係、或原廠公版的範本；第 2、3 條**任何登入帳號**都打得到。
:::

## 「有人守了一半」：這塊一共出現八種長相 {#half-guarded}

這塊最值得記住的不是任何單獨一條，而是**同一個病反覆以不同形狀出現**——有人把一條路守得很仔細、另一條路整個沒守，而守得仔細的那一半正好證明開發者知道該守：

| 長相 | 例子 |
|---|---|
| **同一支程式隔幾行，一守一不守** | 第 5 條（改分享範圍有查、改控制項清單沒查）、第 6 條（檢查被包在一個判斷式裡） |
| **兄弟入口，一個掛一個沒掛** | 第 17 條（隔壁那支檔案四個入口全掛齊） |
| **同一支檔案，寫入都守、讀取漏掉** | 第 4、14、15、16 條 |
| **從別處複製過來，只補了寫那一半** | 第 4、8 條（六組一起漏） |
| **三個入口，只查過其中一個** | 第 1 條 |
| **六支方法，只有一支真的漏** | 第 9 條 |
| **同一件事兩個入口、兩套門** | 第 10 條（畫面上改要修改權限，匯入只要建立權限） |
| **檢查甲、動手改乙** | 第 7、11 條（檢查網址上那個編號，動手改的是另外送來的編號） |

::: {.callout .warn}
**所以盤點一塊安不安全，不能數「有幾支掛了守門」**

要看的是「掛的那道問的問題對不對」。這個教訓在這一塊出現了三次（第 1 條掛的是錯的那道檢查、第 27 條權限有守但少了另一道檢查、八輪各自的長相），**往後任何補權限的驗收，要把讀與寫分開數、把每個入口的檔名與行號逐一列成驗收項。**
:::

## 第 19～21 條：惡意公式，六個關卡擋了零個 {#formula}

**在哪個畫面發生**：任何人下載一份範本或匯出檔、用 Excel 打開。

資料從進系統到變成 Excel，路上有六個地方可以擋（上傳解析、存檔、讀出、組下拉選單、寫儲存格、檔案設定），**實際擋了零個**；產生的檔案還設定成「打開時重新計算」。

| 誰能埋 | 怎麼埋 | 第幾條 |
|---|---|---|
| 能編輯某份計畫內容的人 | 在內容裡填公式開頭的文字 | 第 20 條 |
| **任何登入帳號** | **把自己的暱稱改成公式**——之後全公司下載的每份範本都帶著它 | 第 21 條 |
| 能寫控制項現況的人 | 在描述裡填公式，複核的人匯出打開 | 第 19 條 |

**執行發生在下載者自己的電腦上，我們的防護管不到。** 修法不是刪字元，而是把儲存格明確標成「純文字」、內容一字不改——這份 Excel 會被上傳回來，用加單引號的舊做法會每來回一趟多一撇。

## 資源耗盡：幾 KB 的檔就能讓產品停擺 {#dos}

這塊有十條「一個請求就佔住處理程序」的問題（第 23～26、34～37 條，加上[稽核輪次管理](M12-compliance-audit.html)第 2、3、8 條）。**多數是執行者自己做惡意檔實測出來的**，不是工具報的：

| 輸入 | 實測結果 | 第幾條 |
|---|---|---|
| 0.32MB 的 Word（300 段各 1MB） | 開檔吃掉 1.9GB 記憶體 | 第 24 條 |
| 幾 KB 的特製 Word | 3,200 個空白 66 秒；三千個空段落 96 秒 | 第 26 條 |
| 3MB、兩萬頁的 PDF | 吃掉 3.4GB 記憶體 | 第 36 條 |
| 0.04MB、五頁、每頁一行四萬字的 PDF | 52 秒 | 第 37 條 |

**為什麼幾個請求就夠**：落地版預設只有 4 條處理程序，逾時是 120 秒，而且解析是在請求當下同步做完的。**四個請求同時卡住，所有客戶一起連不上。**

::: {.callout .ok}
**壓縮炸彈要一次修四個入口**

「只量上傳檔大小、不量解開後多大」這個病有四個入口、分在兩處程式：專案計畫的 Excel、Word（第 23、24 條，在我們主系統），稽核計畫的 Word、稽核結果的 Excel（[稽核輪次管理](M12-compliance-audit.html)第 2、3 條，在另一個模組共用的讀檔程式）。**同一張卡、同一支檢查函式，四個入口都要驗。**
:::

## 第 27 條：「還有沒有人在用」要查對地方 {#framework-delete}

**在哪個畫面發生**：原廠平台管理員在「框架管理」刪掉一整個合規框架、或其中一個版本。

**容易想錯的修法**：編輯框架那邊已經有一道「還有沒有人在用」的檢查，直覺是刪除時照叫它。**但那道檢查在正常流程裡永遠不會擋**——它查的是「有沒有東西直接指向原廠的目錄」，而建資源庫一律先複製一份、再指向副本，開發環境 591 筆引用裡 0 筆指向原廠。照叫等於沒補，編輯那邊的同一道檢查其實也從來沒擋過。

**後果**：刪框架只會連帶刪掉版本，**客戶自己的控制項一筆不少**（都是複製出來的副本）；壞掉的是資源庫上記的版本變成指向不存在的東西——列表的框架名稱空掉、用 Word 更新既有資源庫時找不到目錄。

**已裁定**：刪版本、編輯原廠目錄、匯入覆蓋三處，一起改成查「有沒有任何客戶的資源庫引用這個版本」，有就拒絕。理由是保護稽核依據可以追溯——已經被引用的版本不硬刪。

---

## 🔴 這一塊的另一個待辦：SaaS 版的最後一道牆 {#saas-wall}

這件事不是檢視查出來的，是[客戶資料隔離那次專項盤點](M20-tenant-isolation.html)盤出來的，缺口正好落在這一塊——而上面第 1、4 條之所以會跨客戶，就是因為這道牆不存在。

**問題是什麼**：確保「A 客戶看不到 B 客戶的東西」的最後一道防線，在合規文件這一整塊沒有砌起來。實際測過——用一把指向不存在客戶的鑰匙去查，專案看到 **0 筆**（牆擋住了），但**系統安全計畫看到 639 筆、稽核發現看到 525 筆**。

| | |
|---|---|
| 完全沒有那道牆的資料表 | **102 張**（其中 101 張連「這是哪家客戶的」欄位都沒有） |
| 確認要補的 | **53 張**——合規文件核心 45 張、主系統零散 8 張 |
| 真正需要設計判斷的 | **4 個接點**，其中合規資源庫最難（目前沒有任何欄位連到客戶或專案，要先決定「主人是誰」） |
| 工作量 | 一支資料庫調整、一到兩天，外加驗證「開了牆會不會把正在用的資料藏起來」 |

::: {.callout .decided}
**兩件事要講清楚**

**一、落地版不受這道牆影響。** 一家客戶裝一套、整座資料庫就是那家客戶的，「看到別家」在落地版不成立——**但同一套系統裡的母公司與子公司之間仍然成立**（第 4、5、8 條）。這道牆的定位是「SaaS 版上線前必做」。

**二、順序已經定了，不能對調**：**① 先修程式面的守門缺口 → ② 測試一版 → ③ 再開這道牆。** 先開牆容易把正在用的資料擋住藏起來，而那種故障在畫面上只看起來像「資料不見了」，很難查。
:::

---

## 已裁定：專案的系統安全計畫不另加功能權限 {#ssp-permission}

::: {.callout .decided}
**決策者 2026-09-26 裁定：專案裡的系統安全計畫，維持看「專案角色」決定誰能做什麼，不另外加一組功能權限。**

| 哪一份 | 誰能改、誰能看 |
|---|---|
| **專案裡的系統安全計畫** | 專案管理者可以改，專案成員只能看；不是專案的人看不到 |
| **合規資源庫裡的範本** | 看合規資源庫那組功能權限（上面第 13～17、28 條已補齊） |

**為什麼不另加**：專案的計畫本來就只屬於那個專案，「你在這個專案裡是什麼角色」已經回答了「你能不能動它」；再疊一層功能權限，只會讓客戶管理員多一處要設、設錯了還會把正當的專案成員擋在外面。
:::

---

## 這塊的結論

::: {.callout .crit}
**一句話**：產品最核心的一塊，查完了，**找到 37 條資安問題，其中 3 條高風險**——全部落在「合規範本與系統安全計畫的資料進出」這塊地上。底下 45 張資料表沒有客戶隔離，**程式那一層是唯一的關卡，而那一層反覆「守了一半」**。

**修法分組**（1.21.0 出貨時 37 條資安已全部處理，第 16、31 條部分修）：

1. **第 1 條最優先**——跨客戶、一個請求、整份文件，修法照隔壁抄一行。
2. **第 2、3、5 條同一張卡**——三個入口一起修、驗收各打一次。
3. **第 4、14～17、28 條（讀取漏掉的那一批）同一張卡**——每支補一行權限檢查；先確認權限點存在、以及「建立專案」下拉選單的角色設計。
4. **第 6～10 條（歸屬檢查）排同一輪**——多數是「把現有那道檢查搬到對的位置」。
5. **第 11、12 條同一張卡**——兩條都已修，隨 1.21.0 出貨。
6. **第 19～21 條（惡意公式）排在那支共用函式發版之後**，五處逐一驗收。
7. **資源耗盡那十條按入口分卡**：壓縮炸彈四個入口一張、特製 Word 六處一張、PDF 兩條一張。
8. **第 38、39 條（非資安）與另外幾件模組本體的小修同一次發版**。

**最後要說清楚兩件事**：

- **「查完」不等於「查乾淨」。** 有三輪覆核沒跑完整、V2 那一輪沒有逐支讀完，那些檔案不能當成查乾淨。
- **這塊的新發現有很大一部分不在工具的正式清單裡**，是執行者開檔追、動手實測出來的。只讀工具清單驗收，會漏掉一整層。
:::

| 統計 | |
|---|---|
| 檢視輪數 | **27 輪**、244 個檔案（主系統 11 輪 94 個、合規範本 8 輪 70 個、模組本體與解析器 8 輪 80 個） |
| 覆核沒跑完整的輪次 | 3 輪（O6、O9b、B1-item），另 V2 可信度低 |
| 找到的問題 | **41 條**（本模組 37 條資安 ＋ 2 條非資安但會讓稽核文件出錯；主系統掃描另查出 2 條，第 40、41 條） |
| ↳ 高風險 | **3 條**（第 1～3 條） |
| ↳ 中風險 | **24 條** |
| ↳ 低風險 | **12 條**（含主系統掃描查出的第 40、41 條，兩條都已修，1.21.0 出貨） |
| 已修 | 34 條（資安第 1～37 條中除第 16、31、33 條外全部已修）＋另 2 條部分修（第 16、31 條）＋第 38、39 條（非資安）也已修——資安 37 條已全部處理完，1.21.0 出貨 |
| 已裁定拆除 | 1 條（第 33 條，已拆除） |
| 已開工單 | 0 張（依決策者裁定，全部掃完後統一開） |

---

| 你想知道 | 看哪裡 |
|---|---|
| 為什麼有些輪次「零發現」還是可信、有些不可信 | [檢視方法與工具 · 哪些地方我們不能說查過了](GUIDE-01-method-and-tools.html#coverage-limits) |
| 我們用什麼方法查、結果有多可信 | [檢視方法與工具](GUIDE-01-method-and-tools.html) |
| 其他模組的檢視結果 | [回總報告首頁](index.html) |
