大家好!是的,又是一場災難!
正如 watchTowr Labs 的所有研究一樣,這次事件並非始於一篇部落格文章,而是源自一套協調能力,讓 watchTowr 客戶能迅速反應並自動緩解新興威脅。
當攻擊在數小時內發生時,watchTowr 提供了其他人無法比擬的回應時間。
親愛的讀者,對於那些從未管理過共享主機基礎設施的人來說,cPanel 與 WHM 是一套控制面板解決方案,根據不同資料來源,管理著超過七千萬個網域。
WHM 是管理介面,擁有伺服器的 root 權限,管理 SSL 證書、安全協定等;而 cPanel 則是面向用戶的個別主機帳戶面板。
可以把它想像成王國的鑰匙,還有每個公寓的鑰匙。如果王國是網際網路,公寓就是網站,涵蓋一切。
根據 cPanel 的說法,這個漏洞影響所有目前支援的 cPanel 與 WHM 版本,並非部分版本或特定發行路線。
cPanel 發布的公告相當簡潔,節省紙張。
我們知道這是一個影響「會話載入與儲存」的漏洞,換句話說,就是「認證繞過」。
情況更糟的是,KnownHost 確認該漏洞已被實際利用,成為零時差攻擊,目標正是網際網路重要管理層面。
cPanel 建議盡速升級至修補版本(最好是昨天就升級)。
我們檢視了相關檔案,並在分析中發現三個被修改的重要檔案。
其中,Session.pm 中的 saveSession 函數變更特別引人注意。
仔細看程式碼,我們發現一個重要提示:
filter_sessiondata 函數已存在,主要任務是過濾輸入中的
= 字元,防止 CRLF 注入。
例如,若輸入包含換行符,filter_sessiondata 會將其清理成安全格式。
那麼,修補程式到底做了什麼?
很簡單,修補程式將 filter_sessiondata 的呼叫移入 saveSession 函數內,避免每個呼叫者都必須記得過濾,同時引入其他改動。
接著,我們研究 cPanel 與 WHM 的會話檔案結構。
透過嘗試錯誤登入,我們觸發了 preauth 會話檔案的建立,該檔案包含預先發行的 cp_security_token、來源 IP、二階段驗證標記等資訊。
成功登入後,會話會被升級,加入 user 與 pass 等欄位。
pass 欄位會經過對稱加密,使用一個稱為 ob 的會話祕密。
修補程式確保 ob 變數被設定,若未設定,pass 將以明文寫入磁碟,造成安全風險。
我們追蹤 saveSession 的所有呼叫點,發現大多數情況下都安全,但在 cpsrvd 處理 Basic 認證時,發現漏洞。
若 Authorization: Basic 標頭中密碼部分包含
,這些字元會直接寫入會話檔案,且不會被編碼。
這使得攻擊者能注入多行資料,偽造會話內容。
我們製作了特製的 HTTP Basic 認證字串,成功將多行資料注入會話檔案。
雖然 cpsrvd 初步認為我們已認證,但實際上仍視為匿名用戶,因為會話讀取優先使用 JSON 快取檔案,而非原始檔案。
快取檔案將注入內容視為單一字串,導致注入無效。
接著,我們尋找能強制讀取原始會話檔案並更新快取的程式碼路徑。
發現 Modify.pm 中的 loadConfig 函數可透過 nocache 參數跳過快取,直接讀取原始檔案。
並且,Modify::save 函數會將解析後的會話寫回 JSON 快取。
利用 do_token_denied 函數,我們能在缺少或錯誤安全令牌時觸發此流程,將注入資料推進至快取檔案。
此時,所有載入該會話的請求都會看到注入的頂層鍵值,如 hasroot=1、user=root、tfa_verified=1 等。
不過,cpsrvd 會在每次請求時重新驗證密碼,預設會比對 /etc/shadow 中的密碼,偽造密碼理應失敗。
但若會話中存在 successful_internal_auth_with_timestamp 等標記,密碼驗證會被跳過,直接通過認證。
根據 KnownHost,該漏洞已在野外被利用。
因此,我們釋出檢測工具,協助防禦者識別受影響主機。
watchTowr Labs 的研究由 watchTowr 平台驅動,該平台結合外部攻擊面管理與持續自動紅隊測試,幫助企業主動防禦真實攻擊者正在利用的漏洞與技術。