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, 会话操纵, 协议分析, 暴力破解, 权限提升, 编程工具, 网络安全, 蓝队分析, 身份验证绕过, 远程代码执行, 逆向工具, 隐私保护, 预认证