產品定義上「只能看、沒有待辦」的一般成員,可以完成別人的稽核任務、把流程退回上一關,稽核紀錄上的經手人就變成這個只能看的人;弱點掃描那邊有 8 支會改狀態的功能吃的是同一道守門
M03 第 14 條(M03-detection.md:131) | 14
⚠️ 不計入本塊條數 | 只能看、沒有待辦任務的「唯讀角色」,其實可以對客戶的正式機器發動帶帳密的掃描
(這條是「稽核流程」那塊已登記問題的波及範圍,不是本塊的新發現) | 🟡 中 | 只驗登入、不檢查歸屬 | 這一塊有八支會改狀態的功能(開始掃描、取消、重跑、刪紀錄等)吃的是同一道「任一角色都放行」的守門。決策者已裁定唯讀角色不該能動別人的任務——但修法若只改流程那塊原本記的兩支,這八支仍然對唯讀角色敞開 | 補「呼叫者是不是這個任務的負責人、或這個專案的管理者」這道檢查,範圍要涵蓋這八支 | ⬜ 未修(跟著原問題一起修;決策方向已裁,範圍要擴大) |
M06 第 7 條(M06-flow-engine.md:82) | 7 | 一般成員(定義上「只能看、沒有待辦」)可以完成別人的稽核任務、把流程退回上一關 | 🟡 中 | 要先做產品決策 | 稽核紀錄上的經手人會變成這個只能看的人,連帶任務、問卷、流程的狀態都被他改動。影響面比表面大——弱點掃描模組有八支會改狀態的功能吃的是同一道檢查,所以他同樣可以對客戶的正式機器發動帶帳密的掃描、反覆取消再重派、刪掉失敗的執行紀錄 | 決策者已裁定:這個角色不可以完成或退回任務,只能留言。修法是在原本的「是不是這個專案的人」之後,再加一道「是不是這個任務的負責人、或是這個專案的管理者」 | ⬜ 未修(決策已裁定,修法方向確定) |
在自己有權限的那份問卷上按「還原歷史版本」時,指定別部門問卷的版本編號,就能把別人的答案複製進自己這一份裡
M05 第 6 條(M05-survey.md:78) | 6 | 還原歷史版本時不檢查「你指定的版本是不是這份問卷的」 | 🟡 中 | 只驗登入、不檢查歸屬 | 可以把別部門問卷的答案複製進自己有權限的那一份裡——這不只是看到,是把別人的內容搬進來 | 取出版本後比對它屬不屬於當前這份問卷,不同就拒絕。這條是還原動作、屬於「寫」,權限照舊走嚴的那條(被指派人本人或專案管理者),不跟著讀取放寬 | ⬜ 未修 |
有問卷修改權限的人可以改掉別人寫的討論內容、而且改完還掛著原作者的名字;刪除是直接從資料庫抹掉、不留痕跡
M05 第 8 條(M05-survey.md:80) | 8 | 改/刪問卷討論不檢查是不是本人寫的,改完還掛原作者名字 | 🟡 中 | 只驗登入、不檢查歸屬 | 門檻不是零——要按得動改/刪,得先有問卷的修改或刪除權限,一般登入帳號動不了。但那道權限只問「你有沒有改問卷的權力」,不問「這則留言是不是你寫的」,所以有問卷權限的人可以竄改別人的討論內容、而且改完還掛著原作者的名字;刪除是直接從資料庫抹掉、不留痕跡。對稽核產品來說,討論紀錄被改而看不出來是實質缺陷 | 改:一律禁止改別人的,動手前先載出那則留言比對建立者,不是本人就拒絕。刪:管理者可以刪別人的,但要另開一條寫明白的管理路徑,刪掉之後記成「由某某管理員移除」,不能讓留言憑空消失 | ⬜ 未修 |
「檢查流程圖」這支功能任何登入帳號都能打,同一個檔案裡其他功能都掛了權限檢查只有它沒有,送進來的內容也不限大小
M06 第 4 條(M06-flow-engine.md:79) | 4 | 「檢查流程圖」這支功能任何登入者都能打,而且不限大小 | 🟡 中 | 只驗登入、不檢查歸屬 | 同一個檔案裡其他功能都掛了權限檢查,只有這一支沒有;送進來的內容也沒有長度上限、節點數與連線數都不設限。⚠️ 原本報告寫「打幾次就讓全站停擺」,實測後確認不成立(它走的是另一套檢查邏輯,處理一千個節點只要 0.027 秒),該敘述已移到第 3 條。目前的實質影響是「沒有權限的人可以用它,而且可以丟很大的東西進來」。之所以還是中、沒有降到低:低通常留給「有別的關卡擋著、實際打不到」的情形,這一條一道關卡都沒有,只是打進來的後果輕 | 補權限檢查、加內容長度與節點數上限——見下方這一節 | ⬜ 未修 |
任何人自己開一個新專案(自動是管理者),送出指派時「專案填自己的、任務填別人專案的」,系統只查他是不是自己那個專案的管理者就放行
M10 第 6 條(M10-task-platform.md:100) | 6 | 指派任務:小明自己開一個新專案(他自動是管理者),送出指派時「專案填自己的、任務填別人專案的」,系統只查他是不是自己那個專案的管理者,就放行 | 🟡 中 | 只驗登入、不檢查歸屬 | 任何人只要自己開一個專案,就能把別人專案的任務登記成自己的指派。更麻煩的是主系統靠這張表反查任務屬於哪個專案,塞一筆假紀錄可能騙過那道判斷,進而改動別人專案的任務狀態 | 寫入前先由任務反查它真正屬於哪個專案,跟填進來的比對,對不上就拒絕(同一個檔案的刪除功能已經是這個寫法) | ⬜ 未修 |
改公告、刪公告只問「你能不能改公告」,不問「這則是不是你發的」,一個部門的編輯者能改掉或永久刪掉別部門的公告
M17 第 1 條(M17-bulletin.md:69) | 1 | 改公告、刪公告只問「你能不能改公告」,從不問「這一則是不是你的」 | 🟡 中 | 只驗登入、不檢查歸屬 | 別部門發的公告被人竄改或刪掉。公告是大家會相信的內容,一則被動手腳的公告能直接誤導全公司。而且刪公告是整筆從資料庫移除、內容救不回來;改的時候若沒帶發送對象,還會靜默清空——那則公告就變成所有人都看得到 | 改與刪之前先確認「這則公告是不是自己發的」 | ⬜ 未修(決策者裁定先不開工單,待統一安排) |
管理員把某人的「查看設備」權限關掉,那人只是側邊選單看不到入口,把網址貼上去照樣打開整張設備與資訊系統清冊(主機名稱、網路位址、機密性等級與負責人)
M19 第 1 條(M19-asset.md:64) | 1 | 兩張清冊的「讀取」功能只檢查有沒有登入、不檢查權限——而且程式碼裡寫明這是刻意的取捨 | 🟡 中 | 要先做產品決策 | 管理員以為自己收掉了某人的查看權限,其實沒有。被刻意拿掉權限的帳號(例如約聘人員、外部顧問)只要把網址貼上就進得去,一樣拿得到該客戶完整的設備清冊(主機名稱、網路位址、作業系統版本)與資訊系統清冊(各系統的機密性等級、部署模式、授權邊界、負責人)——等於把客戶內部網路的組成與整體安全態勢攤開。跨客戶仍被擋住,外洩範圍在同一家客戶內 | 已裁定要修:照同一支檔案裡寫入功能的既有做法,七支讀取功能各加一道檢查,用現成機制不必造新東西。⚠️ 補的同時必須把那顆權限補進唯一沒有它的那個角色,否則五個地方的下拉選單會安靜變空(見下方展開) | ⬜ 未修(已裁定要修,工單待開) |
一個沒有被分配部門的一般使用者送意見回饋一定會失敗,而且畫面不給任何理由;新客戶剛裝好、部門還沒建起來時特別容易踩到
M21 第 3 條(M21-issue-rescan.md:95) | 3 | 沒有被分配部門的一般使用者,送意見回饋會失敗、而且畫面看不出原因 | 🟡 中 | 要先做產品決策 | 這不是資安漏洞,是一個完全靜默的功能故障:管理員去查這個人的權限,每一項都對,就是送不出去,畫面也不給任何理由。新客戶剛裝好、部門還沒建起來的時候特別容易踩到 | ✅ 已裁定:放寬那條資料庫規則——送意見回饋跟你在哪個部門本來就無關 | ⬜ 已裁定修法(待排工) |
任何一個一般員工在意見回饋頁面上,就能改掉或刪掉別人的回饋,連帶把開發團隊正在處理的那張外部問題單也一起關掉,而稽核紀錄還會把操作人記成合法本人
M23 第 2 條(M23-issue.md:66) | 2 | 七個意見回饋操作裡只有「匯出」檢查權限,其餘六個任何登入帳號都能用;改別人的、刪別人的也從不檢查是不是自己的。整個模組對外九支入口,八支只驗登入 | 🟡 中 | 只驗登入、不檢查歸屬 | 這是目前所有問題裡唯一一條「一般員工現在就能實際操作利用」的,不需要任何特殊權限。任何員工可以刪掉或竄改別人的回饋,連帶把外部問題單系統上的那張單子也一起關掉;而稽核紀錄還會把操作人記成合法本人 | 後端補上權限檢查(十顆權限資料庫裡都已定好,純接線)、再加上「這筆資料是不是你的」的檢查;清單分兩套邏輯(已裁定,見下) | ⬜ 未修(工單 CM-1630) |
某個專案的管理者在寫入群組層/控制項層成員時,填進來的群組或控制項可能根本不屬於那個專案,系統不比對就寫進去
M10 第 10 條(M10-task-platform.md:104) | 10 | 寫入成員時只驗專案、不驗群組與控制項:填進來的群組或控制項可能根本不屬於那個專案,系統不比對 | ⚪ 低 | 只驗登入、不檢查歸屬 | 要先是某個專案的管理者才做得到,門檻比較高。但寫入型的越權比讀取型更難清理乾淨——已經寫進資料庫的錯誤資料要另外清除 | 寫入前補上「群組或控制項所屬的專案,是不是等於填進來的專案」這道比對 | ⬜ 未修 |
更新專案成員資料時撈不到既有紀錄就整段跳過管理者檢查——目前靠後面另一道檢查頂住,哪天有人改成「查不到就當新增」,這道把關會靜默消失
M10 第 12 條(M10-task-platform.md:106) | 12 | 更新成員資料:撈不到既有紀錄時,整段跳過管理者檢查 | ⚪ 低 | 身分驗證缺失 | 目前靠後面另一道檢查頂住,實際結果是「查無資料」而不是「未經授權的寫入」。但這是靠一道檢查擋另一個缺口的結構——哪天有人把它改成「查不到就當新增」,這道把關會靜默消失 | 把條件改成「撈不到就明確拒絕」,不要依賴後面那道檢查(同一支檔案的刪除功能已經是這個寫法) | ⬜ 未修 |
用網址直接開一則公告時系統什麼都不檢查,調部門之後舊部門的公告用舊網址照樣打得開;公告列表碰到「沒有被分配部門」的帳號就整個不過濾、全部給看(已裁定:發送對象改成必選,一套設計解掉三件事)
M17 第 3 條(M17-bulletin.md:71) | 3 | 用網址直接開一則公告時,完全不做任何檢查 | ⚪ 低 | 只驗登入、不檢查歸屬 | 調部門之後,舊部門的公告用舊網址還是打得開;還沒發布的公告可以提前看到。目前擋著的只有「網址裡那串編號猜不到」這一件事 | 與第 4 條合併成同一套設計:發送對象改成必選,讀取時一律照那個對象過濾 | ⬜ 未修(決策者裁定先不開工單,待統一安排) |
M17 第 4 條(M17-bulletin.md:72) | 4 | 公告列表碰到「沒有被分配部門」的帳號,直接不過濾、全部給看 | ⚪ 低 | 只驗登入、不檢查歸屬 | 沒有被分配部門的帳號,打列表就拿到整個客戶的全部公告(含草稿、含過期),連同它們的網址編號——而那些編號正好餵給上面第 3 條。而且「要不要過濾」這個開關是呼叫端自己在請求裡傳的,不是伺服器判定的 | 與第 3 條合併成同一套設計(見下方「一套設計解掉三件事」) | ⬜ 未修(決策者裁定先不開工單,待統一安排) |
只給了修改權限、刻意不給刪除權限的操作人員,直接送一個「停用」欄位,就能讓任何一個資訊系統從所有選單與清單裡消失
M19 第 2 條(M19-asset.md:65) | 2 | 只有「修改」權限的人,送一個「停用」欄位就等於做到了「刪除」 | ⚪ 低 | 只驗登入、不檢查歸屬 | 被刻意不給刪除權限的操作人員,可以讓任何一個資訊系統從所有選單與清單裡消失,稽核專案就選不到它了。可還原(資料還在)、只在自己客戶內、而且畫面上根本沒有這個欄位(要直接呼叫後端才做得到) | 從修改用的資料格式把那個欄位拿掉;或是收到「停用」時改要求刪除權限。⚠️ 同時要確認反向:不會讓修改請求把已停用的系統悄悄重新啟用(見下方展開) | ⬜ 未修(已裁定要修,與第 1 條一起排) |