🔍 Contexte
Publié le 19 mars 2026 par SecureLayer7 (Sandeep Kamble, outil Bugdazz / modèle Rabit0), cet article présente la découverte et l’analyse technique de CVE-2026-22730, une vulnérabilité d’injection SQL de sévérité haute (CVSS 8.8) affectant le composant MariaDB vector store de Spring AI. La découverte a été faite lors d’un audit de pré-production pour une entreprise de services financiers déployant un assistant IA interne basé sur une architecture RAG.
🐛 Vulnérabilité
La faille réside dans la méthode doSingleValue() de la classe MariaDBFilterExpressionConverter (fichier MariaDBFilterExpressionConverter.java, ligne 49). Les valeurs de type String sont encadrées de guillemets simples via String.format("'%s'", value) sans aucun échappement, permettant l’injection SQL si la valeur provient d’une entrée utilisateur.
Deux points d’injection ont été identifiés dans MariaDBVectorStore.java :
- Ligne 355 : requête de similarité (
SELECT) — le filtre est inséré viaString.formathors de tout paramètre lié (?) - Ligne 329 : suppression par filtre (
DELETE) — la clauseWHEREentière est construite dynamiquement sans paramétrage
💥 Impact
- Contournement du contrôle d’accès : un employé authentifié peut récupérer des documents de tous les départements (ex. : Finance, Legal) sans privilèges élevés
- Exfiltration silencieuse : le LLM incorpore les documents non autorisés dans ses réponses sans aucune indication d’erreur
- Destruction de données : un payload
' OR '1'='1sur le chemin DELETE supprime l’intégralité du vector store en une seule requête
🛠️ Versions affectées et correctif
| Versions affectées | Version corrigée |
|---|---|
| Spring AI 1.0.x ≤ 1.0.3 | 1.0.4 |
| Spring AI 1.1.x ≤ 1.1.2 | 1.1.3 |
Le commit 4602c23 (6 mars 2026) introduit la méthode emitSqlString() qui échappe caractère par caractère (guillemets simples doublés, backslashes doublés, caractères de contrôle). La méthode doSingleValue est rendue abstraite dans AbstractFilterExpressionConverter pour forcer chaque adaptateur à l’implémenter explicitement.
📅 Timeline de divulgation
- 31 décembre 2025 : advisory soumis à l’équipe Spring Security
- 17 mars 2026 : correctif publié, advisory fermé
- 19 mars 2026 : publication de l’article
📄 Type d’article
Il s’agit d’un rapport de vulnérabilité avec preuve de concept (PoC) détaillée, visant à documenter techniquement la faille, démontrer son exploitabilité et informer les utilisateurs de Spring AI des versions affectées et du correctif disponible.
🧠 TTPs et IOCs détectés
TTP
- T1190 — Exploit Public-Facing Application (Initial Access)
- T1078 — Valid Accounts (Defense Evasion)
- T1565.001 — Stored Data Manipulation (Impact)
- T1530 — Data from Cloud Storage (Collection)
IOC
- URLs :
https://github.com/advisories/GHSA-c267-rfvc-mvpm - URLs :
https://www.cyber.gc.ca/en/alerts-advisories/spring-security-advisory-av26-245 - CVEs :
CVE-2026-22730 - Fichiers :
MariaDBFilterExpressionConverter.java - Fichiers :
MariaDBVectorStore.java - Chemins :
vector-stores/spring-ai-mariadb-store/src/main/java/org/springframework/ai/vectorstore/mariadb/MariaDBFilterExpressionConverter.java
Malware / Outils
- Bugdazz (tool)
- Rabit0 (tool)
🔗 Source originale : https://blog.securelayer7.net/cve-2026-22730-sql-injection-spring-ai-mariadb/