
Un'applicazione Spring MVC o Spring WebFlux in esecuzione su JDK 9+ può essere vulnerabile all'esecuzione remota di codice (RCE) tramite il data binding. L'exploit specifico richiede che l'applicazione venga eseguita su Tomcat come distribuzione WAR. Se l'applicazione è distribuita come file jar eseguibile Spring Boot, cioè l'impostazione predefinita, non è vulnerabile all'exploit. Tuttavia, la natura della vulnerabilità è più generale e potrebbero esserci altri modi per sfruttarla.
CVE-2022-22965 (Spring4Shell, SpringShell) è una vulnerabilità nel Spring Framework che utilizza la funzionalità di data binding per associare i dati memorizzati in una richiesta HTTP a determinati oggetti usati da un'applicazione. Il bug esiste nel metodo getCachedIntrospectionResults, che può essere utilizzato per ottenere accesso non autorizzato a tali oggetti passando i loro nomi di classe tramite una richiesta HTTP. Ciò crea rischi di fuga di dati e di esecuzione remota di codice quando vengono utilizzate classi di oggetti speciali. Questa vulnerabilità è simile alla CVE-2010-1622, chiusa da tempo, dove furono aggiunti controlli sul nome della classe come fix, affinché il nome non corrispondesse a classLoader o protectionDomain.
Secondo il sistema CVSSv3, ottiene un punteggio di gravità CRITICA.
Di seguito sono riportate le opportunità di rilevamento per CVE-2022-22965 che possono essere utilizzate per identificare la vulnerabilità.
Le condizioni attuali per la vulnerabilità (come indicato nell'annuncio della vulnerabilità da parte di Spring) possono essere riassunte come segue:
python3 exploit.py http://10.10.10.10/
Nota: la barra finale è molto importante qui!
Cerca l'"action" del modulo di contatto (l'unica richiesta POST disponibile per noi).
<form id="contactForm" action="/" method="post">
L'action è "/", il che significa che il nostro URL target sarà semplicemente: http://10.10.10.10/