
La vulnerabilità CVE-2022-22965, nota come Spring4Shell, è una falla di esecuzione di codice da remoto (RCE) nel framework Java Spring Core, presente nelle versioni precedenti alla 5.3.18 e 5.2.20. Questa vulnerabilità consente a un attaccante di iniettare codice ed eseguirlo da remoto su un server vulnerabile sfruttando una configurazione errata dei log di Tomcat. È stata scoperta a marzo 2022 e colpisce le applicazioni activeMQ, Spring MVC e Spring WebFlux in esecuzione con una versione di JDK >= 9.

Ci assicuriamo già di avere una versione di JDK >= 9, altrimenti la attiviamo:

Prerequisiti ✔ I moduli requests e BeautifulSoup sono necessari affinché l'exploit funzioni. Li installiamo con:
pip3 install bs4
pip3 install requests
Scansione della rete

Qui, abbiamo il servizio activeQM versione 5.17.3 in ascolto.
Nella nostra strategia di exploit utilizzeremo uno script Python sviluppato di nome spring4shell.py allegato a questo progetto.
Obiettivo di questo script: Questo script Python permette di sfruttare la falla CVE-2022-22965 modificando i parametri di logging di Tomcat per iniettare una webshell nei file di log, consentendo così l'esecuzione di comandi remoti sul server compromesso.
Spiegazione del Codice Python
Configurazione delle uscite del terminale:
La classe settings adatta la visualizzazione nel terminale in base alle opzioni scelte, con colori per distinguere i messaggi informativi, di avviso e di errore.
Generazione delle variabili casuali:
Le funzioni filename() e password() generano stringhe esadecimali casuali per proteggere il nome del file e la password della webshell.
Sfruttamento della vulnerabilità:
Lo script invia richieste per modificare i parametri di logging di Tomcat, iniettando frammenti di codice JSP tramite i log. Configurando i log per scrivere nella directory webapps/ROOT, ogni voce diventa interpretabile come codice JSP.
Il file di log iniettato agisce quindi come una webshell accessibile tramite browser per eseguire comandi.
Interazione con la Webshell:
La classe terminal apre un'interfaccia interattiva che consente di inviare comandi al server compromesso. I comandi vengono inviati nel parametro cmd e le risposte vengono visualizzate nel terminale.
Dopo l'esecuzione dello script, viene fornito un collegamento alla webshell: Tramite il comando:
python3 spring4shell.py http://172.17.0.1

Otteniamo un accesso diretto alla shell del nostro server activemq per eseguire tutti i comandi che desideriamo.
Fine dell'exploit!!!