
Vulnerabilità Spring4Shell RCE - CVE-2022-22965
La vulnerabilità spring4shell è stata chiamata così a causa di 2 vulnerabilità trovate e ampiamente sfruttate dagli attaccanti all'inizio del 2022. Una di queste vulnerabilità si trova nel componente del framework chiamato "Spring Cloud Functions" (meno critica) e una seconda, più critica, che è il cuore del framework, chiamata "Spring Core". Con queste 2 vulnerabilità critiche, è nata una battuta dalla community che faceva riferimento a un'altra vulnerabilità critica divulgata nel 2021 chiamata Log4shell.
Una delle caratteristiche di Spring MVC è che istanzia e popola automaticamente un oggetto di una classe specificata quando viene fatta una richiesta in base ai parametri inviati all'endpoint. In termini semplici, questo può essere abusato per sovrascrivere attributi importanti della classe padre, risultando in esecuzione remota di codice. La maggior parte degli exploit per la vulnerabilità Spring4Shell opera forzando l'applicazione a scrivere un file .jsp malevolo sul webserver. Questa webshell può poi essere eseguita per ottenere l'esecuzione remota di comandi sul target.
Perché questo sfruttamento avvenga, è necessario rispettare una serie di fattori che rendono l'ambiente vulnerabile all'importazione di questo file jsp; essi sono:
spring-webmvc e/o spring-webflux dello Spring Framework.Per questa esplorazione, useremo uno script già creato per questo scopo, chiamato poc.py, allegato allo stesso repository.
[!note]
Lo script (poc.py) per questa POC è disponibile in questo stesso repository, controllalo qui sopra.
Usa sempre l'help dello script quando disponibile, sarà più chiaro da capire.
Questo attacco richiede un metodo POST HTTP per poter trasmettere il file al server. Sul server che stiamo attaccando, c'è una POST che possiamo trovare nel view-source della pagina.
Questa è una semplice pagina in cui viene registrata un'email per le notifiche.
nel view-source troviamo la POST di questo form con action per /.
usiamo il nostro script per esplorare questo webserver. Ricordando che dobbiamo eseguire l'attacco nell'azione POST, in questo caso, nella root /.
La webshell è stata inviata con successo! Accediamo al link generato dallo script per confermare l'esplorazione.
Fatto! Siamo riusciti a sfruttare la vulnerabilità inviando una webshell al webserver.
Per rimediare a Spring4Shell, assicurati di usare una versione di Spring rilasciata dopo la patch 18 della release minore 5.3 (cioè dopo la 5.3.18), o dopo la patch 20 se usi la release minore 5.2 (cioè dopo la 5.2.20). Aggiornare la versione del framework è sufficiente per rimuovere la vulnerabilità dalle tue applicazioni.