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
Tools/GitHubGitHub/n0n4m3x41/cve-2026-22738-poc
SchwachstellenanalyseExploitationWebanwendungs-ExploitationPapers & ForschungLernen & Bildung
GitHubn0n4m3x41/cve-2026-22738-poc

CVE-2026-22738-POC

Proof-of-Concept-Exploit für CVE-2026-22738, eine kritische SpEL-Injection-RCE in Spring AI SimpleVectorStore, die die Ausführung von OS-Befehlen ohne Authentifizierung demonstriert.

Repository anzeigen
132vor 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 — SpEL-Injection-RCE in Spring AI SimpleVectorStore

CVSS CWE Status

Nicht authentifizierte Remote-Codeausführung über Spring Expression Language (SpEL)-Injection in SimpleVectorStore.similaritySearch().

Betroffene Versionen

| Flag | Standard | Beschreibung | |---|---|---| | `--target` | `http://localhost:8082` | Basis-URL der verwundbaren Anwendung | | `--wait` | aus | Warten, bis das Ziel bereit ist (nützlich nach `docker compose up`) |
ArtefaktVerwundbarBehoben
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

Fix-Commit: ba9220b22383e430d5f801ce8e4fa01cf9e75f29


Verwundbarkeit

SimpleVectorStore.similaritySearch() übergibt den vom Aufrufer gelieferten Filter-Schlüsselnamen unverändert in eine SpEL-Vorlage, die von 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(...)

in den Filter-Schlüssel, um eine nicht authentifizierte OS-Befehlsausführung zu erreichen.

Details zur Umgehung

Naive Injection funktioniert nicht ohne Weiteres — zwei Parser-Eigenheiten müssen umgangen werden:

  1. Entfernung einfacher Anführungszeichen — ein Schlüssel, der mit ' beginnt, wird als Zeichenfolge in Anführungszeichen behandelt; die äußeren Anführungszeichen werden entfernt, wodurch die Nutzlast verstümmelt wird.
  2. Doppelte Anführungszeichen als Hülle — das Umschließen der Nutzlast mit "..." führt dazu, dass der Parser die äußeren doppelten Anführungszeichen entfernt und der innere SpEL-Ausdruck intakt als Schlüsselwert bleibt, der an #metadata['<KEY>'] übergeben wird.
  3. Leerer Metadaten-Schlüssel — die Verwendung von #metadata[''] auf beiden Seiten des injizierten Ausdrucks (anstelle einer undefinierten Variable) vermeidet einen unknown variable-SpEL-Fehler, während exec() dennoch ausgelöst wird.

Der resultierende ausgewertete 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 EL1030E — den SpEL-Laufzeitfehler:

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

Dieser Fehler wird nach der Rückkehr von exec() ausgelöst, was die OS-Befehlsausführung bestätigt, ohne dass ein Out-of-Band-Callback erforderlich ist.


Verwendung

Voraussetzungen:

root@kitploit:~
pip install requests

Exploit ausführen:

root@kitploit:~
python3 exploit.py [--target http://localhost:8082] [--wait]
image

Docker Desktop (macOS/Windows): für Callback-Nutzlasten host.docker.internal anstelle von 127.0.0.1 verwenden.


Exploit-Schritte

Der PoC führt fünf aufeinanderfolgende Schritte aus:

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

Haftungsausschluss

Dieser Proof-of-Concept dient ausschließlich Bildungs- und autorisierten Sicherheitstestzwecken. Verwenden Sie ihn nicht gegen Systeme, die Sie nicht besitzen oder für die Sie keine ausdrückliche schriftliche Genehmigung zum Testen haben.

Tool herunterladen