Aller au contenu

CVE-2026-42018 : exposition et génération de jetons utilisateur anonyme dans JFrog Artifactory

HERMES

SCORE DE MENACE HERMES & EXPOSITION D'AUTHENTIFICATION SUPPLY CHAIN

Cible : JFrog Artifactory (Gestionnaire de Dépôt Binaire Self-Hosted)
Confiance : 98%
89 / 100
ÉLEVÉE

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

Le CVSS v3.1 classe la CVE-2026-42018 à 7.5 (Élevé, CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N). Le score de menace Hermes évalue la sévérité à 89 (ÉLEVÉE). Si l'exploitation isolée se limite à l'obtention d'un jeton en lecture, les cyberattaques dans la nature la combinent systématiquement avec la CVE-2026-42016 pour obtenir une compromission administrative totale et non authentifiée des dépôts logiciels.

🕸️ Graphe de connaissances connecté & Provenance

CVE-2026-42018: Anonymous User Token Generation Exposure in JFrog ArtifactoryVULNÉ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-42018Référencement officiel NVD & CISA KEV
Faiblesse CWECWE-287 (Improper Authentication)Défaillance d’application de la politique d’accès
Vecteur réseauHTTP/HTTPS (8081/TCP, 8082/TCP)Requêtes API REST directes sans authentification
Composant vulnérableService d’émission de jetons (access-service)Gestionnaire de jetons anonymes
Versions affectéesVersions Self-Hosted < 7.111.20 et < 7.133.11Déploiements sur site et serveurs dédiés
Versions corrigées7.111.20 et 7.133.11Correctifs officiels de sécurité
Inclusion CISA KEV11 septembre 2026 (Échéance : 25 septembre 2026)Triage Forensique : Non
Chaînage d’attaqueAssociée systématiquement à la CVE-2026-42016Prise de contrôle administrative totale du registre

2. Décomposition technique approfondie & cause racine

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

A. La défaillance de la génération de jeton anonyme

Section intitulée « A. La défaillance de la génération de jeton anonyme »

Dans une configuration sécurisée d’Artifactory, la désactivation de l’accès anonyme vise à bloquer toute requête ne fournissant pas d’en-tête Authorization.

Toutefois, lors du traitement interne de certaines routes de négociation de jetons, le microservice access-service comportait une branche par défaut qui, en l’absence d’identifiants fournis, instanciat un contexte anonyme et le signait cryptographiquement avec la clé privée de l’instance :

// Représentation conceptuelle de la logique d'émission vulnérable
public TokenResponse issueToken(TokenRequest request) {
if (request.getCredentials() == null) {
// DÉFAILLANCE : Omission de vérifier si l'accès anonyme global est désactivé
// Émet un jeton signé pour le sujet "anonymous"
UserContext anonUser = userManager.getAnonymousUser();
return tokenService.signToken(anonUser, DefaultScopes.READ_ONLY);
}
// Génération standard authentifiée...
}

Ce jeton, valablement signé par l’autorité locale, est accepté par les autres composants internes comme un jeton d’accès légitime.

sequenceDiagram
autonumber
actor Attaquant as Attaquant Externe Non Authentifié
participant Passerelle as Passerelle Artifactory (Port 8082)
participant Access as Service Access (Émetteur de Jetons)
participant Depot as Dépôts de Paquets
Note over Passerelle: Accès anonyme DÉSACTIVÉ dans la config globale
Attaquant->>Passerelle: POST /access/api/v1/tokens/anonymous (Sans Auth)
Passerelle->>Access: Transmission de la requête sans identifiants
Note over Access: Erreur de contrôle de politique.<br/>Signature d'un JWT pour "anonymous" via la clé privée.
Access-->>Passerelle: Retour du jeton JWT porteur valide
Passerelle-->>Attaquant: 200 OK avec le jeton Bearer
Attaquant->>Depot: GET /artifactory/api/storage/... (Authorization: Bearer <token>)
Depot-->>Attaquant: Fuite d'index et de métadonnées de paquets
Note over Attaquant: Utilisation du jeton pour exploiter la CVE-2026-42016<br/>Élévation de privilèges vers Administrateur total !

La criticité réelle de la CVE-2026-42018 réside dans son rôle de déclencheur initial de la chaîne d’attaque :

  1. Étape 1 (CVE-2026-42018) : l’adversaire extrait un jeton d’accès valide sans authentification :
    {
    "sub": "anonymous",
    "iss": "artifactory-service",
    "scope": "applied-permissions/user",
    "exp": 1789123456
    }
  2. Étape 2 (CVE-2026-42016) : l’attaquant présente ce jeton pour invoquer des fonctions d’administration. En raison du défaut de validation des portées (scopes), Artifactory ne vérifie que la signature et l’émetteur, élevant ainsi l’attaquant au rang d’administrateur avec droits complets de lecture, écriture et empoisonnement de la chaîne logistique logicielle.

TactiqueIdentifiantNom de la TechniqueManifestation dans l’Attaque
Accès initialT1190Exploit Public-Facing ApplicationRequête HTTP non authentifiée vers les API de jetons
Accès aux identifiantsT1528Steal Application Access TokenObtention directe de jetons JWT internes valides
DécouverteT1082System Information DiscoveryInterrogation des dépôts et des arborescences de paquets
Évasion de défenseT1556Modify Authentication ProcessContournement de la désactivation de l’accès anonyme

A. Règle Sigma : émission de jetons anonymes non authentifiée

Section intitulée « A. Règle Sigma : émission de jetons anonymes non authentifiée »
title: Demande de génération de jeton anonyme sur JFrog Artifactory
id: b1c2d3e4-4201-4a78-9012-cve202642018
status: production
description: Détecte les requêtes non authentifiées provoquant l'émission d'un jeton anonyme sur Artifactory (CVE-2026-42018)
author: Hermes Codex Cyber Threat Intelligence
date: 2026-09-11
logsource:
category: webserver
service: artifactory_request
detection:
selection:
cs_method: 'POST'
cs_uri_stem|contains:
- '/access/api/v1/tokens'
- '/api/v1/tokens'
c_user: ''
filter_authenticated:
cs_headers|contains: 'Authorization: Bearer'
condition: selection and not filter_authenticated
fields:
- c_ip
- cs_uri_stem
- sc_status
falsepositives:
- Négociations initiales d'outils d'intégration CI/CD automatisés
level: high
tags:
- attack.initial_access
- attack.t1190
- attack.credential_access
- attack.t1528
- cve.2026.42018
alert http $EXTERNAL_NET any -> $HTTP_SERVERS [8081,8082] (
msg:"HERMES - JFrog Artifactory Tentative d'exposition de jeton anonyme (CVE-2026-42018)";
flow:established,to_server;
http.method; content:"POST";
http.uri; content:"/access/api/v1/tokens";
content:!"Authorization:"; http_header;
classtype:attempted-recon;
sid:202642018;
rev:1;
reference:cve,2026-42018;
)

  1. Journaux du service d’accès (access-service.log) : Rechercher les occurrences d’émission de jetons pour anonymous alors que l’accès anonyme était désactivé :
    Fenêtre de terminal
    grep -E 'Token issued for.*sub=anonymous' /var/opt/jfrog/artifactory/log/access-service.log
  2. Journaux de requêtes (artifactory-request.log) : Filtrer les requêtes réussies (code 200) ciblant les endpoints de jetons depuis des adresses IP externes inhabituelles.

  1. Mettre à niveau le serveur Artifactory : Installer immédiatement les versions corrigées 7.111.20, 7.133.11 ou supérieures.
  2. Filtrage périmétrique (WAF) : Bloquer au niveau du reverse proxy les requêtes POST non authentifiées vers /access/api/v1/tokens*.
  3. Révocation des jetons suspects : Inspecter la console d’administration (Administration -> Gestion des utilisateurs -> Jetons d'accès) et révoquer immédiatement tout jeton actif lié à l’utilisateur anonymous.