2026 年 4 月,全球超过 7000 万域名使用的 Web 托管控制面板 cPanel & WHM 曝出严重零日漏洞(CVE-2026-41940)。该漏洞允许未经身份验证的攻击者通过会话注入与认证绕过获得管理员权限,影响所有当前支持的 cPanel & WHM 版本。本文将从技术根因、攻击链构造、工程化检测与修复方案三个维度进行深入分析。
漏洞本质:会话存储机制的多重缺陷
cPanel 与 WHM 采用双层会话存储架构:原始文本会话文件存放于 /var/cpanel/sessions/raw/ 目录,以 key=value\r\n 格式存储;与此同时,系统会在 /var/cpanel/sessions/cache/ 目录生成 JSON 序列化的二进制缓存副本以提升读取性能。问题恰恰出在这两层存储之间的交互逻辑上。
漏洞的第一层缺陷在于 saveSession 函数未对用户输入进行 CRLF 过滤。当攻击者通过 HTTP Basic 认证发送包含 \r\n 的密码时,这些字符会被直接写入会话文件。关键在于 set_pass 函数仅过滤 NUL 字节(\0),对换行符毫无防御。攻击者构造如下载荷即可在会话文件中注入任意键值对:
pass=x\r\n
hasroot=1\r\n
tfa_verified=1\r\n
user=root\r\n
successful_internal_auth_with_timestamp=1777462149
第二层缺陷涉及会话标识符中的 <ob> 段。cPanel 会话 Cookie 格式为 :sessionname,obhex,其中 obhex 是用于对称加密密码字段的会话密钥。当攻击者移除逗号后的 obhex 部分(如发送 Cookie whostmgrsession=:sessionname 而非完整形式),$ob 变量为空,导致加密器不启用,密码字段以明文形式写入磁盘。这为后续的会话注入创造了先决条件。
攻击链:四步实现管理员权限获取
完整攻击链需要精心设计的四个步骤,每一步都利用 cPanel 会话处理的不同阶段。
第一步:预认证会话 minted。攻击者向 /login/?login_only=1 端点发送任意登录请求(如 user=root&pass=wrong),服务器响应 401 并在 Set-Cookie 中返回会话标识符。此时系统已在 /var/cpanel/sessions/raw/ 目录创建预认证会话文件,记录来源 IP、端口及安全令牌等元数据。
第二步:会话注入。攻击者构造 Base64 编码的 Basic 认证头,其中密码字段包含恶意 CRLF 载荷,同时使用截断的会话 Cookie(不含 ,obhex 部分)发送请求。由于加密器未启用,载荷以明文写入原始会话文件,形成多个顶层键值对。
第三步:缓存毒化。原始文件中的注入内容并不能直接生效,因为 loadSession 优先读取 JSON 缓存。攻击者需触发 Cpanel::Session::Modify 类的实例化与保存操作,该操作使用 nocache=1 参数强制从原始文件读取并重新生成 JSON 缓存。具体方法为请求不含安全令牌的路径(如 /scripts2/listaccts),触发 check_security_token 失败并调用 do_token_denied,该函数恰好执行 Modify::new 后接 Modify::save。至此,注入的 hasroot=1、user=root、successful_internal_auth_with_timestamp 等键值被写入缓存,成为会话的顶层属性。
第四步:权限绕过。在后续请求中,docheckpass_whostmgrd 函数会检查会话中是否存在 successful_internal_auth_with_timestamp 字段。若存在,系统直接调用 check_authok_user 返回 AUTH_OK,完全绕过 /etc/shadow 密码验证。这意味着攻击者无需知道 root 密码即可获得完全管理员权限。
工程化修复方案
cPanel 官方已发布各版本补丁,修复后的版本号如下:
- cPanel & WHM 110.0.x:升级至 11.110.0.97
- cPanel & WHM 118.0.x:升级至 11.118.0.63
- cPanel & WHM 126.0.x:升级至 11.126.0.54
- cPanel & WHM 132.0.x:升级至 11.132.0.29
- cPanel & WHM 134.0.x:升级至 11.134.0.20
- cPanel & WHM 136.0.x:升级至 11.136.0.5
补丁的核心修改包括:在 saveSession 函数内部调用 filter_sessiondata 对所有会话数据进行 CRLF 过滤;强化 <ob> 段存在性检查,确保加密器正确初始化;对 pass 字段在无 <ob> 时使用 no-ob: 前缀的十六进制编码而非明文存储。
对于无法立即升级的场景,建议实施以下临时缓解措施:通过防火墙限制 WHM(端口 2087)及 cPanel(端口 2083)的访问来源,仅允许可信 IP;在 Web 服务器层面配置访问控制列表,阻止外部流量直达管理端口;检查 /var/cpanel/sessions/raw/ 目录中是否存在异常的会话文件,特别关注包含多个顶层键值对的会话。
漏洞检测与监控参数
运维团队应建立以下检测机制:监控 /var/cpanel/sessions/cache/ 目录下 JSON 文件内容,告警包含 hasroot=1 或 successful_internal_auth_with_timestamp 的会话;审计访问日志,识别大量 401 响应后跟随无安全令牌请求的模式(攻击者构造攻击链的特征);部署基于 watchTowr Labs 发布的检测工具,持续扫描资产中是否存在未修复的 cPanel 实例。
此漏洞的严重性在于其无需任何凭据即可获得服务器 root 级别控制权,且利用方式隐蔽、攻击链长。托管服务商应立即评估风险等级,优先完成版本升级,并排查历史日志中是否存在利用痕迹。
资料来源:本文技术细节主要参考 watchTowr Labs 的漏洞分析报告及 cPanel 官方安全公告。