Guidant AI 資安檢視 · 模組報告
前 23 塊查的都是外部模組;這一塊是我們自己直接寫、所有模組都靠它接起來的那一層——每個請求都會經過的把關、雲端硬碟整合、系統診斷包、首次安裝精靈。最值得知道的一件:雲端硬碟授權完成後的那個回呼頁,攻擊者不必有帳號,寄一個連結給已登入的使用者,對方一點就把登入身分交出去(已修)。
前面 23 塊查的都是一個一個外部模組(問卷、檔案、稽核流程……)。把它們接成一個產品的,是我們自己直接寫的這一層:客戶開網頁時每個請求最先經過的把關、第一次裝機時的開通精靈、跟 Google 雲端硬碟串接的整條線、出事時打包回原廠的系統診斷包。
這一層不賣給客戶、畫面上也不一定看得到,但每個客戶、每個請求都會踩過它。
它在所有模組前面——這一層漏了,後面每個模組的檢查都可能被繞過。
雲端硬碟那條線握著客戶硬碟的授權,同步進來的檔案直接變成稽核證據。
診斷包會離開客戶機房,裡面若夾帶密碼,就是從客戶手上被帶出去。
檢視期間:2026-09-25 ~ 2026-09-26|範圍:約 145 個檔案(有判斷邏輯的 119 支,外加決定「哪個功能接哪道檢查」的組裝設定 17 支;逐輪加總,少數檔案兩輪都看過)|共 14 輪
原始技術報告放在需求中心的 FR-120 站,檔名見下表最後一欄。那裡有每一輪的完整技術細節、檔案清單與逐條推理,供需要深究或稽核抽查時查閱。
| 輪次 | 查什麼 | 檔數 | 覆核投票 | 結果 | 原始報告檔名 |
|---|---|---|---|---|---|
| U1 | 權限檢查的共用那一層與共用小工具 | 15 | 3 票全投完 | 低 2(放在授權管理那頁) | scan-U1 |
| U2 | 每個請求都會經過的啟動與把關那一層 | 6 | 15 票全投完,4 條成立、1 條三票一致否決 | 中 2、低 1 | scan-U2 |
| U3 | 首次安裝精靈與版本資訊 | 9 | 工具一個疑點都沒提出(0 票) | 低 2(執行者逐支通讀+實測找到) | scan-U3 |
| U4 | 雲端硬碟的設定、授權與金鑰 | 13 | 15 票全投完 | 高 1、低 2 | scan-U4 |
| U5 | 雲端硬碟回呼與同步排程主幹 | 9 | 18 票全投完 | 高 1、中 2、低 3(與 U6 合併登記) | scan-U5 |
| U6 | 雲端硬碟八支檔案搬移處理器 | 10 | 3 票全投完 | 併入 U5 那列;其中兩條由本輪在開發環境實際操作證實 | scan-U6 |
| U7 | 任務的匯入、匯出與批次 | 7 | 27 票全投完 | 中 1、低 2(放在稽核流程那頁) | scan-U7 |
| U8 | 流程的背景作業 | 8 | 3 票全投完 | 低 3(稽核流程、任務與成員管理兩頁) | scan-U8 |
| U9 | 專案摘要報告、關聯表、帳號與角色殘段 | 20 | 15 票全投完 | 中 2(放在任務與成員管理那頁) | scan-U9 |
| U10 | 系統診斷包:下載入口與組裝 | 8 | 3 票,唯一疑點被三票一致否決 | 低 1 | scan-U10 |
| U11 | 系統診斷包:資料收集器 | 7 | 6 票全投完 | 中 3、低 2(其中一條歸寄信與通知,已修) | scan-U11 |
| U12 | 零散殘段、系統設定守門補掃、人員對帳 | 16 | 9 票全投完 | 高 1、低 4(分在系統設定、合規文件核心、防竄改與本頁) | scan-U12 |
| U13a | 組裝設定:外掛接線那一批 | 10 | 12 票全投完 | 中 1、低 1(檔案上傳、AI 儀表板兩頁) | scan-U13a |
| U13b | 組裝設定:各模組的組裝檔 | 7 | 15 票全投完 | 沒有新增(提出的四條都是舊帳) | scan-U13b |
組裝設定那兩輪之前,先寫了一支比對程式,把 75 個組裝檔逐一比對「該接的檢查有沒有接上」,標出來的 3 處逐一開檔核對,都不是檢查零件。
有四條沒有經過三票覆核,要誠實交代
這一輪有兩條是在開發環境實際操作證實的,不是紙上推論
雲端硬碟那兩條最嚴重的(第 2、4 條)都在開發環境真的打過一次(事後整筆撤回、統籌者確認沒有殘留):用一家公司的身分,載出另一家公司的專案結構、把證據寫進另一家公司的任務,也把另一家公司唯一的雲端證據標成已刪除。
排序按風險,同風險的同一類排在一起。「出事會怎樣」那欄講的是業務影響——誰受影響、損失什麼,不是技術現象。
| # | 問題 | 風險 | 分類 | 出事會怎樣(誰受影響) | 怎麼修 | 狀態 |
|---|---|---|---|---|---|---|
| 1 | 雲端硬碟授權完成後的回呼頁,會把網址上帶的錯誤訊息原樣塞進頁面程式裡 | 🟠 高 | 外部送什麼就收什麼 | 網路上任何人不必有帳號,做一個特製連結寄給已登入的使用者,對方一點,攻擊者就拿到他的登入身分,用他的名義看、改、刪他看得到的所有稽核資料。今年 6 月曾修過一次,但沒修到位 | 錯誤訊息改成固定代碼,不再把網址內容寫進頁面 | ✅ 已修(CM-2200,commit f0a740bd7,1.21.0 出貨) |
| 2 | 雲端硬碟的「重建專案資料夾」不檢查這個專案是不是你的,而且背後用系統身分載入 | 🟠 高 | 客戶資料沒隔開 | 任何一家客戶的任何登入帳號,知道別家的專案編號,就能把對方整個專案結構重建到自己的雲端硬碟,還能把自己放的檔案變成對方任務的證據——別家客戶的稽核證據被偷看、也被摻假。已在開發環境實際打過 | 補專案歸屬與管理者檢查;背景載入改用工作所屬公司的身分 | ✅ 已修(CM-2201,commit 73f5f90af,1.21.0 出貨) |
| 3 | 使用者上傳的檔案整個資料夾開在網站的 /static/ 路徑下,不用登入就能下載 |
🟡 中 | 身分驗證缺失 | 問卷答案附件、意見回饋附件、合規文件匯出檔,知道路徑就能抓,不必登入。今天出貨的網站前門只放行兩條路徑、外面打不到;但只要有人為了排錯開了後端的埠、或換一台代理設定,整包就對外公開 | 關掉這條公開路徑,檔案存放位置與下載功能不動(下載本來就全部走要登入的功能) | ✅ 已修,1.21.0 出貨(8-I,CM-2219,commit 782ebb8b3) |
| 4 | 雲端硬碟背景同步查對應表與證據時不分公司 | 🟡 中 | 客戶資料沒隔開 | 不必有人攻擊——只要兩家客戶不小心接了同一個 Google 帳號,一家的檔案異動會指到另一家的任務、刪除動作會把另一家的證據標成已刪除。受害的是另一家客戶的稽核證據。已在開發環境實際打過 | 決策者裁定:一個 Google 帳號只能被一家公司接,接的時候就擋並給清楚訊息 | ✅ 已修(CM-2204,commit e00f5ed04,1.21.0 出貨) |
| 5 | 即時通訊服務把每一筆封包原樣寫進伺服器紀錄,裡面有登入身分的通行證;系統診斷包收紀錄時沒遮 | 🟡 中 | 敏感內容寫進日誌 | 拿到診斷包或伺服器紀錄的人,等於拿到使用者的登入身分——診斷包是要送出客戶機房給原廠的,出去的那一刻就不在客戶掌控裡 | 關掉逐筆封包紀錄;兩支收集紀錄的程式都要經過遮罩 | ✅ 已修,1.21.0 出貨(8-B,CM-2212,commit c8534bfcb/8f5755f1d) |
| 6 | 系統診斷包的設定快照,遇到跨好幾行的設定值只遮第一行 | 🟡 中 | 敏感內容寫進日誌 | 第二行以後的密碼原樣留在診斷包裡,跟著診斷包送出客戶機房。今天出貨的資料庫密碼剛好是單行,所以還沒真的踩到,但哪天換成多行格式就會 | 改成以整個值為單位遮,不是以行為單位 | ✅ 已修,1.21.0 出貨(8-B,CM-2212,commit c8534bfcb/8f5755f1d) |
| 7 | 系統診斷指令建暫存資料夾時用猜得到的名字,也不檢查是不是捷徑 | 🟡 中 | 外部送什麼就收什麼 | 容器裡只有一般權限的人可以先放一個捷徑,騙主機的最高權限帳號把資料寫到他指定的地方——等於借最高權限改主機上的檔案。執行者已在自己機器上重現 | 改用系統產生的隨機暫存資料夾,建在只有最高權限可寫的地方 | ✅ 已修,1.21.0 出貨(8-D,CM-2214,commit d39181f3b/046553756) |
| 8 | 所有雲端硬碟資料夾(連最上層的根資料夾)都設成「知道連結的任何人都能編輯」,而根資料夾連結任何登入帳號都查得到 | 🟡 中 | 要先做產品決策 | 公司裡任何一個登入帳號拿到根資料夾連結,就能看、改、刪全公司的證據檔;被改過的檔案下一輪同步時還會被當成正常證據匯入 | 決策者 09-25 裁兩段:根資料夾連結不回給沒權限的人;分享改成只限公司網域或專案成員。POC 階段暫緩(分享要綁客戶的 Google 網域,短期不綁) | ⏸ 暫緩(POC 階段) |
| 9 | 即時通知有一個頻道不驗身分,任何人都能加入任意房間 | ⚪ 低 | 身分驗證缺失 | 今天沒有影響:伺服器不往那裡送資料、前端用到它的元件也沒接在畫面上。但元件哪天接回畫面,就變成不必帳號就能偷聽討論串 | 元件接回畫面之前,先在那個頻道補上身分驗證 | 📋 已裁不修,只記錄 |
| 10 | 雲端硬碟授權連結沒有綁定發起授權的那個瀏覽器 | ⚪ 低 | 身分驗證缺失 | 攻擊者把自己公司的授權連結轉寄給別家的人,騙對方按同意,對方的 Google 硬碟就被接進攻擊者的公司,對方放進去的檔案攻擊者全看得到 | 決策者裁定綁瀏覽器:發起時留一個只有那個瀏覽器帶得回來的記號,回來時比對(換設備不受影響,只有「轉給別人按」會失效) | ✅ 已修,1.21.0 出貨(8-H,CM-2218,commit a671d0b64) |
| 11 | 雲端硬碟通知的通行碼比對方式,理論上可以用回應時間差慢慢猜出來 | ⚪ 低 | 身分驗證缺失 | 猜中之後可以偽造「硬碟有異動」的通知,讓系統多跑同步。要大量精準量時間,實務上很難 | 改用固定時間的比對方式 | ✅ 已修,1.21.0 出貨(8-C,CM-2213,commit a5804a990/bde8f9d16) |
| 12 | 「驗證雲端硬碟應用程式憑證」只查是不是平台管理員,沒查「儲存設定」這項功能權限 | ⚪ 低 | 只驗登入、不檢查歸屬 | 平台管理員群組裡沒被分到儲存設定權限的人,也能拿任意一組憑證來試對錯 | 補上儲存設定的功能權限檢查 | ✅ 已修,1.21.0 出貨(8-A,CM-2211,commit fe928859f) |
| 13 | 系統診斷包收的連線紀錄裡,網址欄不在遮罩清單上 | ⚪ 低 | 敏感內容寫進日誌 | 網址裡若帶了通行證,就原樣進診斷包。產品設計上通行證不走網址,開發環境只找到 1 筆測試資料符合 | 網址欄加進遮罩清單 | ✅ 已修,1.21.0 出貨(8-B,CM-2212,commit c8534bfcb/8f5755f1d) |
| 14 | 依名稱找雲端資料夾時只處理了單引號、沒處理反斜線 | ⚪ 低 | 外部送什麼就收什麼 | 有機會改寫搜尋範圍,找到不該找到的資料夾。尚未實際打過 | 先處理反斜線、再處理單引號 | ✅ 已修,1.21.0 出貨(8-C,CM-2213,commit a5804a990/bde8f9d16) |
| 15 | 雲端硬碟通知的程式註解說有「重複通知去掉」,實際沒做 | ⚪ 低 | 外部送什麼就收什麼 | 重複的通知會讓同步多跑一次;同步本身重跑不會出錯,所以只是多耗一點資源 | 不修;註解與實作不一致已記錄 | 📋 已裁不修,只記錄 |
| 16 | 首次安裝精靈的設定碼欄位塞中文或特殊字元,伺服器回 500 | ⚪ 低 | 外部送什麼就收什麼 | 不會放行、不洩漏設定碼,只是回錯誤的姿勢難看,而且任何人都能灌假的錯誤警報、把真的錯誤淹掉。只在系統還沒開通時打得到 | 比對前先只收英數字 | ✅ 已修,1.21.0 出貨(8-E,CM-2215,commit 822216b6c) |
| 17 | 匯出診斷包時,起始時間帶時區、結束時間不帶,程式當掉回 500 | ⚪ 低 | 外部送什麼就收什麼 | 維運人員要匯出診斷包時匯不出來,排查被耽誤;不會外洩 | 兩個時間統一轉成帶時區 | ✅ 已修,1.21.0 出貨(8-D,CM-2214,commit d39181f3b/046553756) |
| 18 | 出貨主機預先蒐集診斷資料時,照索引檔寫的路徑讀檔,沒限制在暫存目錄裡 | ⚪ 低 | 外部送什麼就收什麼 | 能動到索引檔的人可以讓診斷包讀進暫存目錄以外的檔案一起帶走。前提與第 7 條相同 | 服務名稱只收白名單;讀檔前確認路徑還在暫存目錄內 | ✅ 已修,1.21.0 出貨(8-D,CM-2214,commit d39181f3b/046553756) |
| 19 | 首次開通那一步沒上鎖,連點兩次可能建出兩家公司、兩個管理員 | ⚪ 低 | 要先做產品決策 | 程式註解說「資料庫會擋住」,但資料庫根本沒有那條限制。實務上最可能是裝機人員自己連點兩次,事後要人工清掉重複的公司與帳號 | 決策者裁定加鎖:第二個請求直接回「已開通」;前端收到時要顯示「已開通」而不是空白 | ✅ 已修,1.21.0 出貨(8-F,CM-2216,commit a02409392) |
這一輪掃的是主系統的程式,但有些問題的主題屬於既有的模組頁,就放在那一頁,這裡只列去向:
| 主題 | 放在哪 |
|---|---|
| 授權過期轉唯讀只靠排程、授權總開關可被客戶關掉(已修)、唯讀的兩個縫 | 授權管理 第 11~13 條 |
| 任務匯入 Excel 的壓縮炸彈(已修)、流程圖存檔刪任務不問管理人(已修)、孤兒資料清理方向相反、任務 Excel 公式、批次完成信塞 HTML | 稽核流程 第 23~27 條 |
| 還原摘要報告歷史版本不核歸屬、摘要報告 PDF 圖片可指向內網、證據蒐集進度只驗登入 | 任務與成員管理 第 20~22 條 |
| 總部層級守門擋不住另一家客戶的總部(已修) | 系統設定 第 4 條 |
| 人員對帳不分公司、兩張解析工作單表的新增規則一律允許 | 合規文件核心 第 40、41 條 |
| 防竄改旁證的來源 IP 可被偽造(已修) | 防竄改檢查 第 7 條 |
| 原廠共用檔被任一公司刪掉實體檔(部分修) | 檔案上傳下載 第 12 條 |
| AI 儀表板生成不檢查功能權限 | AI 儀表板 第 7 條 |
| 寄信失敗把密碼寫進紀錄(已修) | 寄信與通知 第 2 條(同一件事,不另列) |
另有兩條非資安的程式錯誤,收在掃描總表的非資安清單,不列入本報告。
在哪個畫面發生:客戶在「系統設定 → 雲端硬碟」按「連結 Google 硬碟」,Google 那邊同意之後,會跳回我們系統的一個小頁面告訴使用者成功或失敗。
問題是什麼:那個小頁面會把網址上帶的「錯誤訊息」直接放進頁面自己的程式裡。攻擊者只要在錯誤訊息裡塞一段特製文字,就能把頁面的程式切斷、接上他自己寫的程式。這個頁面跟產品在同一個網址下、使用者的登入身分就存在瀏覽器裡,所以他的程式跑起來,就能直接把登入身分拿走。
| 攻擊者要先有什麼 | 什麼都不用——不必有帳號、不必在公司內,只要能寄一個連結 |
| 受害者要做什麼 | 在已登入的狀態下點那個連結 |
| 攻擊者拿到什麼 | 受害者的登入身分,可以用他的名義看、改、刪他看得到的所有東西;受害者若是管理員,就是整家公司 |
| 為什麼先前以為修好了 | 今年 6 月修過一次,程式裡的註解也寫著「防這種攻擊」,但用的方法擋不住這種寫法。統籌者在自己機器上重現,確認頁面真的被切成兩段 |
修法(已完成):錯誤訊息改成固定的幾種代碼,頁面只認這幾種代碼,網址上帶什麼都不會再被寫進頁面程式(CM-2200,1.21.0 出貨)。
在哪個畫面發生:專案規劃頁的「建立雲端資料夾」,以及背景每隔一段時間把雲端硬碟上的檔案同步成稽核證據的那段排程。
第 2 條:「重建專案資料夾」這個功能只檢查有沒有登入與有沒有買這個模組,不問這個專案是不是你的;程式註解還寫著「前端已經把按鈕藏起來了,後端不用再查」。背後載入專案結構時用的是系統身分,繞過了資料庫那道客戶隔離。結果是任何一家客戶的登入帳號,知道別家的專案編號就能:
| 做得到什麼 | 後果 |
|---|---|
| 把別家公司整個專案結構重建到自己的雲端硬碟 | 看得到別家的查核項目、任務安排 |
| 把自己放進資料夾的檔案,同步成別家任務的證據 | 別家客戶的稽核證據被摻假,稽核結論可能因此被誤判 |
第 4 條:背景同步時,查「哪個資料夾對應哪個任務」「這筆證據是哪一筆」全都不帶公司條件,放證據的那張表本身也沒有客戶隔離。這條不需要有人攻擊——只要兩家客戶不小心接了同一個 Google 帳號,一家的檔案異動就會寫到另一家、一家的刪除就會把另一家的證據標成已刪除。
兩條都已在開發環境實際打過一次(事後撤回、確認沒有殘留)。
修法(已完成):第 2 條補上「專案屬於你、你是管理者」的檢查,背景載入改用那筆工作所屬公司的身分(CM-2201);第 4 條依決策者裁定,一個 Google 帳號只能被一家公司接,接的時候就擋下並給清楚的訊息(CM-2204)。兩張都已隨 1.21.0 出貨。
產品的網站框架有一個預設行為:把某個資料夾當成「公開檔案」開在網址 /static/ 底下。我們剛好把使用者上傳的檔案都存在那個資料夾——問卷答案附件、意見回饋附件、合規文件匯出的 Excel 與 PDF。
今天打不到,是因為出貨的網站前門只放行系統功能與即時通訊兩條路徑。但這是靠前門設定剛好擋住,不是靠程式:只要有人為了排錯直接開放後端的埠,或客戶換了一台代理設定,整個資料夾就不必登入可以下載。
已查證可以關:統籌者確認過那個資料夾裡只有使用者上傳的檔案,沒有網頁用的圖片或樣式;所有下載都走要登入的功能;主系統、兩個會寫檔的模組、前端都沒有任何地方組 /static/ 的網址。修法只關掉那條公開路徑,檔案存放的位置不動。 修完要手測問卷答案上傳下載、意見回饋附件、合規文件匯出各一次。
系統診斷包是出問題時打包給原廠排查用的,它的去向就是離開客戶的機房。這三條都是「該遮的沒遮到」:
| 條 | 漏在哪 |
|---|---|
| 第 5 條 | 即時通訊服務把每一筆封包寫進紀錄,其中有使用者的登入通行證;收紀錄的兩支程式都沒遮 |
| 第 6 條 | 設定值跨好幾行時只遮第一行 |
| 第 13 條 | 連線紀錄的網址欄不在遮罩清單上 |
這組要跟證據自動分類那頁第 14 條剩下的部分一起修:那一條先前只補了「名稱=值」一種寫法,其他寫法(例如程式裡印出來的 password='值'、連線字串裡的帳密)遮罩還認不得。只補一種寫法就是這組的前車之鑑,所以四條併成一張卡一次修完(8-B,CM-2212,1.21.0 出貨),驗收方式是「各種假密碼寫法各塞一筆,產包後整包搜尋都找不到原值」。
一句話:主系統這一層查出 19 條(另有 17 條放在各自的模組頁、1 條併入既有條目),最嚴重的兩條——點一個連結就被偷走登入身分、雲端硬碟跨公司——都已修好,隨 1.21.0 出貨。19 條裡 16 條已修,1 條暫緩、2 條只記錄,全部有歸屬。
建議:
| 統計 | |
|---|---|
| 檢視輪數 | 14 輪、約 145 個檔案 |
| 找到的問題(本頁) | 19 條;另有 17 條放在其他模組頁、1 條併入寄信與通知的既有條目、2 條非資安 |
| 高風險 | 2 條(都已修) |
| 已修 | 16 條(第 1~7、10~14、16~19 條,1.21.0 出貨) |
| 未修 | 0 條 |
| 暫緩/只記錄 | 1 條暫緩(第 8 條)、2 條只記錄(第 9、15 條) |