# 第 4 批材料（10 件）——機械抽取，供寫派工計畫用


## SUMMARY #10｜出自 M15-5｜✅ 已修正

外部程式碼平台的存取通行證共四把寫在版控文件裡，拿得到程式庫歷史的人能用我們公司身分讀寫平台上的專案與問題單（四把已全數撤銷，26 個檔的殘留字串待清）


### 模組頁列
M15 第 5 條（M15-ai-dashboard.md:106）
| **5** | 外部程式碼平台的存取通行證寫在版控文件裡，共四把 | 🟠 高 | 密碼外流 | **可用我們公司的身分讀寫該平台上的專案與問題單**。拿得到程式庫歷史的人（含離職者、外包）撈得出來 | 到該平台後台撤銷，並查稽核紀錄 | ✅ **已處理**（四把全數撤銷；版控裡仍有 26 個檔含舊值待清） |


## SUMMARY #11｜出自 M16-5＝M17-9｜✅ 已修正

一個測試用設定檔被推上版控，裡面是四把真的對外 AI 服務金鑰，其中一把還能讀走含客戶資料的執行紀錄（已撤銷換發，殘留字串待清）


### 模組頁列
M16 第 5 條（M16-notification.md:90）
| **5** | 一個測試用設定檔被推上版控，裡面是四把真的對外 AI 服務金鑰 | 🟠 高 | 密碼外流 | **直接的財務損失**——任何拿得到程式庫的人都能用我們公司的帳號呼叫那些服務；其中一把還能讀走服務端存的執行紀錄，裡面例行含有客戶資料 | 撤銷重發、把檔案撤出版控 | ✅ **已修正**——金鑰已撤銷換發，**版控殘留字串待清**（工單 CM-1607） |


### 模組頁列
M17 第 9 條（M17-bulletin.md:84）
| **9** | 四家 AI 服務的金鑰，完整躺在九個對話紀錄檔裡 | 🟡 中 | 密碼外流 | 用公司帳號燒錢；其中一把還能**讀走服務端存的歷史執行紀錄**，裡面例行含客戶資料 | 撤銷重發、清出版控 | ✅ **已修正**——金鑰已撤銷換發，**那九個檔仍在版控裡、殘留字串待清**（工單 CM-1607） |


## SUMMARY #12｜出自 M23-1＝M16-7＝M17-8｜⬜ 未修

一組可以繞過所有客戶資料隔離的資料庫管理員密碼，被寫進 249 個進版控的檔案裡，其中一份湊成可直接複製貼上的連線指令（密碼已換發，249 檔殘留字串待清）


### 模組頁列
M23 第 1 條（M23-issue.md:65）
| **1** | **資料庫管理員密碼散在 249 個檔案裡，其中一份把主機、帳號、密碼三行湊成一條可直接使用的連線指令** | 🟠 高 | 密碼外流 | **拿得到程式碼的人（含離職者、外包）可以直接連進資料庫**。這個帳號**可以繞過所有客戶隔離**，每一家客戶的資料可讀可寫。而且**同一組密碼同時通行四處**：開發環境、**出貨基線資料庫**（客戶拿到的安裝檔就是從這座資料庫長出來的），以及**兩座標示「已退役」但機器上還活著、拿這組密碼照樣連得進去的舊資料庫**——等於兩個沒人在看的入口。這組密碼同時也是快取服務的密碼 | 三步、順序不能顛倒：先堵住再寫進去的路 → 清掉已經寫進去的 → 換密碼（換密碼要決策者明確指示） | ⬜ **未修**（工單 CM-1629） |


### 模組頁列
M16 第 7 條（M16-notification.md:92）
| **7** | 一支產生文件的腳本，把**客戶展示環境**的完整資料庫連線資訊（含密碼）寫死在程式碼裡 | 🟡 中 | 密碼外流 | **可以直接連進客戶會看到的展示環境資料庫**——那個環境依規定等同正式環境 | 改成從環境設定讀取 | ✅ **已修正**——該組密碼已換發，**版控殘留字串待清**（工單 CM-1608） |


### 模組頁列
M17 第 8 條（M17-bulletin.md:83）
| **8** | 資料庫管理帳號的密碼寫在文件裡，而那個帳號**可以繞過所有客戶資料隔離** | 🟡 中 | 密碼外流 | **直接連進開發環境與出貨基準資料庫，繞過所有客戶隔離**。出貨基準庫是所有安裝檔的來源，寫進去的東西會跟著裝到客戶機器上 | 換發密碼、清出版控 | ✅ **已修正**——密碼已換發，**版控殘留字串待清**（工單 CM-1629） |


## SUMMARY #70｜出自 M03-9｜⬜ 未修

按下「開始掃描」時，解密後的客戶主機帳密會多存一份明文進派工資料表，從頭到尾沒有程式讀過它，而且每掃一次就多留一份、無限累積


### 模組頁列
M03 第 9 條（M03-detection.md:126）
| **9** | **按下「開始掃描」時，解密後的客戶主機帳密會多存一份明文進派工資料表** | 🟡 中 | 密碼外流 | **那份存下來的從頭到尾沒有任何程式讀過**——代理程式拿到的是另一份當場重新解密的。等於產品刻意做的加密保護被這一行繞過：**拿到資料庫備份或唯讀帳號的人，一句查詢就得到客戶正式機房的可用主機密碼與掃描器管理員權杖**。而且這張表沒有任何清理機制，**每掃一次就多留一份、無限累積** | 刪掉那一行寫入，再補一支清掉存量的腳本（已確認刪掉不影響代理程式） | ⬜ **未修** |


## SUMMARY #71｜出自 M16-7｜✅ 已修正

一支產生文件的腳本把展示環境的完整資料庫連線資訊（含密碼）寫死在程式碼裡（密碼已換發，殘留字串待清）


### 模組頁列
M16 第 7 條（M16-notification.md:92）
| **7** | 一支產生文件的腳本，把**客戶展示環境**的完整資料庫連線資訊（含密碼）寫死在程式碼裡 | 🟡 中 | 密碼外流 | **可以直接連進客戶會看到的展示環境資料庫**——那個環境依規定等同正式環境 | 改成從環境設定讀取 | ✅ **已修正**——該組密碼已換發，**版控殘留字串待清**（工單 CM-1608） |


## SUMMARY #72｜出自 M16-8＝M17-11｜✅ 已修正

系統管理員帳號密碼寫死在三支腳本裡，其中兩支寫成「環境變數沒設就用這個」，變數忘了設時會靜默用真密碼且不告知操作者（已換發，殘留字串待清）


### 模組頁列
M16 第 8 條（M16-notification.md:93）
| **8** | 系統管理員帳號的密碼寫死在三支腳本裡，其中兩支寫成「環境變數沒設就用這個」——而那個「這個」就是真密碼 | 🟡 中 | 密碼外流 | 拿到程式庫就等於拿到一組可用的管理員帳密。**變數忘了設時會靜默用真密碼，操作的人不會被告知** | 同上 | ✅ **已修正**——該組密碼已換發，**版控殘留字串待清**（工單 CM-1608） |


### 模組頁列
M17 第 11 條（M17-bulletin.md:86）
| **11** | 一支資料庫調整腳本寫「環境變數沒設就用這個密碼」——而那個「這個」是真的管理員密碼 | 🟡 中 | 密碼外流 | 拿到程式庫就有一組可用的管理員帳密。**變數忘了設時會靜默用真密碼，操作的人不會被告知** | 移除寫死的預設值 | ✅ **已修正**——該組密碼已換發，**版控殘留字串待清**（工單 CM-1608） |


## SUMMARY #73｜出自 M17-10＝M15-6｜✅ 已修正

公司套件倉庫與檔案儲存服務的帳密寫在一份交接文件裡，有發布權的人可以推一個帶後門的元件，下次打包就自動裝進客戶手上的程式（已換發，殘留字串待清）


### 模組頁列
M17 第 10 條（M17-bulletin.md:85）
| **10** | 公司套件倉庫與檔案儲存服務的帳密，寫在一份交接文件裡 | 🟡 中 | 密碼外流 | **這是供應鏈的根**——有發布權的人可以推一個帶後門的元件，下次打包就自動裝進客戶手上的程式 | 換發、清出版控 | ✅ **已修正**——帳密已換發，**版控殘留字串待清**（沒有獨立工單，併入殘留字串清理那批） |


### 模組頁列
M15 第 6 條（M15-ai-dashboard.md:107）
| **6** | 公司內部套件倉庫的管理員帳密 ＋ 檔案儲存服務的金鑰 ＋ 一組畫面登入帳密，寫在同一份交接文件裡 | 🟡 中 | 密碼外流 | **套件倉庫這把是整條供應鏈的根**——有發布權的人可以推一個帶後門的元件上去，下次打包就自動裝進客戶手上的程式。檔案儲存那把則讀寫得了稽核證據。三樣都是內網環境的東西，外人拿到用不上，所以評為中 | 已流出去的不追（與資料庫密碼那條同樣處理），等最後統一修正時一併換密碼、清出版控 | ⬜ **未修**（三樣現在都還能用；已裁定收尾統一換） |


## SUMMARY #74｜出自 M23-3｜⬜ 未修

Google 雲端硬碟的應用程式密鑰與加密金鑰散在 15 個進版控的檔案裡，而這組密鑰是 Google 後台唯一一組、所有客戶環境共用


### 模組頁列
M23 第 3 條（M23-issue.md:67）
| **3** | **Google 雲端硬碟的應用程式密鑰與加密金鑰外流**（散在 15 個檔案裡） | 🟡 中 | 密碼外流 | 這組密鑰**不是每套安裝各自產生的，而是 Google 後台唯一一組、所有客戶環境共用**——一旦外流，影響範圍比其他金鑰外流都大。配合第 1 條拿到資料庫之後，可以**解密所有客戶存的雲端硬碟通行證、讀取客戶檔案** | 到 Google 後台重設應用程式密鑰；加密金鑰要**每個環境一把、不要共用**，而且換之前要先寫好「把既有通行證重新加密」的程式 | ⬜ **未修**（工單 CM-1631） |


## SUMMARY #75｜出自 M23-6｜⬜ 未修

打包前端映像檔的那支腳本裡直接寫著一組內部套件倉庫的帳號密碼，而腳本本身就進了版本控制；同一組帳密在前端那個程式碼倉庫的三個流程設定檔裡也有


### 模組頁列
M23 第 6 條（M23-issue.md:70）
| **6** | **打包前端映像檔的那支腳本裡直接寫著一組帳號密碼，而那支腳本本身就進了版本控制**（跨兩個程式碼倉庫、至少四個檔） | 🟡 中 | 密碼外流 | **與第 1 條同一個形狀——憑證寫進版本控制**，任何拿得到程式碼的人（含離職者、外包）都拿得到它，刪掉檔案也沒用。拿到的是**內部套件倉庫的帳號**，而那個倉庫是所有套件的來源——**等於拿到往打包流程裡塞東西的位置**，而打包出來的就是客戶安裝的檔案 | 把帳密移出版本控制，改從環境變數或設定檔讀。⚠️ **要先去後台確認那個帳號到底是不是唯讀**——腳本裡註解說它是唯讀所以「非機密」，但帳號名是管理員層級，這句話要實際查過才算數；若不是唯讀，嚴重度要上調並且要換密碼 | ⬜ **未修**（工單 CM-1998） |


## SUMMARY #122｜出自 M16-6＝M17-6｜✅ 已修正

簽發登入憑證的金鑰、資料庫密碼、檔案儲存服務金鑰寫在同一個測試設定檔裡，拿到第一樣就能偽造管理員登入憑證（已撤銷換發；安裝時每套各自隨機產生，不會跟著出貨）


### 模組頁列
M16 第 6 條（M16-notification.md:91）
| **6** | 同一個檔案裡還有三樣東西：**簽發登入憑證的金鑰**、**資料庫密碼**、**檔案儲存服務的金鑰**。三樣的嚴重度不同，分項如下 | ⚪ 低<br>（三項同級，理由見下） | 密碼外流 | **① 簽發登入憑證的金鑰**：拿到它就能自己偽造一張管理員身分的登入憑證，不需要密碼也不需要雙因子。<br>**② 資料庫密碼**、**③ 檔案儲存服務的金鑰**：拿到就能直接讀寫資料。<br>🔴 **三樣都只影響我們自己的開發機**——安裝程式每裝一套都會各自隨機產生新的一份，**所以外流的這三樣不會跟著出貨到任何客戶**。影響範圍從「每一套裝出去的都中」縮成「我們自己的開發環境」 | 同上 | ✅ **已修正**——三樣都已撤銷換發，**版控殘留字串待清**（工單 CM-1607） |


### 模組頁列
M17 第 6 條（M17-bulletin.md:81）
| **6** | 簽發登入憑證用的金鑰，明文躺在版控的對話紀錄裡（34 處） | ⚪ 低 | 密碼外流 | 拿到這把金鑰就能**自己偽造任何人的登入憑證**——任何使用者、任何客戶、任何角色，不需要密碼也不需要雙因子。<br>🔴 **但外流的只是我們開發機那一把**：安裝程式每裝一套都會各自隨機產生一把新的，**所以這把不會跟著出貨**。影響範圍縮在我們自己的開發環境 | 撤銷換發、清出版控 | ✅ **已修正**——**版控殘留字串待清**（工單 CM-1607；決策者裁定開發環境那把不需更換） |
