Spring4Shell - PoC
CVE - 2022 - 22965
Versioni interessate:
- Versioni di Spring Framework da 5.3.0 a 5.3.17, da 5.2.0 a 5.2.19 e versioni precedenti
- Java JDK 9
- Versioni di Apache Tomcat inferiori a 10..0.20, 9.0.62 e 8.5.78
- Le applicazioni impacchettate come WAR tradizionale con dipendenza da spring-webmvc o spring-webflux e distribuite su un contenitore Servlet standalone sono interessate
Descrizione
- Il problema può essere elevato tramite manipolazione di classLoader
- Un data binding improprio, utilizzato per popolare un oggetto dai parametri della richiesta (annotazione Request Mapping), causa questa vulnerabilità
- Gli aggressori possono caricare classi arbitrarie e iniettare codice arbitrario che può essere eseguito dall'applicazione
- Una vulnerabilità simile (CVE-2010-1622) era stata divulgata in precedenza e sono state applicate patch per limitare
class.classLoader e class.protectionDomain
- Ma JDK9 ha introdotto un nuovo metodo
class.getMethod(), che aggira tale restrizione usando class.module.classLoader per accedere a qualsiasi proprietà figlia dell'oggetto class
Impatto
- Lo sfruttamento riuscito di questa vulnerabilità può portare all'esecuzione di codice arbitrario sulla macchina vulnerabile.
Applicazione di test
docker build . -t spring4shell-poc-app
Altrimenti, ottieni l'immagine docker da [gokul2/spring4shell-poc]
docker pull gokul2/spring4shell-poc-app
docker run -p 8080:8080 spring4shell-poc-app
- L'applicazione sarà ora disponibile all'indirizzo localhost:8080.
- Esegui il file exploit.py