Aller au contenu

CVE-2026-82329 : contournement d'authentification par clé fantôme dans JFrog Artifactory

HTS

HERMES THREAT SCORE & EXPLOITABILITÉ OPÉRATIONNELLE

Cible : Déploiements Auto-Hébergés JFrog Artifactory (Service JFrog Access)
Confiance : 99%
98 / 100
EXTRÊME

Mesure la pertinence opérationnelle réelle, la militarisation de l'exploit et la posture de menace active.

Décomposition des dimensions
Exploitabilité 20 / 20
Activité de menace 20 / 20
Militarisation 20 / 20
Exposition 15 / 20
Prévalence 13 / 20
Impact 10 / 20
⚖️ Divergence & Justification opérationnelle

Classé 98 EXTREME par Hermes en raison d'une exploitation active dans la nature contre des chaînes CI/CD d'entreprises, de l'inscription au catalogue CISA KEV (2 septembre 2026) et de son impact dévastateur permettant l'empoisonnement d'images Docker et de modèles d'IA.

🕸️ Graphe de connaissances connecté & Provenance

CVE-2026-82329: JFrog Artifactory Phantom Join-Key Authentication BypassVULNÉRABILITÉ

Nœuds connectés : 1
Relations sortantes actives
→ affectsCOMPOSANTJFrog Artifactory
98% VERY_HIGH

Software platform affected by security vulnerabilities and agentic attack patterns.

🔍 Pourquoi cette relation ? (Preuves & Provenance)

“Confirmed security vulnerability in JFrog Artifactory documented in Hermes dossier.”

Preuves vérifiées associées :

JFrog Artifactory repose sur une architecture de microservices dans laquelle le service JFrog Access centralise l’authentification des utilisateurs, la gestion des rôles (RBAC), la délivrance des jetons JWT et la confiance mutuelle entre les nœuds du cluster :

Frontière de Confiance de JFrog Artifactory & Faille de Clé Fantôme :
Requête de l'Attaquant (Distant & Non Authentifié)
│
▼
[Passerelle Artifactory / Proxy Inverse Nginx]
│
▼
[Route Interne du Microservice : /access/api/v1/...]
│
▼
Protocole de Jonction de Nœud & Émission de Jeton :
┌────────────────────────────────────────────────────────────────────────┐
│ Moteur de Validation d'Identifiants JFrog Access : │
│ │
│ 1. Lecture de la clé de jonction dans `system.yaml` : │
│ `joinKey = readKeyFromConfig()` │
│ │
│ 2. [CHEMIN DE VULNÉRABILITÉ] │
│ Si joinKey est absent ou nul dans l'installation par défaut : │
│ Le moteur NE BLOQUE PAS le démarrage du service. │
│ Il bascule sur un état déterministe non initialisé dit « Fantôme »│
│ directement en mémoire. │
│ │
│ 3. Vérification de la signature HMAC de la requête : │
│ `isValid = verifyHMAC(requestSignature, phantomKey)` -> VRAI │
└────────────────────────────────────────────────────────────────────────┘
│
▼
[Jeton Administratif Forgé et Validé : jfrog-admin-token]
│
▼
Prise de Contrôle Totale des Dépôts de Paquets et Modèles d'IA

Le défaut d’initialisation de la clé de jonction

Section intitulée « Le défaut d’initialisation de la clé de jonction »

Pour permettre le déploiement automatisé en grappe (haute disponibilité sous Kubernetes ou Helm) sans exiger de saisie manuelle de mot de passe, JFrog Access exploite une clé symétrique partagée appelée Join Key.

La vulnérabilité découle de la conjonction de deux faiblesses architecturales :

  1. Démarrage sans clé obligatoire : lors d’un déploiement sans configuration explicite de secrets, le démon Access acceptait de démarrer même si la clé de jonction était nulle ou vide.
  2. Signature de secours prévisible : lors de la réception d’une demande d’émission de jeton portant un en-tête d’authentification inter-nœuds, la fonction de vérification cryptographique n’interrompait pas l’opération en cas de clé nulle. Elle calculait le HMAC contre un tampon mémoire vide ou une constante résiduelle.

Un attaquant connaissant cette signature de repli peut soumettre une requête directement à l’API interne d’Access. Le service conclut que la demande provient d’un nœud légitime du cluster et émet un jeton JWT de niveau admin persistant.

L’attaque nécessite uniquement un accès réseau au port d’administration d’Artifactory (par défaut 8081 ou 8082) et ne requiert aucun compte préalable ni privilège.

L’adversaire transmet une requête HTTP forgée à l’API d’émission de jetons de JFrog Access :

POST /access/api/v1/tokens HTTP/1.1
Host: artifactory.entreprise.lan:8082
Content-Type: application/json
X-JFrog-Join-Signature: <Signature_HMAC_Calculee_Cle_Fantome>
{
"username": "admin-bootstrap-recovery",
"scope": "applied-permissions/admin",
"expires_in": 31536000,
"refreshable": true
}

Le démon Access valide la signature et retourne immédiatement un jeton JWT porteur des droits d’administration suprêmes :

{
"token_id": "9f42d13b-8210-4e3a-9281-c91823290001",
"access_token": "eyJ2ZXIiOiIyIiwidHlwIjoiSldUIiwiYWxnIjoiUlMyNTYifQ...",
"expires_in": 31536000,
"scope": "applied-permissions/admin",
"token_type": "Bearer"
}

Muni de ce jeton administratif, l’attaquant dispose d’un levier d’action dévastateur :

  • Empoisonnement du registre Docker / OCI : remplacement des images de conteneurs de référence de l’entreprise (python:3.11-slim, services métier) par des versions altérées intégrant des portes dérobées.
  • Détournement des dépendances (PyPI, npm, maven) : injection de bibliothèques internes compromises exécutant des scripts malveillants lors de la commande npm install ou pip install sur les postes des développeurs et les runners CI/CD.
  • Altération des modèles d’intelligence artificielle : Artifactory stocke couramment des checkpoints de modèles d’IA (Hugging Face, GGUF, ONNX). Les attaquants peuvent modifier les poids des tenseurs ou insérer des charges utiles sérialisées (fichiers .pickle) pour déclencher une exécution de code lors du chargement des modèles en production.
  • Exfiltration de clés de signature : extraction des certificats de signature de code et des identifiants cloud d’infrastructure (AWS, Azure, GCP).

Indicateurs forensiques & guide de chasse aux menaces

Section intitulée « Indicateurs forensiques & guide de chasse aux menaces »

Les équipes DFIR enquêtant sur une instance Artifactory auto-hébergée doivent inspecter les journaux suivants :

Examinez access-request.log, artifactory-request.log et les logs du reverse-proxy :

  • Appels suspects aux endpoints access : requêtes POST vers /access/api/v1/tokens ou /access/api/v1/nodes/join provenant d’adresses IP extérieures au cluster.
  • Créations de jetons non référencées : entrées dans access-security-audit.log indiquant l’attribution de privilèges applied-permissions/admin à des identités inhabituelles :
    2026-09-03T14:22:18.112Z|TOKEN_CREATED|IP=198.51.100.44|USER=admin-bootstrap-recovery|SCOPE=applied-permissions/admin
  • Vérification des sommes de contrôle modifiées : détecter tout changement inattendu du hash SHA-256 sur des versions de paquets déjà publiées sans commit correspondant dans le dépôt Git.
  • Audit des fichiers de métadonnées : analyser les fichiers d’historique de construction (artifactory-build-info) pour déceler des numéros de build incohérents ou des signatures absentes.
title: Création Suspecte de Jeton Administrateur JFrog Artifactory (CVE-2026-82329)
id: 82329b01-4f10-4e2b-a823-290000082329
status: experimental
description: Détecte les requêtes de création de jeton administrateur non autorisées ciblant l'API JFrog Access, révélatrices de l'exploitation de CVE-2026-82329.
references:
- https://jfrog.com/help/r/jfrog-security-advisories/cve-2026-82329
- https://www.cisa.gov/known-exploited-vulnerabilities-catalog
author: Hermes Codex CTI
date: 2026-09-08
logsource:
category: webserver
product: jfrog_artifactory
detection:
selection_endpoint:
cs-method: 'POST'
cs-uri-stem|contains:
- '/access/api/v1/tokens'
- '/access/api/v1/nodes/join'
selection_status:
sc-status: 200
filter_internal_nodes:
c-ip|cidr:
- '10.0.0.0/8'
- '172.16.0.0/12'
- '192.168.0.0/16'
- '127.0.0.1/32'
condition: selection_endpoint and selection_status and not filter_internal_nodes
falsepositives:
- Opérations manuelles d'administration autorisées (valider avec l'équipe DevOps).
level: critical
tags:
- attack.initial_access
- attack.persistence
- attack.t1190
- attack.t1078.004
- cve.2026.82329

Les gestionnaires d’instances auto-hébergées doivent appliquer sans délai la version corrigée de leur branche :

BrancheVersions VulnérablesVersion Corrigée Minimale
7.111.x≤ 7.111.207.111.21
7.117.x≤ 7.117.277.117.28
7.125.x≤ 7.125.197.125.20
7.133.x≤ 7.133.287.133.29
7.146.x≤ 7.146.377.146.38
7.161.x≤ 7.161.197.161.20

Note : les instances JFrog Cloud (SaaS) ont été corrigées en amont par JFrog et ne nécessitent aucune intervention client.

2. Révocation des jetons et sécurisation post-correctif

Section intitulée « 2. Révocation des jetons et sécurisation post-correctif »

L’application du patch ne révoquant pas automatiquement les jetons générés avant la mise à jour, l’installation du correctif doit impérativement s’accompagner des étapes suivantes :

  1. Révocation de tous les jetons suspects : lister et révoquer l’intégralité des jetons d’accès émis pendant la période d’exposition.
  2. Définition explicite de la clé de jonction : renseigner une clé de jonction à forte entropie (256 bits) dans le fichier system.yaml :
    shared:
    security:
    joinKey: "<GENERER_CLE_HEXADECIMALE_64_CARACTERES>"
  3. Confinement réseau : restreindre les ports 8081 et 8082 aux seuls sous-réseaux internes autorisés derrière un VPN d’entreprise.