4 月 28 日,cPanel 公告了 CVE-2026-41940——CVSS 9.8 的身分驗證繞過漏洞,根因是 cPanel 與 WHM 在登入與 session 載入流程中存在 CRLF(換行字元)注入。Rapid7 用 Shodan 掃出全球約 150 萬個對外暴露的 cPanel 實例。CISA 已將此 CVE 加入「已知遭利用漏洞」清單,KnownHost 確認野外攻擊正在進行,watchTowr 公開了可動的 PoC。合理推測這個 bug 早在 2026 年 2 月 23 日就被當成 zero-day 在使用——比官方修補早了超過兩個月。
這是每個網頁團隊都該擺在桌上的案例,因為它一次打穿了 OWASP 基本功的每一層。
漏洞如何運作
在身分驗證完成之前,cpsrvd 會把一份「pre-auth」session 檔寫到磁碟,用來追蹤登入嘗試與 CSRF nonce。問題出在那份檔案後來如何被重新解析——它被當成「以行為界」的 key=value 條目,而寫入端從來沒有對使用者輸入做換行字元的清理。未認證的攻擊者只要送出一段內含 CRLF 序列(\r\n)後面接著附加 key=value 的 payload。當 cpsrvd 重新讀檔時,那些注入的行被當成頂層 session 條目接受——包括 user=root、hasroot=1、tfa_verified=1、攻擊者自選的 cp_security_token、以及一筆嶄新的 successful_internal_auth_with_timestamp。結果就是:一個完整通過認證的 root session,密碼與雙因素同時被繞過。
CIA 三元素是怎麼一起失守的
機密性(Confidentiality):擁有 root session 等於拿到所有客戶的資料庫憑證、信件、SSL 私鑰。完整性(Integrity):有 hasroot=1,攻擊者可以改寫 cron、置換每個被代管站台的內容,或在 cPanel 的更新通道埋下持久性後門。可用性(Availability):一行指令就能踢掉其他管理員、加密客戶資料,或直接關機。
但真正的根因只有一條,就是 OWASP「輸入驗證」備忘單的第一頁:跨越信任邊界的資料,被寫入一份具有結構意義的檔案,但結構分隔符(換行)沒有被脫逸。CRLF 注入是最古老的網頁漏洞類別之一。它在 2000 年代初殺過 log 完整性、2000 年代中期殺過 HTTP response splitting,現在 2026 年又回頭把 session 儲存層撕開。
今晚每個網頁/PHP 團隊該稽核的事
第一,搜尋你的程式碼,找出每一處把使用者輸入寫入「設定型檔案、log、session record」的地方。如果那份檔案是行界格式(INI、env,或自訂格式都算),寫入前必須拒絕或轉義 \r 與 \n。靜態分析工具幫不了你太多,這要靠模式式 grep。
第二,檢查你的「身分驗證狀態」是不是從一份「未認證請求剛剛寫過的檔案」推導出來的。Pre-auth session 檔應該是收件匣,不能是控制平面。
第三,確認你的代管堆疊已套用修補。cPanel 已釋出修補版本;同時建議在防火牆把 2083、2087、2095、2096 埠擋住,再做更新。
順便講第三方
CIA 不是只看你的程式碼。cPanel 是 150 萬個站台用來信任 root 權限的閉源第三方依賴。如果你不知道你的代管夥伴跑的是哪個版本的 cPanel,你今天就不知道你的站是不是已經被打下來。每一次正規的安全審查都該問:「有哪個有特權的第三方代理,被攻陷後會直接把我們做掉?」這個 CVE 是教科書級的範例。
我的觀點
CVE-2026-41940 最讓人不舒服的一點,是它底層的問題——「把使用者輸入寫進一個對分隔符敏感的格式,卻沒有轉義那個分隔符」——出現在每一本初階開發者教科書裡,從 2004 年講到現在,結果還是吃掉了 150 萬台主機。AI 程式碼審查能抓到、Snyk 能抓到、認真的人也能抓到。這次的教訓不是「再買一個工具」,而是「OWASP 基本功仍然是限速步驟」。這週挑你 codebase 裡的一個輸入邊界,逐行證明:沒有任何來自外部的結構分隔符能抵達一份結構性的檔案。這就是該做的事。
資料來源
- Rapid7 — CVE-2026-41940: cPanel & WHM Authentication Bypass
- CyberScoop — cPanel authentication bypass exploited in the wild
- watchTowr Labs — The Internet Is Falling Down (CVE-2026-41940)
- Help Net Security — cPanel zero-day exploited for months before patch
- NVD — CVE-2026-41940 Detail
- Picus Security — CVE-2026-41940 Explained: 1.5M Servers