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, 代理路径, 加密, 安全测试, 密码管理, 攻击性安全, 数据统计, 漏报率, 漏洞利用验证, 漏洞扫描器, 端口扫描, 网络安全, 网络资产测绘, 认证绕过, 误报率, 身份验证绕过, 逆向工具, 隐私保护