En bref

  • CVE-2026-120209 : exécution de code à distance sans authentification via un secret JWT codé en dur dans AJ-Report — CVSS 9.8
  • Systèmes affectés : AJ-Report toutes versions jusqu'à 1.7.1 incluse (anji-plus/AJ-Report)
  • Action urgente : mettre à jour AJ-Report au-delà de la version 1.7.1 ou bloquer l'accès à l'endpoint testTransform

Les faits

La vulnérabilité CVE-2026-120209 a été divulguée publiquement le 31 octobre 2026 et affecte AJ-Report dans toutes les versions jusqu'à 1.7.1 incluse. Notée CVSS 9.8 (critique), cette faille permet à tout attaquant distant non authentifié d'exécuter du code arbitraire sur le serveur hébergeant AJ-Report en exploitant un secret JWT codé en dur partagé par l'ensemble des installations du logiciel. La classification CWE associée est CWE-321 (Use of Hard-coded Cryptographic Key), l'une des erreurs de conception les plus critiques dans les applications utilisant des tokens d'authentification.

AJ-Report est une plateforme open source de reporting et de visualisation de données développée par Anji Plus et largement déployée dans des environnements d'entreprise en Asie et dans des projets data internationaux. L'outil permet la création de tableaux de bord, la connexion à des sources de données multiples (bases SQL, API REST) et la génération de rapports automatisés. Sa fonctionnalité de partage de rapports (Share-Token) repose sur des JSON Web Tokens (JWT) pour autoriser l'accès aux rapports partagés sans authentification complète.

Le cœur de la vulnérabilité CVE-2026-120209 réside dans l'utilisation d'un secret JWT identique et codé en dur dans le code source de toutes les installations d'AJ-Report jusqu'à la version 1.7.1. Un JSON Web Token est composé d'un header, d'un payload et d'une signature HMAC générée avec ce secret. Si le secret est connu, n'importe qui peut générer des tokens valides qui seront acceptés par l'application comme authentiques. Dans le cas d'AJ-Report, ce secret est public par nature puisqu'il est présent dans le code source open source du projet, accessible sur GitHub.

L'exploitation de CVE-2026-120209 suit un schéma en deux étapes. Premièrement, l'attaquant récupère le secret JWT hardcodé depuis le code source public d'AJ-Report sur GitHub (projet anji-plus/AJ-Report). Deuxièmement, il forge un Share-Token valide avec des claims lui permettant d'accéder à l'endpoint testTransform de l'API AJ-Report. Cet endpoint, destiné aux tests de transformation de données, accepte et exécute du code côté serveur sans vérification supplémentaire de l'identité de l'appelant lorsque le JWT est valide. Le résultat est une exécution de code arbitraire à distance (RCE) sans aucune authentification au sens traditionnel du terme.

Le vecteur CVSS de CVE-2026-120209 est AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H, soit un score de 9.8. L'absence de privilèges requis (PR:N) et la complexité d'attaque faible (AC:L) reflètent parfaitement la nature de l'exploitation : n'importe qui disposant de l'URL d'une instance AJ-Report accessible en réseau peut l'exploiter, sans credential préalable. Cette caractéristique rend CVE-2026-120209 particulièrement dangereuse pour toutes les instances AJ-Report exposées sur Internet ou accessibles depuis des zones réseau non sécurisées.

Selon les analyses publiées par TheHackerWire et radar.offseq.com, aucun exploit public n'a été confirmé à la date de divulgation du 31 octobre 2026. Cependant, la nature de la vulnérabilité (secret hardcodé dans le code source open source) signifie que l'exploitation ne requiert pas de recherche technique avancée. Tout développeur ayant accès au code source d'AJ-Report sur GitHub peut reproduire l'attaque en quelques heures. CVE-2026-120209 n'est pas non plus inscrite dans le catalogue KEV de la CISA à ce jour, mais sa criticité technique et son caractère exploitable sans authentification justifient une action immédiate.

Ce type de vulnérabilité — secret cryptographique codé en dur — est une faiblesse architecturale fondamentale qui révèle des lacunes dans le processus de développement sécurisé (Secure Development Lifecycle) de l'application. Une bonne pratique consiste à générer des secrets JWT aléatoires lors de chaque installation et à les stocker de manière sécurisée dans la configuration locale, jamais dans le code source. L'utilisation d'un secret partagé entre toutes les installations d'un logiciel distribué rend la révocation et la rotation des clés pratiquement impossibles sans mise à jour de l'ensemble des déploiements.

AJ-Report est souvent déployé dans des environnements data d'entreprise avec accès direct à des bases de données de production. Un accès RCE sur le serveur AJ-Report peut permettre à un attaquant d'exfiltrer les données de connexion aux sources de données configurées dans l'outil, d'accéder aux bases de données associées, et de rebondir vers d'autres systèmes du réseau interne. L'impact potentiel dépasse largement le périmètre de l'outil de reporting lui-même et peut conduire à une compromission de l'infrastructure data complète de l'organisation ciblée.

Impact et exposition

Toute instance AJ-Report en version 1.7.1 ou antérieure, accessible via le réseau, est vulnérable à CVE-2026-120209. L'absence d'authentification requise signifie que même les instances en accès public (dashboards partagés) sont exposées. Dans les architectures cloud ou SaaS où AJ-Report est exposé sur Internet pour permettre le partage de rapports avec des partenaires externes, la surface d'attaque est maximale.

L'endpoint testTransform, vecteur de l'exploitation, est une fonctionnalité légitime d'AJ-Report permettant de tester des transformations de données. Son accessibilité via un Share-Token forgé permet contourner intégralement le contrôle d'accès applicatif. Dans les déploiements typiques, l'accès RCE permet d'exécuter des commandes système avec les droits de l'utilisateur Java (généralement les droits du service ou d'un compte applicatif), ce qui peut suffire pour accéder aux fichiers de configuration contenant les credentials des sources de données.

Les entreprises utilisant AJ-Report dans des pipelines de Business Intelligence ou de Data Analytics doivent considérer que leurs connections strings de bases de données, credentials d'API et autres secrets stockés dans la configuration d'AJ-Report peuvent avoir été compromis si l'instance est accessible depuis l'extérieur. Un audit de sécurité post-incident est recommandé pour toute instance exposée.

Recommandations immédiates

  • Mettre à jour AJ-Report vers une version corrigeant CVE-2026-120209 au-delà de la 1.7.1 — vérifier les release notes du projet anji-plus/AJ-Report sur GitHub
  • Si la mise à jour est impossible : bloquer l'accès réseau à l'endpoint /dataSetParam/testTransform sur le serveur AJ-Report via règles WAF ou firewall applicatif
  • Restreindre l'accès à l'interface AJ-Report aux seuls réseaux internes autorisés — ne jamais exposer l'interface d'administration sur Internet
  • Auditer les logs d'accès AJ-Report pour détecter des requêtes suspectes vers l'endpoint testTransform avec des tokens inhabituels
  • Faire pivoter (rotation) tous les credentials de sources de données configurés dans AJ-Report si l'instance a été exposée sur un réseau non sécurisé

⚠️ Urgence

CVSS 9.8, exploitation sans authentification possible via secret JWT codé en dur public. Toute instance AJ-Report 1.7.1 ou antérieure accessible en réseau doit être mise à jour ou isolée sans délai. La connaissance du secret JWT est accessible à tous via le code source open source public du projet.

Comment savoir si je suis vulnérable ?

Vérifiez la version d'AJ-Report déployée dans votre organisation : accédez à l'interface d'administration, section À propos ou vérifiez le fichier pom.xml du projet déployé. Si la version est inférieure ou égale à 1.7.1, l'instance est vulnérable à CVE-2026-120209. Vérifiez également si l'endpoint /dataSetParam/testTransform est accessible sans authentification depuis votre réseau ou depuis Internet en envoyant une requête de test. Si l'endpoint répond avec un message d'erreur applicatif (et non un 401 ou 403), l'instance est exposée.

Votre infrastructure est-elle exposée ?

Ayi NEDJIMI réalise des audits ciblés pour identifier et corriger vos vulnérabilités.

Demander un audit