assetnote/cpanel2shell-scanner
GitHub: assetnote/cpanel2shell-scanner
专门针对 CVE-2026-41940 cPanel/WHM 身份验证绕过漏洞的高保真扫描器,能精准识别易受攻击主机且不会触发安全防护机制或产生漏报。
Stars: 51 | Forks: 16
# cpanel2shell-scanner
一款针对追踪为
CVE-2026-41940 的 cPanel/WHM 身份验证绕过漏洞的高保真扫描器。它能够识别易受攻击的主机,且不会产生
公开的概念验证和检测中常见的漏报,也不会
触发账户锁定和 root-IP-白名单机制,从而避免
干扰常规扫描。
## 为什么选择这款扫描器
大多数针对 CVE-2026-41940 的公开检测都存在三个问题。本扫描器
逐一解决了它们。
您可以在此处阅读我们关于此检测技术的博客文章:https://slcyber.io/research-center/high-fidelity-check-for-the-cpanel-authentication-bypass-cve-2026-41940/
### 它检查代理路径,而不仅仅是管理端口
cPanel 的按 vhost Apache 配置安装了一个 `ProxyPass`,它会将
`/___proxy_subdomain_whm` 转发到 `127.0.0.1:2086`,并将 `/___proxy_subdomain_cpanel`
转发到 `127.0.0.1:2080`,而不考虑请求的 `Host` 头。
`RewriteCond` 仅约束将管理子域
映射到代理路径的重写操作;`ProxyPass` 本身是无条件的。在由 cPanel 管理的 Apache 所服务的任何 vhost 上访问这些
路径,都可以到达与管理端口相同的易受攻击的
后端。
仅探测端口 2082/2083/2086/2087 的扫描器在那些
端口被防火墙拦截时,会报告主机不存在漏洞,即使
该漏洞完全可以通过 443 端口访问到。本扫描器默认探测 2087、2083 端口以及 443 端口上的两个代理路径。
### 它不会被 cphulkd 或 root-IP 白名单拦截
cPanel 自带 `cphulkd`,它会在少数几次
密码尝试失败后锁定账户;并且带有 `authorized_whm_root_ips` 功能,将 root 登录
限制在配置的源地址列表内。如果一个扫描器通过
尝试为 `root` 注入会话来利用此绕过漏洞,将会:
- 当扫描器的 IP 不在 root 白名单中时被静默忽略,
从而产生漏报;并且
- 会导致其针对的任何账户产生密码失败事件,
最终锁定该账户,并阻止后续的检测和
合法登录。
本扫描器在 WHM 端避免了这两个问题,方法是
在一个随机生成的用户名下向
会话 payload 中注入 `expired=1`。通过访问生成的 `cpsessXXXX` URL 并在响应体中匹配
`msg_code:[expired_session]` 来验证会话注入是否成功,该标记仅当
注入成功时才会出现。由于没有针对任何真实账户,因此没有真实账户会被
锁定;并且由于未尝试 root 登录,
root 白名单也变得无关紧要。
### 它在必要时使用用户名字典
cPanel 守护进程 (`cpaneld`,端口 2083 和 `/___proxy_subdomain_cpanel`
路径) 要求提供的用户名必须对应磁盘上现有的 cPanel
账户 (`-f /var/cpanel/users/$user`)。`root` 用户名将永远无法
满足此检查,因为 root 是系统用户,而不是 cPanel 用户。仅尝试使用 `root` 的检测方法
在此攻击面上会产生漏报。本扫描器使用一个可配置的常见 cPanel 用户名字典来
针对 cPanel 攻击面进行扫描,并在没有此限制的 WHM 攻击面上
回退到随机用户名路径。
## 检测是如何工作的
对于每个目标,扫描器在每个攻击面上执行以下步骤:
1. 发送 `GET /login` 并读取 `Set-Cookie` 头,以获取
`whostmgrsession` (WHM) 或 `cpsession` (cPanel)。该 cookie 包含一个
逗号分隔的会话名称组件。
2. 发送带有 `Authorization: Basic` 头的 `GET /`,其解码值为
`:\xff\nexpired=1`。末尾的 `\nexpired=1` 是会话注入
payload。步骤 1 中的会话 cookie 被原样重放。
3. 读取响应中的 `Location` 头并提取 `cpsessXXXX`
令牌。
4. 使用原始 cookie 发送 `GET //` 并在
正文中查找 `msg_code:[expired_session]`。它的出现证明会话
注入成功并且主机存在漏洞。
在 WHM 上(端口 2087 和 443 上的 `/___proxy_subdomain_whm` 路径),用户名
是随机的一个 `u` 后跟十个十六进制字符。在 cPanel 上(端口 2083 和
443 上的 `/___proxy_subdomain_cpanel` 路径),扫描器遍历其用户名
字典,并在找到第一个匹配项时停止。
默认情况下,扫描器按此顺序探测 2087、2083 和 443,并在
任何攻击面确认存在漏洞时立即停止。
## 安装
```
pip install -r requirements.txt
```
需要 Python 3.8 或更高版本。
## 使用方法
单个目标:
```
python scanner.py example.com
```
通过位置参数指定多个目标:
```
python scanner.py host-a.example.com host-b.example.com:2083
```
包含目标(每行一个)的文件。以 `#` 开头的行将被忽略:
```
python scanner.py -f targets.txt
```
从标准输入读取目标:
```
cat targets.txt | python scanner.py
```
目标可以是主机名或 `host:port`。当指定端口时,
扫描器只探测该端口;否则它将探测 2087、2083 和 443。
### 常用选项
- `-u, --users` — 逗号分隔的 cPanel 用户名,用于在 cPanel
攻击面上尝试。默认为一个小的内置列表。
- `-U, --users-file` — 每行包含一个 cPanel 用户名的文件。
- `-p, --ports` — 当目标上未指定端口时,要探测的
逗号分隔的端口列表。默认为 `2087,2083,443`。
- `-t, --threads` — 用于针对
cPanel 攻击面遍历用户名列表的每目标线程数。默认为 10。
- `-c, --concurrency` — 并行扫描的目标数量。默认为 20。
- `-T, --timeout` — 单次请求的超时时间(秒)。默认为 15。
- `-o, --output` — 随着扫描的进行,将发现的易受攻击目标(每行一个)追加到此文件中。
- `--json` — 将每个目标的 JSON Lines 记录写入此文件。
- `-q, --quiet` — 仅在标准输出上打印易受攻击的目标。连接失败
和干净的目标仍会记录在 `--json` 中并在摘要中计数。
- `--no-progress` — 禁用进度条。
### 输出
对于每个目标,标准输出会写入一行:
```
[!] host VULNERABLE (port 443)
[+] host NOT VULNERABLE
[?] host CONNECTION FAILED
```
最后会在标准错误输出中写入一行带有总计的摘要。进度条
在标准错误输出上渲染,当标准错误输出不是
终端时会自动隐藏。
退出代码为:如果任何目标存在漏洞则为 `0`,如果所有可达目标均安全
则为 `1`,如果没有目标可达则为 `2`。
### 示例
扫描一系列目标,将命中的结果写入文件,并在标准输出上保持静默:
```
python scanner.py -f targets.txt -o vulnerable.txt -q
```
使用自定义用户名字典针对 cPanel 攻击面进行扫描,提高
并发数,并生成用于下游处理的 JSON 输出:
```
python scanner.py -f targets.txt -U cpanel-users.txt -c 100 --json results.jsonl
```
探测一组非默认端口:
```
python scanner.py -p 2083,2087,8443 -f targets.txt
```
## 安全性说明
该扫描器仅发送确认会话注入所需的请求。
它不以任何真实用户身份登录,不针对 `root` 账户,不
提权至 shell,也不会对目标系统上的任何有效账户
累积密码尝试失败事件。它所匹配的标记
(`msg_code:[expired_session]`) 是由应用程序本身在
响应被注入的 `expired=1` 会话字段时生成的,并且与
上游 cPanel 登录页面在重放合法过期的会话时
使用的指示符相同。
标签:CISA项目, cPanel, cphulkd, CVE-2026-41940, ProxyPass, WHM, 代理路径, 加密, 安全测试, 密码管理, 攻击性安全, 数据统计, 漏报率, 漏洞利用验证, 漏洞扫描器, 端口扫描, 网络安全, 网络资产测绘, 认证绕过, 误报率, 身份验证绕过, 逆向工具, 隐私保护