Aller au contenu

CVE-2026-42016 : élévation de privilèges dans JFrog Artifactory par contournement de validation de portée de jeton

HERMES

SCORE DE MENACE HERMES & ÉLÉVATION DE PRIVILÈGES DANS ARTIFACTORY

Cible : JFrog Artifactory (Gestionnaire de Dépôt Binaire Self-Hosted)
Confiance : 99%
94 / 100
CRITIQUE

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 19 / 20
Militarisation 19 / 20
Exposition 18 / 20
Prévalence 18 / 20
Impact 20 / 20
Maturité de l'exploit 19 / 20
Potentiel d'attaque en chaîne 20 / 20
⚖️ Divergence & Justification opérationnelle

Le CVSS v3.1 attribue à la CVE-2026-42016 le score de 8.8 (Élevé, CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H). Le score de menace Hermes évalue la sévérité à 94 (CRITIQUE). Cette divergence s'explique par le fait que la possession de n'importe quel jeton valablement signé — y compris un jeton développeur restreint, un compte de service ou un jeton anonyme issu de la CVE-2026-42018 — permet une élévation immédiate au rang d'administrateur, ouvrant la voie à la substitution malveillante de binaires et à l'empoisonnement global de la supply chain CI/CD.

🕸️ Graphe de connaissances connecté & Provenance

CVE-2026-42016: Privilege Escalation in JFrog Artifactory via Token Scope Authorization Validation 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 :

1. Contexte technique & matrice des versions affectées

Section intitulée « 1. Contexte technique & matrice des versions affectées »
ParamètreSpécification TechniqueContexte Threat Intelligence
Identifiant CVECVE-2026-42016Enregistrement officiel NVD & CISA KEV
Faiblesse CWECWE-863 (Incorrect Authorization)Défaut de contrôle de portée dans l’intercepteur de jeton
Vecteur réseauHTTP/HTTPS (8081/TCP, 8082/TCP)Requêtes API REST avec jeton porteur (Bearer Token)
Composant vulnérableIntercepteur d’autorisation du service AccessFiltre d’application des scopes de jeton
Versions affectéesVersions Self-Hosted < 7.133.11Déploiements locaux d’entreprise
Version corrigée7.133.11Correctif officiel de sécurité (27 juillet 2026)
Inclusion CISA KEV11 septembre 2026 (Échéance : 25 septembre 2026)Triage Forensique : Non
Vecteur d’exploitationChaînage avec la CVE-2026-42018 ou comptes restreintsEmpoisonnement de la supply chain logicielle

2. Décomposition technique approfondie & cause racine

Section intitulée « 2. Décomposition technique approfondie & cause racine »

Lorsqu’une requête HTTP est transmise avec l’en-tête Authorization: Bearer <JWT>, le filtre d’authentification d’Artifactory procède à la vérification du jeton.

Dans les versions antérieures à la 7.133.11, le filtre vérifiait :

  1. La signature cryptographique du jeton (via la clé publique RSA/JWK du service Access).
  2. L’absence d’expiration temporelle (exp > now).
  3. La concordance de l’émetteur (iss == "artifactory-service").

Cependant, il omettait de valider le champ scope vis-à-vis des exigences d’accès de la route API cible :

// Représentation conceptuelle du code vulnérable dans l'intercepteur de jeton
public boolean authorize(HttpServletRequest request, JwtToken token) {
// Étape 1 : Vérification de la signature
if (!cryptoService.verifySignature(token)) {
return false;
}
// Étape 2 : Vérification de l'expiration
if (token.isExpired()) {
return false;
}
// Étape 3 : Vérification de l'émetteur
if (!"artifactory-service".equals(token.getIssuer())) {
return false;
}
// FAILLE CRITIQUE : Le filtre n'inspecte pas token.getScopes() !
// Tout jeton authentique émis par artifactory-service est considéré comme valide,
// et le contexte d'exécution est promu avec les privilèges administrateur !
SecurityContextHolder.getContext().setAuthentication(
new ArtifactoryAuthentication(token.getSubject(), Authorities.ADMIN)
);
return true;
}

Ce raccourci conférait un contexte administrateur global à n’importe quel jeton, permettant à un utilisateur restreint ou anonyme d’accéder aux API critiques telles que /access/api/v1/users.

sequenceDiagram
autonumber
actor Attaquant as Attaquant (Jeton Restreint ou Anonyme)
participant Passerelle as Passerelle Artifactory (Port 8082)
participant Filtre as Filtre d'Autorisation de Jeton
participant APIAdmin as Contrôleurs d'Administration & Sécurité
participant Stockage as Dépôts de Binaires de Production
Attaquant->>Passerelle: POST /access/api/v1/users (Authorization: Bearer <jeton_restreint>)
Passerelle->>Filtre: Interception de la requête pour contrôle
Note over Filtre: 1. Signature : VALIDE<br/>2. Émetteur : VALIDE ("artifactory-service")<br/>3. Contrôle de portée : OMIS !
Filtre->>APIAdmin: Transmission avec contexte administrateur
APIAdmin->>Stockage: Création d'un compte administrateur pirate "shadow_admin"
Stockage-->>APIAdmin: 201 Created
APIAdmin-->>Passerelle: 201 Created
Passerelle-->>Attaquant: 201 Created (Compte administrateur créé)
Note over Attaquant: Connexion en tant qu'administrateur.<br/>Remplacement de paquets logiciels officiels par des versions piégées !

L’exploitation conjointe de la vulnérabilité permet de mener une attaque dévastatrice sur la supply chain logicielle :

  1. Phase 1 : obtention du jeton : L’attaquant récupère un jeton valide sans authentification en exploitant la CVE-2026-42018, ou utilise un jeton de service CI/CD restreint.
  2. Phase 2 : création de compte administrateur persistant : Il interroge l’API de gestion des utilisateurs avec le jeton à faible privilège :
    POST /access/api/v1/users HTTP/1.1
    Host: artifactory.internal.corp:8082
    Authorization: Bearer eyJhbGciOiJSUzI1Ni...
    Content-Type: application/json
    {
    "username": "secops_audit_agent",
    "password": "CompliantPassword2026!",
    "email": "audit@secops.corp",
    "admin": true
    }
  3. Phase 3 : altération des artefacts de production : Une fois connecté avec les droits d’administration, l’adversaire remplace des paquets vérifiés par des versions infectées, compromettant l’ensemble des systèmes clients qui déploient ces livrables.

TactiqueIdentifiantNom de la TechniqueManifestation dans l’Attaque
Élévation de privilègesT1068Exploitation for Privilege EscalationContournement des restrictions de scope pour obtenir les droits root
PersistanceT1098Account ManipulationCréation de comptes administrateurs clandestins
Évasion de défenseT1556Modify Authentication ProcessExploitation de l’omission de vérification des portées de jeton
ImpactT1495Firmware / Software Supply Chain CompromiseAltération de paquets et d’images de conteneurs dans le dépôt

A. Règle Sigma : actions administratives non autorisées via jeton

Section intitulée « A. Règle Sigma : actions administratives non autorisées via jeton »
title: Élévation de privilèges Artifactory via omission de validation de portée de jeton
id: c3d4e5f6-4201-4b89-0123-cve202642016
status: production
description: Détecte des appels d'administration sur Artifactory effectués par des jetons anonymes ou à faibles privilèges (CVE-2026-42016)
author: Hermes Codex Cyber Threat Intelligence
date: 2026-09-11
logsource:
category: webserver
service: artifactory_access_request
detection:
selection:
cs_method: 'POST'
cs_uri_stem|contains:
- '/access/api/v1/users'
- '/artifactory/api/security/users'
- '/artifactory/api/security/permissions'
c_user:
- 'anonymous'
- '*developer*'
- '*reader*'
condition: selection
fields:
- c_ip
- c_user
- cs_uri_stem
- sc_status
falsepositives:
- Aucune détection légitime attendue ; des comptes restreints ne doivent jamais pouvoir créer des utilisateurs
level: critical
tags:
- attack.privilege_escalation
- attack.t1068
- attack.persistence
- attack.t1098
- cve.2026.42016
alert http $EXTERNAL_NET any -> $HTTP_SERVERS [8081,8082] (
msg:"HERMES - JFrog Artifactory Tentative d'elevation de privilege via jeton (CVE-2026-42016)";
flow:established,to_server;
http.method; content:"POST";
http.uri; content:"/access/api/v1/users";
http.header; content:"Authorization: Bearer";
classtype:attempted-admin;
sid:202642016;
rev:1;
reference:cve,2026-42016;
)

  1. Journaux du service d’accès (access-service.log) : Rechercher la création de comptes administrateurs par des identités non autorisées :
    Fenêtre de terminal
    grep -E 'User created:.*by subject=(anonymous|readonly)' /var/opt/jfrog/artifactory/log/access-service.log
  2. Audit des utilisateurs administrateurs : Lister l’ensemble des comptes administrateurs actifs et vérifier leur légitimité :
    Fenêtre de terminal
    curl -s -u admin:<mot_de_passe> http://localhost:8082/access/api/v1/users | jq '.users[] | select(.admin == true)'
  3. Contrôle d’intégrité des dépôts : Comparer les sommes de contrôle (SHA-256) des binaires en production avec les artefacts validés lors des builds CI/CD initiaux.

  1. Application du correctif officiel : Mettre à niveau immédiatement JFrog Artifactory vers la version 7.133.11 ou supérieure.
  2. Révocation des jetons compromis : Révoquer immédiatement l’ensemble des clés API et jetons d’accès émis pendant la période d’exposition potentielle.
  3. Cloisonnement réseau : Isoler les ports d’administration d’Artifactory (8082/TCP) et réserver leur accès aux seuls réseaux d’administration sécurisés.