⚠️ 本檔已由
docs/security-report/SUMMARY.md取代,數字停在 2026-09-20,不要照它排優先序。 之後登記的項次(FR-113 的第 118~133 項、module_frame那批的第 134~149 項)都沒有進這份表,第 128 項的影響範圍也已從「跨專案」升級為「跨客戶」而本檔未反映。 要按風險排順序,請看docs/security-report/SUMMARY.md;要看完整條目,看同目錄的README.md§3。
這一頁回答一個問題:目前所有掃描找到的問題,按嚴重程度排下來是什麼樣子。
每一條只給一句話,由上往下掃一眼就是修正的優先順序。完整描述、檔名行號、出事會怎樣、修法細節都在主彙整頁 §2.2 與 §3,用「出處」欄的編號回去查。
最後更新:2026-09-20(FR-108 D2-4b 驗收+arc 收口,範圍內 0 條新增,與第 105 項重複)。沿革見 security-scan-LOG.md 與 git log。
✅ 掃描 arc 已於 2026-09-20 隨 FR-108 收口結束:決策者裁定「這條線做完,掃描就結束、其餘套件不再掃」——本頁數字為最終數字。
🔵 2026-09-20 做過第二次複查(只查「檔案真的被改過」的 42 條):新判 2 條已修(第 22、25)、6 條部分修,其餘仍在。標記直接寫在下面各列;完整結論與四件教訓見主彙整頁 §3 開頭。標「⚠️ 部分修」且註明「開卡前原文必須改寫」的三條(第 34、40、49),照原文開卡會讓人做一件已經做完的事。
| 風險等級 | 數量 | 現在的狀態 |
|---|---|---|
| 🔴 最嚴重 | 1 | 工單(CM-1595)已開好,還沒排進度 |
| 🟠 高 | 36 | 其中 4 條已開工單,32 條只登記、還沒開工單 |
| 🟡 中 | 60 | 全部只登記、還沒開工單,等統一安排 |
| ⚪ 低風險 | 51 | 資安類 27 條 + 24 項「不算資安、但確實是程式錯誤」 |
| 共 161 列 | 底層是 145 項已登記未開工單 + 16 張已開工單;差額是主表第 1 項(公告權限四個洞)在這裡按嚴重度拆成三列 |
全部沒有排進度,是決策者裁定「等所有套件都掃完,再一次排優先順序」的結果,不是被遺漏。
| 套件 | 問題 | 怎麼修 | 狀態 |
|---|---|---|---|
| 遠端代理程式 (jedi-remote-agent) |
四支控制端點完全不驗呼叫者身分,不用登入就能取走客戶掃描工具的明文帳密,還能冒充別家客戶的機器 | 應用層補身分驗證,只靠 nginx 不夠 | 工單 CM-1595 已開,未排 |
共同點:系統認得出「你是誰」,但從不問「這筆資料是不是你的」。修法可以共用一套。
| 套件 | 問題 | 怎麼修 | 出處 |
|---|---|---|---|
| 檔案上傳 ⚠️ 部分修 |
拿到檔案編號就能下載別人的檔案 | 服務層比對這筆資料的主人。⚠️ 09-20 複查:資料庫隔離已補上、跨客戶那半被擋住,缺口縮小成同一客戶內跨專案;開卡前原文必須改寫 | §3.1 第 34 |
| 檔案上傳 | 能替任何檔案換發一張免登入的下載通行證,傳到公司外面 | 同上 | §3.1 第 35 |
| 檔案上傳 ⚠️ 部分修 |
檔案服務層只憑編號就交出檔案(上面三條在主專案這一側) | 同上。⚠️ 09-20 複查:同第 34 項,應用層一行未動、開卡前原文必須改寫;現在 entity 上有檔案主人欄位可用,修起來更容易 | §3.1 第 40 |
| 檔案上傳 | 上傳的網頁檔在我們自己的網域裡被當成程式執行 | 預覽不照使用者填的副檔名決定型別 | §3.1 第 36 |
| 檔案上傳 | 任何登入者打一支查設定的功能,就拿到雲端儲存帳密明文 | 補權限檢查+加進密碼遮蔽名單 | §3.1 第 39 |
| 檔案上傳 ✅ 已修 |
存放檔案紀錄那張表的資料庫隔離已補上,但同群上面三條應用層檢查仍沒補 | ✅ 已修(資料庫層) | §3.1 第 47 |
| 稽核流程引擎 ⚠️ 部分修 |
知道任務編號就能讀走別家客戶的稽核證明清單,含檔案編號 | 補歸屬檢查。⚠️ 09-20 複查:任務表隔離已補(實測擋得住),但證據表本身仍無客戶欄位無隔離,單筆讀取那條路沒被擋到;應用層一字未補 | §3.1 第 49 |
| 稽核流程引擎 | 流程留言的讀取與寫入都只檢查登入,可冒用同事名義發言釣魚 | 補歸屬檢查 | §3.1 第 51 |
| 任務平台 | 送一個空白查詢就撈光全公司所有客戶的專案成員名冊(實測 751 筆) | 專案編號改必填+補成員檢查 | §3.1 第 60 |
| 系統設定 | 讀系統設定的三個入口都不檢查權限,任何登入帳號拿得到物件儲存帳密 | 三個入口都補上現成的權限點 | §3.1 第 72 |
| 弱點掃描 🆕 |
「測試連線」只驗登入,客戶公司裡任何人按一下就把掃描工具帳密解密外送 | 補一行權限宣告,照抄同檔寫入端 | §3.1 第 85 |
| 問卷 🆕 |
查填答歷史明細完全不檢查歸屬,空白請求就整包讀走全客戶每一版答案與審核意見 | 改成必須指名有權看的任務問卷,再呼叫現成守門 | §3.1 第 89 |
| 問卷 🆕 |
讀某份任務問卷的答案不檢查歸屬,拿到編號就讀得到別部門的作答與分數 | 比照同檔寫入端呼叫守門,一行就好 | §3.1 第 90 |
| 意見回饋 | 六個操作只有「匯出」做了權限檢查,其餘五個任何人都能用 | 補權限檢查與歸屬檢查 | 工單 CM-1630 |
| 證據自動分類 🆕 |
舊版預覽端點填任何一個 Google 硬碟檔案編號就抓得到,射程是客戶整個硬碟 | 加 run 參與者守門,或拿掉舊線三支路由 | §3.1 第 108 |
| 公告 | 單筆讀取公告完全不檢查權限,AI 儀表板那條路還能繞過權限讀走全客戶公告(含未發布草稿,前三筆原文送到第三方 AI) | 補權限檢查與歸屬檢查;四個洞合併一張工單 | §3.1 第 1 |
| 公告 | 修改或刪除公告不檢查歸屬,刪除時還會默默清空原本設定的發送對象 | 同上 | §3.1 第 1 |
| 專案 ⬆ 09-24 升 |
稽核輪次那組 8 支讀取不檢查是不是專案成員,同客戶任何人拿到輪次編號就讀得到別的專案的稽核判定、風險評等、改善計畫與負責人姓名(2026-09-24 FR-116 C3 由中升高) | 修法 CM-2037 已寫好,合回 fix/security-b1 |
§3.1 第 66 |
共同點:切換到子客戶之後,還是看得到別家客戶的資料。
| 套件 | 問題 | 怎麼修 | 出處 |
|---|---|---|---|
| 跨套件盤點 | 切到子客戶仍看得到別家客戶的待辦與專案,13 張表的隔離沒生效 | 逐表開啟隔離(FR-094 已接手) | §3.1 第 43 |
| 跨套件盤點 | 4 個資料查詢畫面直接繞過隔離機制 | 改寫查詢,或限縮誰能讀 | §3.1 第 44 |
共同點:憑證已經在外面,修程式救不回來,一律先換發再清殘留。
| 套件 | 問題 | 怎麼修 | 出處 |
|---|---|---|---|
| 文件站 🆕 最急 |
🔴 資料庫超級管理員密碼與兩組產品帳密寫在需求文件裡,那頁已自動發佈到公開文件站,開網址就看得到 | 先換密碼→清檔重佈→build 加密碼檢查(與 CM-1629 同源) | §3.1 第 84 |
| 共用地基 ✅ 已修 |
使用者的登入密碼與登入憑證,原文直接寫進日誌檔與資料庫 | ✅ 已修(09-20 複查)——標頭走白名單、內容套遮罩,實際 grep 四個 log 檔明文 0 筆;⚠️ 舊 log 檔的明文屬資料清理、另處理 | §3.1 第 22 |
| 公告 | 資料庫帳密、四家 AI 服務金鑰、套件庫與物件儲存憑證需要輪替 | 換發+清除殘留 | §3.1 第 2 |
| 意見回饋 | 資料庫管理員密碼散落在 249 個檔案,其中一份主機帳號密碼三行湊齊 | 換密碼+清檔;測試機展示機要決策者當次指示 | 工單 CM-1629 |
| 意見回饋 | Google 雲端硬碟金鑰外洩,而且所有客戶環境共用同一組 | 換發後重佈各環境;連加密金鑰一起換要先寫重加密程式 | 工單 CM-1631 |
| 安裝程式 | 每一套部署都種下同一組原廠超級管理員密碼,雜湊值寫死在安裝用的 SQL 檔裡,也不強制客戶第一次登入就改掉 | 改成裝機時隨機產生+強制首登改密碼(決策者已裁:先記錄,之後再看怎麼調整) | §3.1 第 3 |
共同點:防線本身可以被關掉,而且關掉之後畫面照樣顯示「通過」。
| 套件 | 問題 | 怎麼修 | 出處 |
|---|---|---|---|
| 防竄改 | 換掉驗證簽章的工具庫,整套防竄改永久失效,實測完全不發警示 | 把那支工具庫移出「開機不檢查」那一層 | §3.1 第 13 |
| 防竄改 | 文件說有兩道鎖,程式其實只做一道,刪掉一個檔就能讓鎖定的機器重開 | 補上資料庫那一道檢查 | §3.1 第 14 |
共同點:兩條都在同一支流程圖解析上,合開一張工單即可。
| 套件 | 問題 | 怎麼修 | 出處 |
|---|---|---|---|
| 稽核流程引擎 | 一張惡意設計的流程圖可以把伺服器卡死 | 解析時加上深度與大小上限 | §3.1 第 55 |
| 稽核流程引擎 | 「檢查流程圖」連續打四次,全站對所有客戶都不回應 | 同上,兩條合開一張工單 | §3.1 第 57 |
| 套件 | 問題 | 怎麼修 | 出處 |
|---|---|---|---|
| 系統設定 🆕 |
一個客戶的管理員可以改掉全公司所有人的登入規則,還能把登入驗證來源指到自己機器 | 四個方向待產品決策,見主彙整頁 §7 | §3.1 第 74 |
| 日誌 🆕 |
一個客戶的管理員可以把全公司日誌改送到自己機器,而日誌裡有密碼原文 | 與上一條同病同修法,兩件一起定案 | §3.1 第 75 |
| 日誌 🆕 |
匯出操作記錄的 Excel 可被種公式炸彈,攻擊者不必登入就塞得進去 | 公式字元開頭前置單引號,修在匯出共用出口 | §3.1 第 78 |
| AI 儀表板 | 使用者只要打字,就能誘導 AI 選中 27 支查詢功能裡的任何一支 | 使用者輸入與可用功能清單分開送 | §3.1 第 11 |
| 寄信通知 | 測試寄信會把公司寄信平台的密碼送到呼叫者指定的任何主機 | 目的地改成白名單 | 工單 CM-1605 |
| 弱點掃描 🆕 |
🔴 客戶上傳的檢測規則包會被外部工具當 Ruby 樣板先跑一輪,等於任意執行程式碼 | 擋掉樣板記號、metadata 走 safe_load、隔離執行環境 | §3.1 第 115 |
按「同一種病」分群(不是按套件),同一群的修法多半可以共用。
共同點:與高風險群一同病,只是外洩的資料敏感度低一級。查詢條件多半全選填,送空白請求就回整張表。
| 套件 | 問題 | 怎麼修 | 出處 |
|---|---|---|---|
| AI 儀表板 | 對 AI 說一句話就列出全公司帳號、角色、客戶與部門清單,走正常畫面要有權限 | 每支查詢標明需要什麼權限;先移出 AI 清單止血 | §3.1 第 8 |
| 稽核流程引擎 | 查單筆稽核證明沒有歸屬檢查,目前只是剛好被另一個程式錯誤擋住 | 與第 49 項同檔一起補,同一張工單 | §3.1 第 50 |
| 稽核流程引擎 | 知道輪次編號就能讀走別家客戶的稽核階段歷程,含退回理由全文 | 用輪次反查專案,再檢查成員身分 | §3.1 第 52 |
| 稽核流程引擎 | 「查目前在哪個階段」用你填的專案查角色、卻用你填的輪次撈資料,兩者不核對 | 解析輪次後比對所屬專案;查不到角色要擋 | §3.1 第 53 |
| 任務平台 | 控制項成員名冊兩支讀取不檢查權限、編號全非必填,猜編號就讀得到人員配置 | 補合格成員檢查+專案編號改必填 | §3.1 第 61 |
| 任務平台 | 查任務指派清單條件全選填,空請求回整張表(實測 12,494 筆,含帳號暱稱) | 補專案成員檢查+專案編號改必填 | §3.1 第 68 |
| 專案 | 摘要報告的清單與歷史版本共四支讀取只驗登入,歷史常留著後來被刪的稽核發現 | 補同檔已有的成員檢查+清單加範圍條件 | §3.1 第 65 |
| 資產清冊 | 設備與資訊系統清冊七支讀取只驗登入,「查看」權限只在前端隱藏選單 | 🔵 產品決策題:要守就加檢查,維持原樣要寫進文件 | §3.1 第 80 |
| 弱點掃描 | 查掃描執行紀錄少了專案參與者檢查,同客戶任何人知道任務編號就讀得到 | 補上同服務其他八處已在用的參與者檢查 | §3.1 第 88 |
| 問卷 🆕 |
列出任務問卷不限範圍,空白請求回整個客戶的全部,也是讀答案的入場券 | 補歸屬檢查+專案編號改必填 | §3.1 第 91 |
| 問卷 🆕 |
列出填答歷史不限範圍,看得出全公司誰在什麼時候改了哪一份問卷 | 補歸屬檢查+任務問卷編號改必填 | §3.1 第 92 |
| 問卷 🆕 |
還原歷史版本不檢查那個版本是不是這份問卷的,可把別部門答案複製進來 | 比對歷史版本的任務問卷編號,一行就好 | §3.1 第 94 |
| 問卷 🆕 |
多人同填的「房間」想進哪間就進哪間,可旁聽別專案並抓到答案快照 | 房間名稱解析成任務問卷後呼叫既有守門 | §3.1 第 95 |
| 跨套件 (根因) |
六張任務指派/參與者表的資料存取層都不自己加專案範圍條件,上層不帶條件就回整張表 | 要不要在共用底層一次擋掉,見主彙整頁 §7 | §3.1 第 70 |
| 問卷 🆕 |
問卷討論列表送空查詢就撈回全公司所有討論,含你沒參與的專案 | 兩個條件改必填+用現成守門檢查成員 | §3.1 第 96 |
| 證據自動分類 🆕 |
舊版 job 列表與狀態端點不檢查專案成員,進度登記簿不分租戶 | 加專案參與者守門+登記簿加租戶過濾 | §3.1 第 111 |
| 證據自動分類 🆕 |
舊版查分類結果與報表不檢查專案成員,查無紀錄還退回直接去硬碟讀 | 五支讀取統一加守門、查無就拒、不退回硬碟 | §3.1 第 109 |
| 弱點掃描 🆕 |
detection-profile.read 這顆能力點早就宣告好,七支讀取方法一支都沒掛 |
七支補上同檔已有的能力點裝飾器 | §3.1 第 113 |
共同點:同上一群,但這一群改得動資料。寫入型越權比讀取型更難善後,錯誤資料已經寫進去了。
| 套件 | 問題 | 怎麼修 | 出處 |
|---|---|---|---|
| 檔案上傳 | 任何登入者可以永久刪除任何檔案,連轉檔產生的備份一起清掉 | 加第 34 項同樣的歸屬檢查+改成可復原刪除 | §3.1 第 37 |
| 任務平台 | 任務查詢/修改/刪除三支收了專案編號卻沒拿來用,只憑任務編號查 | ⚠️ 改過但沒修乾淨,還剩三個缺口要分開寫 | §3.1 第 45 |
| 稽核流程引擎 | 只能看的 viewer 實際可以標記別人的任務完成、退回流程;檢測模組八支端點吃同一道守門 | 待決策者裁:加負責人檢查,或明列允許的角色 | §3.1 第 59 |
| 任務平台 | 第六支成員管理服務整個檔案沒有任何權限檢查,只是目前沒有入口打得到 | 收下角色檢查元件、三支寫入補檢查、啟動補組裝 | §3.1 第 62 |
| 任務平台 | 流程參與者的管理者身分檢查寫在提前返回之後,永遠執行不到 | 查不到改成明確拒絕(權限檢查預設拒絕) | §3.1 第 63 |
| 資源庫 | 客戶的租戶管理員可以改掉原廠公版範本的控制項清單,之後每個新專案都複製到 | 改範本前先查歸屬,公版只給平台管理員 | §3.1 第 67 |
| 任務平台 | 新增任務指派不檢查你填的任務屬不屬於那個專案,可把別人的任務登記成自己的 | 補歸屬比對+真的掛上資料庫觸發程序 | §3.1 第 69 |
| 問卷 🆕 |
改/刪問卷討論不檢查是不是本人寫的,改完還掛著原作者名字,刪除不留痕 | 動手前先比對建立者是不是呼叫者 | §3.1 第 97 |
共同點:前端畫面只顯示幾欄,不代表後端只送了幾欄——整個資料物件被原樣送出。
| 套件 | 問題 | 怎麼修 | 出處 |
|---|---|---|---|
| AI 儀表板 | 查詢結果夾帶每個帳號的密碼加密鹽值,正常的使用者列表刻意排除了它 | 加欄位白名單,或重用既有排除設定 | §3.1 第 9 |
| AI 儀表板 | 套件的轉換函式把整個物件攤平放進回應,送外部 AI 的樣本也沒遮罩 | 照畫面欄位清單挑選;更根本是拿掉鹽值欄位 | §3.1 第 12 |
共同點:這七條合起來是一條完整的鏈——密碼原文進日誌、遮罩遮不乾淨、表沒隔離、送外部不加密、內容可偽造、而且永遠清不掉。建議整條一起排。
| 套件 | 問題 | 怎麼修 | 出處 |
|---|---|---|---|
| 共用地基 | system_logs 完全沒有客戶隔離、連可以拿來隔離的欄位都沒有,已累積 66 萬筆;api_logs 同樣沒開 |
先加客戶標記欄位再補規則,或限縮能讀的帳號 | §3.1 第 23 |
| 共用地基 ⚠️ 部分修 |
完整的程式錯誤堆疊寫進那張沒隔離的表,含內部路徑、函式名稱與 SQL 片段 | 只留錯誤類型與訊息,或堆疊另存到受限處。⚠️ 09-20 複查:進表的量變少了,但堆疊照寫、表仍無隔離,且正式環境現在也會走這條 | §3.1 第 24 |
| 出貨設定 ✅ 已修 |
🔴 出貨設定檔漏了一個環境變數,客戶正式機實際套用的是開發用日誌設定 | ✅ 已修(09-20 複查)——出貨與安裝腳本都顯式寫出該變數,放大器效應解除;⚠️ 「讀不到就拒絕啟動」那半沒做,自備部署仍會靜默退回開發設定 | §3.1 第 25 |
| 共用地基 | 全站唯一的密碼遮罩遇到密碼含雙引號只能遮一半,剩半截原文留 90 天 | 改成解析成結構化資料再換值,解析失敗整段遮 | §3.1 第 30 |
| 日誌轉送 | 送到外部日誌伺服器的整條路完全沒有加密選項,而那裡面有密碼原文 | 兩種協定都加上可選加密,開放成設定頁選項 | §3.1 第 76 |
| 日誌轉送 | 送出去的日誌沒過濾換行符號,可在客戶的資安監控系統裡塞偽造稽核紀錄 | 組出那一行之前先清掉換行與控制字元 | §3.1 第 77 |
| 日誌保存 ✅ 已修 |
🔴 兩張日誌表的按月存放已失效、保存期限沒生效,維護程式從沒被排程呼叫過 | ✅ 已修(09-20 複查)——維護程式已接上每日排程並改以較高權限執行(後者原本會讓它每晚靜默失敗),分區已建、備用表歸零 | §3.1 第 79 |
共同點:兩條都是高風險那兩條防竄改問題的放大器,搭配起來能把攻擊成本大幅拉低。
| 套件 | 問題 | 怎麼修 | 出處 |
|---|---|---|---|
| 防竄改 | 有個環境變數可以整個換掉「要核對哪個目錄」,優先權還比打包版判斷高 | 打包模式下忽略這個環境變數 | §3.1 第 15 |
| 防竄改 | 用過的解鎖檔案,紀錄檔一毀損系統就當作「一張都還沒用過」 | 把「檔案不存在」與「內容毀損」分開處理 | §3.1 第 16 |
| 套件 | 問題 | 怎麼修 | 出處 |
|---|---|---|---|
| 共用地基 | 分頁的「一頁幾筆」沒有上限,送一個大數字就能叫資料庫把整張表全撈出來 | 加範圍限制,共用分頁邏輯再加一道保底 | §3.1 第 31 |
| 稽核流程引擎 | 讀流程範本會無條件解析流程圖,一筆空白內容就讓所有人的清單頁出錯 | 寫入端補格式檢查、讀取端空字串就跳過 | §3.1 第 56 |
| 弱點掃描 🆕 |
手動重新掃描無上限開背景執行緒、整檔讀進記憶體、外部程序給到 900 秒 | 同版本在跑就拒絕重複+加全域併發上限 | §3.1 第 114 |
| 弱點掃描 🆕 |
用網址當規則來源時完全繞過封裝檢查器,三道防炸彈上限一條都沒套用 | 網址下載的內容也要先過同一支驗證器 | §3.1 第 116 |
| 弱點掃描 🆕 |
填網址建掃描基準時放行明文 http://、且完全不記指紋,代理程式落地執行前無從核對檔案有沒有被換掉 |
只收 https://;第一次抓下來就記指紋,之後每次核對 |
§3.1 第 117 |
共同點:不是寫錯,是當初的決定在新情境下沒人重新檢視過,直接改可能影響既有使用方式。
| 套件 | 問題 | 怎麼修 | 出處 |
|---|---|---|---|
| AI 儀表板 | 專案清單有一道「視同管理員」的後門,非成員也能列出客戶內全部專案 | 先定產品方向再改程式 | §3.1 第 10 |
| 檔案上傳 | 客戶讀不到自己的儲存設定時,系統會去借用別家客戶的帳號密碼 | 是刻意設計就寫進文件並限制條件,否則直接拒絕 | §3.1 第 41 |
| 排程 ✅ 已修 |
兩支背景清理排程靠「找不到身分就暫時給最高權限」這條規則才能運作 | ✅ 已修——改成用具名的系統身分執行 | §3.1 第 46 |
| 套件 | 問題 | 怎麼修 | 出處 |
|---|---|---|---|
| 弱點掃描 🆕 |
「測試連線」要連哪台主機由呼叫者直接指定,代理程式變成任意連線跳板 | 目標限已登記的掃描目標或白名單+收斂回應 | §3.1 第 86 |
| 弱點掃描 🆕 |
🔴 資料庫的客戶隔離規則方向寫反,子單位看得到也改得動母單位資料,出貨基線共 9 條 | 9 條換成同檔正確寫法,跨三個套件一次改 | §3.1 第 87 |
| 意見回饋 🆕 |
程式庫歷史裡還有第二把寫死的 GitLab 存取權杖,從沒被撤銷過 | 去 GitLab 後台撤銷並查稽核紀錄,不是改程式 | §3.1 第 83 |
| 意見回饋 | 匯出回饋的 Excel/CSV 沒過濾公式字元,管理員開檔就變成真公式 | 公式字元開頭前置單引號,與操作記錄抽同一支 | §3.1 第 82 |
| 登入帳號 | 🔴 員工被停權後手上的憑證還能用約三天半,他自己還能續到約八天 | 兩處同改:認身分時擋非啟用+停權時撤銷憑證 | §3.1 第 28 |
| 共用地基 | 主產品連 Redis 寫死成不檢查對方是不是真的伺服器,網址也寫死不加密 | 照抄另一個套件的寫法+依加密開關切換 | §3.1 第 19 |
| 檔案上傳 | 本機硬碟刪檔漏清了轉檔產生的 PDF 備份,雲端儲存那邊有清 | 修法很小,建議把兩種儲存的共通邏輯提到共用處 | §3.1 第 48 |
| 問卷 🆕 |
多人同填時「這筆是誰填的」直接採用前端送來的名字,稽核紀錄不可信 | 改用登入身分,一行就好 | §3.1 第 93 |
| 問卷 🆕 |
資料夾更新 API 前端送什麼收什麼,多塞「已刪除」欄位就繞過守門造出孤兒資料 | 拿掉 apply=False 改嚴格格式,四個入口一起改 |
§3.1 第 98 |
| 弱點掃描 🆕 |
代理程式回報報告時檔名叫什麼就存什麼,.html 在稽核人員瀏覽器裡當網頁執行 |
去掉路徑+副檔名白名單,最好一律自己命名 | §3.1 第 101 |
| 證據自動分類 🆕 |
證據檔的內文可以對 AI 下指令,左右它判這份證據符合哪些合規項目 | 容器端剝掉界線符號、宿主端限欄位與信心值 | §3.1 第 102 |
| 弱點掃描 🆕 |
換掃描工具時不拿實際生效的值重新檢查台數上限,可把範圍填成超大網段 | 用實際生效值重查,兩個入口都補+加保險上限 | §3.1 第 105 |
| 弱點掃描 🆕 |
開始掃描時把客戶機器的帳密另存一份明文進工單表,沒人讀也永不清理 | 刪掉寫入那一行+補一支清存量的 migration | §3.1 第 107 |
| 證據自動分類 🆕 |
查 Google 硬碟的搜尋條件用字串拼接、資料夾編號沒跳脫 | 資料夾編號進查詢前先驗字元集 | §3.1 第 110 |
| 弱點掃描 🆕 |
上傳壓縮檔的「最多一萬個檔」上限對 .zip 形同虛設,打開那一刻記憶體就吃光 |
先讀 zip 檔尾的目錄筆數擋掉;順手改掉寫反的註解 | §3.1 第 112 |
這一級混了兩種東西,看的時候要分開:
⚠️ 同一組還有一條在中風險段(第 87 項):9 張表的隔離規則方向寫反——不是沒開,是開了但寫成相反的意思,這種最不容易被發現。
| 套件 | 問題 | 怎麼修 | 出處 |
|---|---|---|---|
| 公告 | 公告與部門的關聯表沒有設定資料庫隔離 | 走標準流程;⚠️ 這張表沒有客戶歸屬欄位,不能照抄主表 | §3.1 第 4 |
| 跨套件 ✅ 已修 |
三張表訂了隔離規則但開關沒打開,專案表還漏了超級管理員例外 | ✅ 已修——三張都已開啟,出貨基線同步更新 | §3.1 第 5 |
| 意見回饋 | jedi-issue 五張表完全沒有客戶隔離,連「這是哪個客戶的」標記欄位都沒有 | 先改表結構加客戶標記欄位,再補隔離規則 | §3.1 第 7 |
共同點:程式本身沒寫錯,但預設值選在寬鬆那一側,接手的人忘記手動改就自動變成不安全。
| 套件 | 問題 | 怎麼修 | 出處 |
|---|---|---|---|
| 登入帳號 | 「忘記密碼」用來防帳號列舉的信箱遮罩,套件預設是關閉的 | 套件預設改成開啟,要放寬的產品自己覆寫 | §3.1 第 29 |
| 檔案上傳 | 上傳沒有單檔大小上限也沒有數量上限,一次塞很多檔就繞過請求上限 | 加單檔大小與數量上限,做成可調整的設定值 | §3.1 第 38 |
| 檔案上傳 | 連線雲端儲存預設不使用加密連線,檔案與帳密會在網路上明文傳輸 | 預設改成加密,要關掉的人自己明確設定 | §3.1 第 42 |
| 共用地基 ⚠️ 部分修 |
正式與測試環境把兩種日誌類別的詳細程度設成最高等級,日誌量會變大 | 調回一般或警告等級。⚠️ 09-20 複查:兩項改掉一項(一般框架日誌已改讀環境變數),資料庫查詢與 mongo 兩棵仍寫死最高等級 | §3.1 第 27 |
共同點:與中風險群一群二同一種病,只是拿得到的東西敏感度更低,或還有另一道檢查頂著。
| 套件 | 問題 | 怎麼修 | 出處 |
|---|---|---|---|
| 稽核流程引擎 | 流程範本的列表與單筆讀取沒掛權限檢查,等於前端擋住、API 完全敞開 | 補功能權限檢查,或前後端規則一起拿掉 | §3.1 第 58 |
| 任務平台 | 寫入成員資料時不檢查群組或控制項是不是真的屬於這個專案 | 寫入前比對所屬專案,不一致就拒絕 | §3.1 第 64 |
| 任務平台 | 更新任務指派時撈不到既有紀錄就整段跳過管理者檢查 | 與中風險第 63 項同型,一起清理 | §3.1 第 71 |
| 資產清冊 | 只有「修改資訊系統」權限的人,送一個「停用」欄位就達成刪除的效果 | 把停用欄位從修改格式拿掉,或改要求刪除權限 | §3.1 第 81 |
| 系統設定 | 密碼遮罩名單漏掉物件儲存那一組,有權限的管理員瀏覽器仍收到明文密鑰 | 加進群組與欄位名單、改用不回密鑰的做法、同步改測試 | §3.1 第 73 |
| 問卷 🆕 |
資料夾列表可以叫出系統刻意隱藏的資料夾,以及已經刪掉的資料夾 | 同上一條(拿掉 apply=False、改用嚴格格式) |
§3.1 第 99 |
| 公告 | 公告列表對「沒有被分配部門」的帳號直接整份放行,不做任何篩選 | 與第 1 項其餘三個洞合併一張工單一起修 | §3.1 第 1 |
共同點:這些不是漏洞,但留著會讓下一個讀程式碼的人誤判——以為某道檢查已經有了,於是不去補真正需要的那道。
| 套件 | 問題 | 怎麼修 | 出處 |
|---|---|---|---|
| 共用地基 | 有一行死碼把某個權限旗標無條件設成「是」,全部 105 條隔離規則都沒用到它 | 直接刪掉那三行 | §3.1 第 20 |
| 共用地基 | 隔離用的連線變數用字串拼接組進 SQL,目前不可被利用只因為沒人把外部輸入帶進來 | 改用安全參數綁定,成本很低 | §3.1 第 21 |
| 共用地基 ✅ 已修 |
程式載入當下就自動啟動一條位址寫死、不加密的遠端監控連線 | ✅ 已修——改成必須明確呼叫;連線仍未加密但預設不會走到 | §3.1 第 26 |
| 共用地基 ⚠️ 沒修乾淨 |
一支開發用輔助工具混在正式出貨套件裡,載入就讀 AI 金鑰、還會把檔案覆寫成空白 | ⚠️ 相依已改選配但檔案仍跟著出貨,直接從套件刪掉 | §3.1 第 32 |
| 共用地基 | 套件把物件轉成回應的共用工具原樣吐出整個物件、沒有任何欄位過濾 | 套件層加白名單;更根本是拿掉鹽值欄位 | §3.1 第 33 |
| 套件 | 問題 | 怎麼修 | 出處 |
|---|---|---|---|
| 授權 | 三個環境共用同一把寫死在程式裡的公鑰,開發簽的授權檔正式環境也會過 | 決策者已裁「等正式簽發站建好再一併處理」 | §3.1 第 6 |
| 防竄改 | 鎖定畫面服務綁在對外位址、跨網域允許任何來源,會洩漏機器指紋與鎖定編號 | 先寫進部署文件提醒不可直接對外,程式面可晚一點 | §3.1 第 17 |
| 防竄改 | 回報偵測到竄改時,把伺服器日誌最後 50 行原文整段送到原廠、完全沒遮罩 | 套用與日誌轉送相同的遮罩,或只送行數與時間 | §3.1 第 18 |
| 稽核流程引擎 | 推進或退回階段時,操作者顯示的暱稱可以由呼叫端自己填寫 | 一律由伺服器覆寫暱稱,請求格式加上限制 | §3.1 第 54 |
| 問卷 🆕 |
資料夾列表把資料庫的原始錯誤訊息整句吐回前端,含表名、欄位名與 SQL 片段 | 拿掉那段 try/except,改回標準錯誤碼 | §3.1 第 100 |
| 證據自動分類 🆕 |
AI 金鑰放在 docker run 命令列上,同主機任何本機帳號都讀得到(落地版跑不到) |
改用 --env-file 或 -e KEY 不帶值 |
§3.1 第 103 |
| 證據自動分類 🆕 |
分類容器沒設記憶體/CPU/處理程序上限,逾時也殺不掉它(落地版跑不到) | 加記憶體/CPU/程序上限,並給容器命名 | §3.1 第 104 |
| 證據自動分類 🆕 |
按「刪除整批」之後,判定結果、原始報告、含原始檔名的清單全都留在主機上 | 刪整批時一併清掉該 run 的工作目錄 | §3.1 第 106 |
這一組不是安全漏洞——找不到攻擊者能主動觸發的路徑,但它們是真的壞掉或真的會壞。排修正時要跟資安項目分開看,急迫性來自產品品質不是被攻擊的風險。
| 套件 | 問題 | 怎麼修 | 出處 |
|---|---|---|---|
| 登入帳號 ✅ 已修 |
改客戶或部門資料時,只更新部分欄位會把「上層是誰」打成空值 | ✅ 已修——兩支都改成有值才更新 | §3.2 第 7 |
| 登入帳號 ✅ 已修 |
建立部門時「建立者」欄位從來沒被寫入,兩個稽核欄位都變成空值 | ✅ 已修——兩欄都已正確灌值 | §3.2 第 8 |
| 公告 ✅ 已修 |
更新公告時檢查錯對象,查無此筆時會對空值做設定、直接出錯 | ✅ 已修——改成先查、查無就回報找不到 | §3.2 第 9 |
| 公告 ✅ 已修 |
沒有登入身分時建立公告會直接讓程式崩潰 | ✅ 已修——沒身分就留空,真正的門在路由 | §3.2 第 10 |
| 共用地基 | 把日誌寫進資料庫失敗會連帶讓使用者那次請求一起失敗,現在能運作純屬運氣 | 補完整錯誤處理+時間欄位補上格式設定 | §3.2 第 11 |
| 共用地基 | 系統自動產生的密碼比要求少一個字元,可能通不過自家最短長度規定 | 把計算公式裡的數字調回正確值 | §3.2 第 12 |
| 稽核流程引擎 | 「強制執行」旗標有兩個來源容易搞混,真正判斷的兩處看的是另一個變數 | 改成直接覆寫,與第 54 項一起清理 | §3.2 第 13 |
| 稽核流程引擎 | 三支收檔案路徑、但現在沒人呼叫的程式,直接用傳入的路徑開檔讀寫 | 直接刪除,或移進測試專用的模組 | §3.2 第 14 |
| 稽核流程引擎 ⚠️ 部分修 |
啟動流程時把執行編號寫回傳進來的範本,匯入那條路傳的是共用母版會互相覆蓋 | ⚠️ 09-20 複查:會踩到的那條路徑已隨 v1 殘留端點清理被刪(順手消失非刻意修),但「傳什麼就寫回那份」的機制原封不動,下一個接這支 API 的人傳母版就重現 | §3.2 第 15 |
| 任務平台 | 套件裡兩組已接上但沒人使用的服務完全沒有權限檢查,接上就開 | 加提醒註解,或直接拿掉這兩個備用服務 | §3.2 第 16 |
| 任務平台 | 三支成員管理服務的「用編號查資料」永遠回空,補完權限拿它測會得到假通過 | 修好它,或把倚賴它的那組方法整組拿掉 | §3.2 第 17 |
| 任務平台 | 有一組流程參與者服務接上但沒人使用,只有 AI 儀表板會讀它的資料 | 拿掉,或加註解提醒啟用前先修第 63 項 | §3.2 第 18b |
| 任務平台 | 流程參與者表在開發環境 0 筆,修改或刪除一定出錯,等於完全不能用 | 與中風險第 63 項合併同一張工單 | §3.2 第 19 |
| 任務平台 | 專案啟動時的成員同步刻意繞過套件權限檢查直接寫資料層,這是第五處 | 與主彙整頁 §7 甲組同一個決策,改時六處一起接 | §3.2 第 20 |
| 任務平台 | 🔴「批次新增指派」後端恆回空陣列但前端真的在呼叫,畫面顯示成功卻沒寫入 | 建議另開工單處理,不屬資安掃描範圍 | §3.2 第 21 |
| 任務平台 | 基線檔有一支能擋住異常寫入的觸發程序,開發環境這張表掛了 0 個 | 屬出貨鏈範圍,通知 FR-093 線處理。⚠️ 09-20 複查:比原本寫的更難修——那支函式要讀的三個欄位這張表根本沒有,現在補掛第一筆寫入就會炸(該表已 12,573 筆),函式要先改 | §3.2 第 22 |
| 任務平台 | 四支任務指派相關方法目前零取用、零守門,接上就開 | 接上前必須先補守門 | §3.2 第 23 |
| 意見回饋 | 沒有被分配部門的一般使用者送不出意見回饋,而且看不出原因 | 屬產品決策:放寬新增規則/規定必有部門/改訊息 | §3.2 第 18 |
| 問卷 🆕 |
Excel 匯入失敗時暫存檔永遠留在磁碟上,每失敗一次留一個 | 刪檔那句移進 finally+補上檔案大小上限 |
§3.2 第 24 |
| 證據自動分類 🆕 |
分類失敗時錯誤訊息原文直接存進批次、前端看得到 | _fail_batch 改存固定錯誤碼,原文只進 log |
§3.2 第 25 |
| 證據自動分類 🆕 |
正解答案表匯入幾乎不驗內容,尺被亂改整份報表失真且不報錯 | 加筆數上限、值型別、鍵比對目錄 | §3.2 第 26 |
| 證據自動分類 🆕 |
AI 分類設定的「預設廠商/預設型號」存得進去但分類時沒人讀 | 解析鏈各加一層讀設定值 | §3.2 第 27 |
| 弱點掃描 🆕 |
「共享」這個範圍值三層各認一套,建立掃描基準時填不出來、但改的時候改得成 | 三層值域對齊(目前還沒真的壞掉) | §3.2 第 28 |
| 弱點掃描 🆕 |
套件自帶的建表腳本值域停在舊版,跟主線已經對不上 | 屬出貨基線待重產,重不重產由決策者裁 | §3.2 第 29 |
「只驗證登入、不檢查東西是不是你的」這一種病,在七支不同套件裡出現過,光是高風險就佔了 12 條。修法本身可以照抄,但要真正解決,得改掉容易犯這種錯的寫法本身。
🔴 「客戶層級的權限,改到的卻是全系統共用的那一份設定」已經出現兩次——登入安全政策(第 74 項)與日誌轉送目的地(第 75 項)是同一個形狀。兩件事要一起做產品決策、一起開工單;往後看到「客戶層級權限+全系統單一設定列」這個組合就該直接懷疑。
「密碼被寫進版本控制」已經出現四種樣態(測試設定檔、登入金鑰、散在 249 個檔的資料庫密碼、AI 助理記憶檔),九成都是因為「查資料庫用的指令」被原封不動貼進文件或對話紀錄。不改變查資料庫、寫文件的習慣,清乾淨了一樣會再長出來。