FR-118 · 需求索引 · 本頁由 build 掃資料夾生成

FR-118 jedi-oscal-v2 套件本體資安掃描

✅ 已掃完並驗收(2026-09-24);發現已全數處理——6 條資安已修、1 條隨功能拆除(重新產生草稿網址)、2 條非資安已修,隨 1.21.0 出貨(FR-114 修正線)

狀態:✅ 已完成 文件 9 份

FR-118 jedi-oscal-v2 套件本體資安掃描

§1

結論

✅ 八棒全收(2026-09-24)。 掃的是 21 支套件裡最後一支完全沒掃過的:jedi-oscal-v2,合規文件(控制項目錄、系統安全計畫、稽核計畫與結果、改善計畫)的資料層套件,加上主專案側「Word 檔解析成 SSP」的解析器與稽核計畫服務。套件 363 支程式檔裡 294 支是純宣告檔不掃,實掃八棒約 80 檔。這條收完,整條套件掃描線就收完了:21 支套件 20 支掃完、1 支(任務平台)裁停,沒有完全沒碰的。

找到什麼:資安 7 條(總表第 169~175 項,0 高 1 中 6 低),加上 2 條不是資安、但確實寫錯的(總表 §3.2 第 36/37 項)。另外推翻總表第 133 項的修法前提(V4a)、把第 132 項的修法範圍擴大(V4b:錯誤處理也要包住寫資料庫那段)。

條 在哪、會怎樣 分級
第 173 項 一份幾 KB 的特製 Word 檔,讓「匯入 SSP」的解析卡到 120 秒逾時,四個請求讓整個系統對所有客戶停擺(六個寫法同一張卡) 中
第 169 項 把稽核「判定」接到「風險」時,套件不檢查兩者是不是同一份稽核結果(唯一呼叫端有擋,是地雷) 低
第 170 項 「重新產生稽核計畫草稿」沒守「過了規劃階段就唯讀」 低
第 171/172 項 CMMC 官方 PDF:頁數沒上限每頁不釋放;判斷目錄行的比對遇超長一行變很慢(要平台管理員才打得到) 低
第 174 項 Word 打不開時,錯誤訊息把伺服器暫存檔路徑回給前端 低
第 175 項 建資源庫不看框架版本發佈了沒,草稿版本也能被拿去複製 低
§3.2 第 36 項 複製 SSP 時,「提供者」等三種內部參照沒換成新編號,DEV 凍結快照 47 筆全部指錯 非資安
§3.2 第 37 項 專案 SSP 再匯入一次,人員等 uuid 每次換新、外部服務與設備每次多一份 非資安

四個主題:

  • 兩個交接假設被推翻。一是「XML 解析攻擊」:全套件零支 XML 解析器、匯出只出 JSON,這條路不存在。二是「同一個人員 uuid 會出現在兩份 SSP」:Word(W2 查)與 Excel(V3 查)兩條路,uuid 全部由伺服器產生、複製也換新,不成立。
  • 風險形狀是「套件開放只認編號的方法,全靠呼叫端先找父層」。套件服務層有 33 支讀改刪只認編號,底下 45 張表沒有客戶欄位也沒有資料庫隔離。八棒追下來,現在每個呼叫端都有先從有隔離的表往下找;但任何一個新呼叫端漏掉這一步,就是跨客戶讀寫,資料庫沒有第二道防線。
  • 實測抓出資源耗盡。V4b、W1、W2 三棒的工具要嘛零候選、要嘛只估步數,是 runner 自己做惡意 PDF/Word 實跑才定案(例:3,200 個空白 66 秒、1.5KB 的表格宣告一億欄六分鐘沒跑完)。
  • 「用 uuid 字串互指」的欄位,uuid 一換就斷。複製(V1)與再匯入(V3)兩條路各斷一次,不是資安,但會讓稽核證據裡的「提供者」對不上任何人。

修正線處理結果(全部隨 1.21.0 出貨,2026-10-01 對照 docs/security-report/M11-oscal.md 與 SUMMARY):7 條資安 6 條已修、1 條(第 170 項重新產生草稿)裁定拆除(CM-2177,SUMMARY #191);2 條非資安已修。六件對應如下:

  1. 第 121/175 項同一張卡(建資源庫時的檢查):✅ 已修(CM-2179,SUMMARY #195)。
  2. 第 133 項修法改看資源庫表上的版本編號欄;原本寫的「照叫編輯路徑那支引用檢查」在正常流程永遠不擋:✅ 已修(CM-2180,SUMMARY #156)。
  3. 第 171/172/173 項資源耗盡:✅ 已修(171/172=CM-2184 SUMMARY #192/#193;173=CM-2182 SUMMARY #175)。第 173 項六處一張卡,W1 與 W2 各有一條比對規則會被同一份檔先後跑到,只修一邊等於沒修,驗收要用同一份惡意檔整條跑。
  4. 第 169 項守在套件的「判定接風險」方法裡,呼叫端現有那道留著:✅ 已修(CM-2184,SUMMARY #190)。
  5. §3.2 第 36/37 項同一張卡,修在套件一處、Word 與 Excel 兩條路都受益;已產生的快照要不要修補資料,由總表 §7 第 40 項一起裁——已裁修程式、舊快照不動(凍結證據不事後改),✅ 已修(CM-2185)。
  6. 兩個「有能力、沒入口」的地雷:套件匯入信任字典裡的 uuid 與陣列長度;主專案匯出服務對 SSP/稽核結果/改善計畫不檢查文件歸屬。將來開放「上傳 OSCAL JSON」或「匯出 SSP JSON」之前,必須先補守門(總表 §5)。

可信度:「這幾條存在嗎」高——每條都有檔名行號,多數有實測或 DEV 數字,首腦逐條開檔或重查。「只有這幾條嗎」各棒不同:V2 低(runner 沒逐支通讀)、V1 中,其餘六棒中偏高到高。打折處寫在各棒報告的「可信到什麼程度」一節。

§2

總進度表

棒 範圍 規模 卡 狀態
盤點 套件本體+主專案側解析器,按文件類型切棒 363+11 檔 CM-2123 ✅ Done(09-24)|盤點檔
V2 🔴 稽核計畫、結果、改善計畫 26/1,880 CM-2125 ✅ 驗收通過(09-24):總表第 169 項(判定接風險不驗同一份稽核結果,低);runner 未跨 repo 追呼叫端,首腦補查|報告
V1 🔴 SSP 本體 21/1,503 CM-2124 ✅ 驗收通過(09-24):資安 0、非資安 1(總表 §3.2 第 36 項,複製 SSP 時內部參照沒換新編號,DEV 凍結快照 47/47 指錯);凍結竄改不成立;舊快照不動、套件加第二道凍結保護均已裁並修好(§7 第 40/41 項,CM-2185/CM-2184)|報告
V3 🔴 整份匯入匯出單檔 1/1,660 CM-2126 ✅ 驗收通過(09-24):資安 0、非資安 1(總表 §3.2 第 37 項,專案 SSP 再匯入時 uuid 換新、外部服務與設備重複,與第 36 項同卡);查清沒有入口能讓使用者直接給 OSCAL 字典,uuid 維持地雷不是洞;卡片七件全查完、兩個「有能力沒入口」地雷記總表 §5|報告
V8 主專案稽核計畫服務 1/742 CM-2131 ✅ 驗收通過(09-24):總表第 170 項(重生草稿不守「過了規劃就唯讀」,低);讀取兩支沒守=第 66 項既有案;CM-2037 團隊名單修法擋不住跨客戶,已裁退回重修並修好(§7 第 42 項,CM-2172)|報告
V4b CMMC PDF/Excel 解析器 8/1,110 CM-2128 ✅ 驗收通過(09-24):總表第 171 項(PDF 頁數沒上限且每頁不釋放,低)+第 172 項(目錄行比對規則平方級變慢,低),同一張修正卡;runner 實測做得最好的一棒|報告
W1 主專案 Word 內容抽取器 5/1,658 CM-2129 ✅ 驗收通過(09-24):總表第 173 項(特製 Word 讓解析卡到逾時,中;W1 貢獻四處)+第 174 項(錯誤訊息吐伺服器暫存檔路徑,低,併第 132 項同卡);面板 9 票全 3:0,runner 逐條實測全部成立;Word 壓縮炸彈=第 127 項補實測|報告
W2 主專案 CMMC 轉接器與中介格式 4/1,328 CM-2130 ✅ 驗收通過(09-24):併進第 173 項兩處(切「標籤:值」比對三次方 23 秒、兩處平方級走訪);面板 3 票 3:0、runner 實測重現;🔴 uuid 查清,V3「同一人員 uuid 在兩份 SSP」走 Word 不成立,V3 卡已改寫|報告
V4a 控制項目錄、基準線、框架 14/1,202 CM-2127 ✅ 驗收通過(09-24):總表第 175 項(草稿版本也能建資源庫,低,併第 121 項同卡);目錄複製四層+增強項全部換新編號,不成立;🔴 第 133 項修法前提推翻、後果改寫(DEV 591 筆引用 0 筆指公版,首腦重查一致),嚴重度維持中;編輯與匯入覆蓋兩道檢查同卡換進(§7 第 46 項,已裁並修,CM-2180)|報告

✅ 八棒全收。母卡 CM-2122(掃描收口;發現已由 FR-114 修正線全數處理)。套件七棒 78 檔/10,103 行+V8 1 檔/742 行;294 支純宣告檔不掃(盤點檔附錄 A)。

§3

需求討論紀錄

  • 2026-09-24 第二十一任首腦:V3 驗收通過、FR-118 八棒全收。runner 逐行通讀 1,660 行、跨 repo 追完呼叫端、三組實測、DEV 唯讀 8 組查詢;首腦重查外部服務 604 筆提供者查無 17、人員 uuid 跨份 0,一致。資安淨新增 0;V3-1 登總表 §3.2 第 37 項,與第 36 項同卡、併 §7 第 40 項一起裁(已裁修程式、CM-2185 已修),不新增待裁;卡片七件記 §3.4;兩個「有能力沒入口」地雷記 §5;第 123/125/169 項格內補句。收口:7 條資安(0 高 1 中 6 低)+2 條非資安,jedi-oscal-v2 移入總表「已掃完」,完全沒碰改 0 支;母卡 CM-2122 改修正待驗證。
  • 2026-09-24 第二十一任首腦:V4a 驗收通過。runner 逐支通讀 14 檔、5 張資料表模型全欄位列過、DEV 唯讀實查 9 張表隔離與外鍵;首腦重查 profile_imports 591 筆、指向框架版本目錄 0 筆,一致,並開檔核實 resource_library_app_service.py:460-467。V4a-1 登第 175 項(低,併第 121 項同卡,§4 與第 88 項同病);V4a-2 不是新洞,是第 133 項更正——修法前提與後果兩處改寫、原修法句劃線,嚴重度維持中(後果變輕,但門檻與缺口不變);刪主版本與刪有子版本的版本吐 500 併同卡。目錄複製、刪改發佈入口、source_catalog_id 寫入、list_catalogs() 四件記總表 §3.4;兩個小陷阱記 §5;編輯與匯入覆蓋兩道檢查要不要同卡換進 §7 第 46 項。七棒收,剩 V3。
  • 2026-09-24 第二十一任首腦:W1、W2 驗收通過,兩棒逐支通讀、比對規則逐條量,研究員只估步數的四條 runner 全部實測成立,另補 W1-4 合併儲存格、W1-5 吐路徑、W2-2 兩處慢點。六處卡死併成總表第 173 項(中,門檻一般帳號+資源庫編號=第 125 項缺口;與 V4b 定低的尺度一致,差在門檻),W1-5 登第 174 項(低,併第 132 項同卡);第 125/127/132/148 項格內補句;V3 前提推翻(Word 路不會照抄 uuid),V3 卡 CM-2126 已補改寫;§7 不新增待裁。
  • 2026-09-24 第二十一任首腦:V4b 驗收通過,runner 做得最好的一棒(7 種惡意 PDF、3,000 次亂數變造、11 個比對規則逐一量、修法對照實測)。V4b-1/V4b-2 登第 171/172 項,維持低、不與第 132 項對齊成中(第 132 項是資訊直接外洩;這兩條後果是資源耗盡、門檻平台管理員,該角色本來就能刪改所有框架);首腦 grep 核實零處 page.close()、import_framework_version 全庫零呼叫。第 132 項格內補「try 也包住寫資料庫」、第 148 項驗收清單補控制項名稱/評估目標名稱兩欄;defusedxml/pyyaml/零入口四支記 §5,發版時機進 §7 第 45 項。
  • 2026-09-24 第二十一任首腦:V8 驗收通過。runner 做滿(15 支方法逐支列、5 支守在呼叫端跨 repo 開到呼叫端那一行、DEV 實查 13 張表)。V8-1/V8-2 併第 66 項;V8-3 登第 170 項(低),修正分支對該方法零改動(首腦 diff 核實);首腦開修正分支 list_ap_parties:718-722 核實 CM-2037 跨客戶缺口,進 §7 第 42 項建議退回;get_ap 全庫零呼叫併 FR-092 死碼。
  • 2026-09-24 第二十一任首腦:V1 驗收通過。runner 做滿(主專案 25 處呼叫端逐處追、21 檔逐支通讀、DEV 唯讀實查 4 組),跟 V2 相反。凍結竄改不成立(首腦逐行核實主專案擋凍結那條路);V1-1 定為非資安、登總表 §3.2 第 36 項,不進 §3.1;盤點寫 list_ssps 6 處、實查 5 處,不影響結論。兩件待裁進總表 §7 第 40/41 項;ssp_service 11 支零呼叫與主專案 require_write_access/require_read_access(欄位名寫錯、範本分支永遠不成立)併 FR-092 死碼清理。
  • 2026-09-24 第二十一任首腦:V2 驗收通過。runner 推回的四件首腦全查清、不進待裁:link_findings 唯一呼叫端有限定本輪;update_poam_item/get_by_assignee 全庫零呼叫者,併 FR-092 死碼清理;upsert_remediation 兩個呼叫端傳具名參數、白名單成立。淨新增第 169 項。品質打折:runner 把卡片明寫可做的跨 repo grep 推回(「只掃不修」是不改碼、不是不讀碼),且沒逐支通讀 26 檔。
  • 2026-09-24 第二十一任首腦:盤點驗收通過;決策者裁 assessment_plan_app_service.py(FR-113/116 都漏掃)併進本批當第 8 棒;八張掃描子卡一次建完。
  • 2026-09-24 第二十一任首腦:開母卡與盤點卡。決策者裁「FR-116 之後接這支」,盤點與 FR-116 掃描並行(盤點唯讀、不搶掃描資源)。
§4

文件

以下全部由 build 掃資料夾產生,新增檔案重 build 即自動出現。標題連結指向渲染後的 HTML,md 連向源檔。

證據與盤點

文件 類型 標題 最後更新
scan-V1 / md 盤點證據 V1 掃描報告 — SSP 本體:服務、複製與凍結、子表 repo(CM-2124) 2026-09-24
scan-V2 / md 盤點證據 V2 掃描報告 — 稽核計畫、稽核結果、改善計畫:服務與 repo(CM-2125) 2026-09-24
scan-V3 / md 盤點證據 FR-118 V3 掃描報告——OSCAL 整份文件匯入匯出 2026-09-24
scan-V4a / md 盤點證據 FR-118 V4a 掃描報告——控制項目錄、基準線、框架 2026-09-24
scan-V4b / md 盤點證據 FR-118 V4b 掃描報告——CMMC PDF/Excel 解析器 2026-09-24
scan-V8 / md 盤點證據 V8 掃描報告 — 主專案稽核計畫服務 assessment_plan_app_service.py(CM-2131) 2026-10-01
scan-W1 / md 盤點證據 FR-118 W1 掃描報告——主專案 Word 內容抽取器 2026-09-24
scan-W2 / md 盤點證據 FR-118 W2 掃描報告——主專案 CMMC 轉接器與中介格式 2026-09-24
scan-inventory / md 盤點證據 FR-118 掃描盤點——jedi-oscal-v2 套件本體+主專案側 Word 解析器:範圍界定與切棒 2026-09-24