Guidant AI 資安檢視 · 模組報告
管一輪稽核從開始到結案的那一塊——輪次、審閱簽核、稽核結果、改善計畫都在這裡。審閱簽核這條路守得很好;但同一家公司裡不是這個專案的人,換個網址就看得到別人專案的稽核判定、風險評等與改善計畫(十支讀取入口同一個漏法),其中一支跨客戶也打得到。九條問題已全部修好或拆除,隨 1.21.0 出貨。
一個稽核專案建好之後,實際「跑一輪稽核」的過程由這一塊負責:
「簽核」與「稽核判定」本身就是稽核的價值所在。
一份稽核報告之所以有效,是因為它記錄了「某位有資格的稽核員,在某個時間,對這一條下了什麼判定」。
如果判定可以被不該看的人看到、被受稽核的一方改掉,那這份稽核報告的公信力就沒了。 這跟資料外洩是不同性質的風險——它損害的是產品本身的可信度。
檢視期間:2026-09-23 ~ 2026-09-24|範圍:124 個檔案、12,255 行(模組本體與我們主系統兩邊去重後)|共 9 輪,每輪跑兩次掃描
原始技術報告放在需求中心的 FR-116 站,檔名見下表最後一欄。那裡有每一輪的完整技術細節、檔案清單與逐條推理,供需要深究或稽核抽查時查閱。
為什麼每一輪要跑兩次:這塊的程式分在兩個地方(模組本體、我們主系統的接線),而檢視工具一次只能看其中一邊——範圍跨兩邊時,另一邊會被安靜地丟掉、不會報錯。所以每一輪都分兩次掃,執行者再手動核對兩邊接起來的地方。
| 輪次 | 查什麼 | 檔數(模組+主系統) | 覆核投票 | 結果 | 原始報告檔名 |
|---|---|---|---|---|---|
| C1b | 任務設定樹、「目前的系統安全計畫」、稽核員待辦清單 | 19+2 | 6 票全投完 | 找到 2 條低(第 4、5 條);待辦清單查過不成立 | scan-C1b |
| C2a | 稽核輪次主體 | 8+2 | 18 票全投完 | 找到 1 條低(第 6 條);輪次讀取八支全漏=第 1 條 | scan-C2a |
| C2b | 階段歷程、回退標記、規劃完成度檢查 | 14+1 | 9 票全投完 | 淨新增 0(三條都與 C2a 重複);工作單點名的四件全不成立 | scan-C2b |
| C3 | 稽核結果與改善計畫 | 5+1 | 15 票全投完 | 淨新增 0,但第 1 條升為高——三位檢查員一致評高 | scan-C3 |
| C1 | 整體接線+審閱簽核 | 20+2 | 18 票全投完 | 淨新增 0;審閱簽核那條被三位檢查員一致否決(見下) | scan-C1 |
| C5 | 程序書文件池的資料存取 | 9+3 | 12 票全投完 | 淨新增 0;都是合規文件核心第 11、12 條 | scan-C5 |
| C1c | 專案清單、詳細與稽核計畫的主系統路由 | 9+2 | 12 票全投完 | 淨新增 0;兩條都是第 1 條,後來由 CM-2172 補上 | scan-C1c |
| C4a | 稽核計畫 Word 匯入 | 13+1 | 12 票全投完 | 找到 3 條(第 2 條中、第 7、8 條低);兩邊各自獨立掃到第 2 條 | scan-C4a |
| C4b | 稽核結果 Excel 匯入 | 18+1 | 9 票全投完 | 找到 2 條(第 3 條中、第 9 條低) | scan-C4b |
每一輪的覆核都跑完整
九輪兩邊全部拿到完成證明、票數全投完。有幾邊(C1b、C2b 的主系統那一邊)工具一條疑點都沒提,執行者都有開紀錄確認是真的讀完了才零發現、不是被中斷。
審閱簽核這條路,查完確認是守得住的
這塊把關拆成三層,而且系統啟動時如果沒把這三層接好,它會直接拒絕啟動——程式旁邊寫著「缺把關要吵,不要安靜」。這是全案看過做法最保守的一塊,正好治的是任務與成員管理第 8 條那種「漏接一條線、整支靜默全開」的病。
簽核那條路入口檢查「客戶有沒有買這個功能」、後面再檢查「你在這個專案是不是管理者或審核者」,兩道都在。三位檢查員對「簽核零件沒裝就放行」那條一致否決——目前唯一組裝它的地方兩個零件都有裝。
但要留一句:那道「沒接好就不准啟動」只檢查入口那三道,管不到後面服務裡的零件。審閱簽核、系統安全計畫匯出兩處都還是「有裝零件才檢查、沒裝就放行」的寫法,今天都有裝、不出事,是日後改接線時要記得的地雷。
有兩條是執行者開檔查出、沒有經過三人重查投票
第 7 條(解析工作單的隔離規則寫錯)與第 9 條(確認匯入時佐證照單全收)不在工具的正式清單裡,是執行者照工作單逐項開檔、到開發環境用唯讀方式模擬五種身分實測查出的,統籌者復核屬實。「這兩條存在嗎」可信;它們沒有經過投票這一關。
排序按風險,同風險的同一類排在一起。「出事會怎樣」那欄講的是業務影響——誰受影響、損失什麼,不是技術現象。
| # | 問題 | 風險 | 分類 | 出事會怎樣(誰受影響) | 怎麼修 | 狀態 |
|---|---|---|---|---|---|---|
| 1 | 同一家公司裡不是這個專案的人,換個網址就看得到別人專案的稽核輪次、稽核判定、風險評等與改善計畫——十支讀取入口同一個漏法 | 🟠 高 | 只驗登入、不檢查歸屬 | 看得到的是別的專案的稽核判定內容、風險評等、改善計畫與負責人姓名——比輪次清單機密得多。其中「稽核團隊名單」那支(含 Email、電話)底下的資料表沒有客戶隔離,跨客戶也打得到 | 十支入口開頭都先確認「你是這個專案的成員」;團隊名單那支改成「查不到輪次就回找不到」,才擋得住跨客戶 | ✅ 已修,1.21.0 出貨(八支 CM-2037,commit cd9223592;團隊名單查不到輪次回找不到、稽核計畫選單與儀表板補成員檢查 CM-2172,commit 0808b3c8a) |
| 2 | 稽核員在稽核計畫頁匯入一份不到 20MB、解開幾十 GB 的 Word(壓縮炸彈) | 🟡 中 | 資源耗盡 | 系統只量上傳檔多大、不量解開後多大,打開檔案時整份塞進記憶體,處理程序被砍,連送幾份,所有客戶一起停擺。要先是某個專案的稽核員或管理者、計畫還在規劃階段 | 在這個模組共用的讀檔程式裡,打開檔案之前先檢查解開後總大小與膨脹倍率。與合規文件核心第 23、24 條同病:四個入口分在兩處程式,同一張卡、同一支檢查函式 | ✅ 已修(FR-114 CM-2181,commit BE 48638cbdb/套件 2cb9d2cd,1.21.0 出貨) |
| 3 | 稽核員匯入稽核紀錄 Excel 時,只要在很後面的某一列填一格,系統就從頭一列列讀到那裡 | 🟡 中 | 資源耗盡 | 一份幾 KB、看起來正常的稽核表就能騙過格式檢查。實測:4.9KB 的檔在第 20 萬列填一格,耗時 10.9 秒、吃掉 355MB;推算到 Excel 最後一列約 57 秒、1.9GB,這段時間資料庫交易一直開著。成本比壓縮炸彈更低——幾 KB 的普通檔就夠 | 改成一列一列串流讀、遇空格不建物件;加列數上限(真實表只有一百多列);連續多列全空就停。與第 2 條同一張卡、同一次發版 | ✅ 已修(FR-114 CM-2181,commit BE 48638cbdb/套件 2cb9d2cd,1.21.0 出貨) |
| 4 | 同一家客戶任何帳號都看得到任何專案的「任務設定樹」 | ⚪ 低 | 只驗登入、不檢查歸屬 | 看到控制群組、控制項、評估目標,以及每個目標底下的任務數與被指派人姓名。網址上的專案編號收了卻沒用,後面那個編號程式一次猜三種(專案、輪次、稽核計畫),手上有任何一種都能打。不跨客戶;前端已經沒有畫面在用這支網址 | 已裁定:拆掉網址(與第 5 條同批,改模組要發版) | 🗑️ 已拆除,1.21.0 出貨(CM-2176,commit 553381efe) |
| 5 | 同一家客戶的非成員,知道專案編號就問得出那個專案「目前的系統安全計畫」編號與狀態 | ⚪ 低 | 只驗登入、不檢查歸屬 | 傷害小:只洩漏一個隨機編號和狀態;拿到編號後其他相關網址各自有檢查擋著。前端沒有任何地方在用 | 已裁定:拆掉網址,與第 4 條同批 | 🗑️ 已拆除,1.21.0 出貨(CM-2176,commit 553381efe) |
| 6 | **專案經理可以改寫、再刪掉稽核人員寫的「改善建議」 | ⚪ 低 | 外部送什麼就收什麼 | 輪次進入「整改中」後,稽核人員會在每個風險底下留一筆改善建議,系統規定它不能刪。但受稽核的一方(專案經理)拿到這筆的編號,用「新增整改計畫」把它當成一般整改計畫送出,系統就當成更新、把內容改掉;接著「不能刪」的檢查就不成立了,整筆刪掉**。破壞的是稽核的獨立性與佐證軌跡。門檻高:必須本來就是這個專案的經理、且輪次在整改中 | 已裁定:改善建議屬稽核方專屬——類型是「建議」的那筆,拒絕覆蓋與刪除 | ✅ 已修(FR-114 CM-2174,commit BE a8f1a24b7/套件 b7022b8b,1.21.0 出貨) |
| 7 | 兩張「解析工作單」資料表的隔離規則,照抄了五月就判定壞掉的寫法 | ⚪ 低 | 客戶資料沒隔開 | 稽核計畫 Word、稽核結果 Excel 的解析工作單,子公司看得到所有上層母公司的工作單(開發環境模擬實測:子公司看到母公司 13 筆+4 筆)。系統安全計畫那張五月就修對了,七月建這兩張時照抄了修正前的寫法。評低:程式那一層四步都有檢查公司,今天沒有直接可打的路——是「以為有第二道防線、其實沒有」 | 照五月那次的修法,兩張表一起改;出貨基線要重產(動基線屬決策者裁示) | ✅ 已修(FR-114 CM-2195,commit BE 56dd4cdc8,1.21.0 出貨) |
| 8 | 稽核計畫 Word 解析器的三條比對規則,遇到特製的超長文字會卡住 | ⚪ 低 | 資源耗盡 | 稽核員上傳一份格式像樣的 Word,在標題或時段那一段塞幾萬個空白。實測 2 萬字:標題日期規則 20.7 秒,長度加倍、時間變四倍;一份幾十 KB 的檔就能卡住處理程序到逾時 | 段落文字進比對前先截長度;三條規則改寫成不會來回重試的寫法 | ✅ 已修(FR-114 CM-2181,commit BE 48638cbdb/套件 2cb9d2cd,1.21.0 出貨) |
| 9 | 確認匯入稽核結果時,每筆觀察的佐證照畫面送來的存,不核對是不是這一輪的佐證 | ⚪ 低 | 外部送什麼就收什麼 | 稽核員 A 在按「確認匯入」前改掉送出的資料,塞一個不屬於這一輪的檔案、或一個自己的網址。之後同專案的管理者 B 點開那筆佐證:檔案會直接預覽出 A 指定的那份,連結會開新分頁(可拿來釣同事)。評低:一般「新增觀察」那條路同樣不驗、不是新洞;檔案那半跨客戶打不開 | 確認時只收預覽時算好的候選佐證;連結只收一般網址。檔案那半要等檔案上傳那塊補上歸屬檢查才真正關得起來 | ✅ 已修(FR-114 CM-2174,commit BE a8f1a24b7/套件 b7022b8b,1.21.0 出貨) |
下面只展開需要你自己判斷、或容易被誤解的幾條。 其餘的修法明確,看上面表格的「怎麼修」那一欄就夠了——沒有展開不代表沒查,也不代表不重要。
在哪個畫面發生:專案裡的稽核輪次頁、稽核計畫頁、稽核結果與改善計畫頁。同一家公司裡不是這個專案的人,在網址上換成別人的專案編號。
問題是什麼:這些入口檢查了「你有沒有登入」、「你的公司有沒有買這個功能」,就是沒問「你是不是這個專案的人」。後面的程式只確認「這個輪次存在」,就把內容整包回傳。
| 入口 | 看得到什麼 | 有沒有補 |
|---|---|---|
| 輪次清單、單筆輪次 | 輪次名稱、狀態、起訖日、建立與修改者、系統安全計畫編號 | ✅ 已補(1.21.0 出貨) |
| 稽核計畫內容 | 這一輪要查哪些、抽查誰、行程 | ✅ 已補(1.21.0 出貨) |
| 稽核團隊名單 | 稽核員的姓名、Email、電話——跨客戶也打得到 | ✅ 已補:查不到輪次就回找不到(CM-2172,1.21.0 出貨) |
| 稽核發現、風險、判定矩陣 | 每一條的判定與風險評等 | ✅ 已補(1.21.0 出貨) |
| 改善計畫清單與詳情 | 誰要在什麼時候補什麼、負責人姓名 | ✅ 已補(1.21.0 出貨) |
| 稽核計畫選單、稽核計畫儀表板 | 輪次名稱、進度統計 | ✅ 已補(CM-2172,1.21.0 出貨) |
為什麼從中升到高:最早登記時只看到輪次清單(名稱、狀態、日期),評中。逐塊查下去發現同一個漏法延伸到稽核判定與改善計畫——那是受稽核單位最不想被別的部門看到的東西,三位檢查員一致評高。同一張修正卡涵蓋這些入口,嚴重度取最重的那支。
團隊名單那支為什麼跨客戶:它底下的資料表(稽核計畫、人員)沒有客戶隔離,程式也不經過任何有隔離的表。第一版修法寫成「查得到輪次才檢查」——跨客戶時輪次被隔離藏起來、查不到,檢查就整段跳過。現行做法是「查不到輪次就回找不到」(CM-2172)。
儀表板那支只補一處不夠
稽核計畫儀表板要補兩處:服務層的成員檢查,加上資料層那段「由輪次編號找資料」的查詢也要比對專案——只補前者,成員可以拿自己專案的編號配別專案的輪次編號。兩處都已補(CM-2172)。
在哪個畫面發生:稽核輪次進入「整改中」後,稽核人員在每個風險底下留一筆「改善建議」。
為什麼這條要單獨講:它只評低(要先是那個專案的經理、輪次在整改中),但它破壞的是稽核最根本的一件事——稽核方與受稽核方的分工。專案經理是受稽核的一方,稽核人員寫的建議是稽核方的紀錄;受稽核方能把它改寫、再刪掉,事後就看不出稽核人員原本寫了什麼。
三位檢查員投 2:1:反對那票認為經理本來就有權改整改計畫;另兩票認為建議屬稽核方的紀錄。
已裁定:改善建議屬稽核方專屬
類型是「建議」的那筆,拒絕覆蓋、拒絕刪除。不採用「經理可改但留痕」——那需要新的資料結構,而且留痕只解決「看得出被改過」,不解決「不該被改」。
這條檢視當時打不到,評低(已修,CM-2195),但它是一個值得記住的形狀:同一個錯誤被修好一次之後,又被照抄到新的東西上。
授權管理那塊也有同一個教訓:修洞時新建的表,一出生就帶著寫反的規則。新建資料表時,隔離規則要當成必檢項目,不能照抄隔壁。
一句話:這塊查完了,找到 9 條,其中 1 條高風險——十支讀取入口不問「你是不是這個專案的人」,看得到的是別人專案的稽核判定與改善計畫,其中一支跨客戶也打得到。審閱簽核這條最關鍵的路是守得住的,把關骨架是全案做法最保守的一塊。
1.21.0 出貨時九條都已處理:第 1~3、6~9 條已修,第 4、5 條的網址已拆。要記住的是:
最後要說清楚兩件事:
| 統計 | |
|---|---|
| 檢視輪數 | 9 輪(每輪模組本體與主系統各掃一次)、124 個檔案 12,255 行 |
| 找到的問題 | 9 條 |
| ↳ 高風險 | 1 條(第 1 條) |
| ↳ 中風險 | 2 條(第 2、3 條) |
| ↳ 低風險 | 6 條 |
| 已修 | 7 條(第 1、2、3、6、7、8、9 條,1.21.0 出貨) |
| 已拆除 | 2 條(第 4、5 條,1.21.0 出貨) |
| 未修 | 0 條 |
| 你想知道 | 看哪裡 |
|---|---|
| 為什麼每一輪要掃兩次 | 檢視方法與工具 · 怎麼切也有講究 |
| 「沒接線就靜默全開」在別處的實例 | 任務與成員管理 第 8 條 |
| 我們用什麼方法查、結果有多可信 | 檢視方法與工具 |
| 其他模組的檢視結果 | 回總報告首頁 |