george1-adel/CVE-2026-41940_exploit
GitHub: george1-adel/CVE-2026-41940_exploit
针对 cPanel & WHM 的 CPSRVD 会话文件 CRLF 注入漏洞提供身份验证绕过利用链的 PoCT 演示工具。
Stars: 2 | Forks: 0
# =============================================================================
CVE-2026-41940 - cPanel & WHM 身份验证绕过漏洞利用
漏洞:通过 cpsrvd 的 HTTP Basic 认证处理器进行会话文件操纵的 CRLF 注入
CVE: CVE-2026-41940
CVSS: 9.8 (严重)
CWE: CWE-93 (CRLF 注入) / CWE-306 (缺少身份验证)
受影响版本: cPanel & WHM 以下版本之前:
11.110.0.97, 11.118.0.63, 11.126.0.54,
11.132.0.29, 11.134.0.20, 11.136.0.5
端口: 2082/2083 (cPanel), 2086/2087 (WHM), 2095/2096 (Webmail)
技术根本原因:
cpsrvd 的 HTTP Basic 认证处理器将提供的密码原样存储
到预认证会话文件中,通过 Cpanel::Session::saveSession()
—— 绕过了执行清理操作的 Cpanel::Session::create() /
Cpanel::Session::Modify::save() 包装器,这些包装器会调用
filter_sessiondata() 来去除 CR/LF。由于 saveSession() 本身不调用
filter_sessiondata(),密码中的任何 CR/LF 都会以字面换行符的
形式写入原始会话文件。
当请求因未通过绑定 URL 的 security-token 检查而被拒绝时,
cpsrvd 的 do_token_denied() 处理程序会调用
Cpanel::Session::Modify::new($session, nocache => 1)。nocache => 1
标志强制重新解析原始会话文件(逐行读取 key=value),
而不是加载 JSON 缓存。来自受攻击者控制的 pass 字段中由 CRLF 分割的行,
现在被作为独立的 key=value 记录处理。
随后,Modify::save() 使用所有已解析的键重写 JSON 缓存 ——
包括被提升为顶级会话条目的攻击者注入的键。
重新生成(regen)后,该会话包含了 user=root、hasroot=1、
tfa_verified=1、攻击者选择的 cp_security_token,以及一个带有时间戳的全新
successful_internal_auth_with_timestamp。cpsrvd 会将此会话视为
已完全通过身份验证。
攻击链 (4 个 HTTP 请求):
1. 预认证会话生成:POST /login/?login_only=1 (失败的登录)
-> 创建会话文件,获取 whostmgrsession cookie
2. CRLF 注入:GET / 以及包含 CRLF 载荷的 Authorization: Basic 请求头,使用不带混淆后缀的 cookie
-> 带有嵌入 \r\n 的密码被写入原始会话文件
3. 重生成触发:GET /cpsess/scripts2/listaccts
-> do_token_denied() 触发,重新解析原始文件,提升注入的键
4. 认证访问:GET /cpsess/json-api/version
-> 会话此时具有 root 权限,绕过密码和 2FA
注意:由于 Perl 的随机哈希迭代顺序,存在竞争条件。
原始的(未设置的)cp_security_token 可能会覆盖注入的值。
多次重试可使此攻击链变得可靠。
免责声明:此工具仅用于授权的安全测试和研究目的。
在未拥有或未获得明确测试许可的系统上未经授权使用是非法的。
标签:0day, CISA项目, cPanel, cpsrvd, CRLF注入, CVE-2026-41940, CVSS 9.8, CWE-306, CWE-93, HTTP基本认证, PoC, Web主机管理, Web安全, WHM, 会话操纵, 协议分析, 暴力破解, 权限提升, 编程工具, 网络安全, 蓝队分析, 身份验证绕过, 远程代码执行, 逆向工具, 隐私保护, 预认证