這UNIX 與 Linux 系統管理手冊說:
如果對應的目錄可寫,則 man 在 /var/cache/man 或 /usr/share/man 中維護格式化頁面的快取;然而,這是一個安全風險。大多數系統在安裝時預先格式化手冊頁(請參閱 catman)或完全不預先格式化。
這裡的「安全風險」是什麼?
正如所指出的,存在明顯的安全風險,即有人可以更改手冊頁來欺騙(新手)用戶運行不需要的東西烏爾里希·施瓦茨 (Ulrich Schwartz) 的回答,但我正在尋找其他可以利用這一點的方法。謝謝!
答案1
讓使用者操縱也將被其他使用者使用的手冊頁內容(或實際上的任何資料)是不安全的,因為有以下危險:緩存中毒。正如 BOFH 的老笑話所說:
要從頭開始了解有關係統的所有信息,請使用“閱讀手冊”命令和“閱讀更快”開關,如下所示:
rm -rf /
(要明確的是,不要man rm
運行此命令rm
。甚至將程式碼注入 shell 的輸出終端轉義序列。
答案2
假設所討論的系統是一個 Web 伺服器。我們也假設伺服器管理員透過網頁向公眾(或公司內部網路)提供系統上安裝的某些軟體。它可以像圖像縮放器、計算器或字典一樣簡單。
如果軟體在安裝時有與之關聯的手冊頁,那麼管理員(他們是善良且體貼的人)可能會決定將這些手冊頁提供給 Web 服務的使用者也是一個好主意。
因此,網頁上的「幫助」圖示會啟動腳本來取得一個或多個 -快取的— 手冊頁並將其傳送至使用者的瀏覽器。
對快取目錄具有寫入權限的任何人或程式碼都可以將這些檔案修改為:
- 注入將透過存取使用者瀏覽器執行的任意 Javascript
- 從所有存取用戶收集遙測資料並將其轉發到某個儲存庫以供以後處理/分析
- 收集身份驗證憑證 - 甚至可能是系統特權使用者(如管理員)的憑證
任何有想像和鬆散道德/倫理的人都可以以多種不同的方式濫用上述每一項。
答案3
每當目錄被設定為全域可寫入時,就會產生安全漏洞。忽略目錄的預期目的是什麼以及如何破壞它,僅僅使其可寫是一個問題。
以下是一些與目錄功能無關的可能問題:
- 如果檔案系統上沒有其他目錄可供使用者寫入,這將為任何使用者提供一種使用該檔案系統上他們無法使用的空間的方法
- 任何使用者都可以在該目錄中儲存文件,從而填滿檔案系統以導致拒絕服務攻擊。如果這是與 /var/log 相同的檔案系統,則可能會阻止寫入日誌
- 檔案可能隱藏在此目錄中,超出預期位置。這些可能在帳戶刪除後仍然存在,如果檔案系統被神秘地填滿,可能很難找到
- 如果建立的檔案或目錄與將來的快取檔案同名,則可能會妨礙該目錄的預期用途的正確運作(即使這些檔案的內容本身不是惡意的)。調整這些文件的權限可能會使自動修復變得更加困難。
答案4
當安裝適當的軟體包時,大多數現代發行版都會預先快取手冊頁(透過使用 troff 進行處理)。這不是問題。
當原始 man 檔案存在但快取為空(即快取檔案不是預先產生的)時,就會出現問題。
有兩種方法可以解決這個問題:
- 透過 troff 運行手冊頁每一次作為用戶
- 透過 troff 運行一次手冊頁:根並保存到快取目錄
要以 root 身分運行,需要 setuid。如果存在任何安全漏洞任何事物例如命令列解析,攻擊者可以獲得提升的權限
這是相關來源:https://git.savannah.gnu.org/cgit/man-db.git/tree/src/man.c
幸運的是,所有主要發行版現在都預先快取了手冊頁,因此不必擔心