
Spring ha confermato l'RCE nel Spring Framework. Il team ha appena pubblicato la dichiarazione insieme alle guide di mitigazione per il problema. Ora, questa vulnerabilità può essere tracciata come CVE-2022-22965.
Spring ha confermato la RCE nel framework Spring. Il team ha appena pubblicato la dichiarazione insieme alle guide di mitigazione per il problema. Ora, questa vulnerabilità può essere tracciata come CVE-2022-22965.
Alcune informazioni sulla vulnerabilità Spring4Shell e hanno condiviso i dettagli nel post Spring4Shell: Details and Exploit. Inoltre, il team di sicurezza di Praetorian ha confermato che Spring Core su JDK9+ è vulnerabile all'esecuzione di codice remoto a causa di un bypass per CVE-2010-1622.
Inizialmente, è iniziato il 30 marzo, il primo avviso della vulnerabilità è stato accennato dal leader del team KnownSec 404, Heige. Ha twittato con il messaggio di avvertimento "Spring core RCE (JDK >=9" insieme all'immagine del PoC.

Mentre pubblichiamo la storia della vulnerabilità, Heige scompare da Twitter. Non si conosce il motivo, ma potrebbe esserci qualcosa.
Alla fine del 2021, internet era in fermento per il rilascio di una vulnerabilità zero-day di esecuzione di codice remoto, nota anche come Log4Shell, in Apache Log4j2. La vulnerabilità è stata trovata dal team di sicurezza di Alibaba Cloud.
Oggi, i ricercatori hanno trovato un'altra vulnerabilità grave che potrebbe causare danni ingenti. Ora il bug è tracciato come CVE-2022-22965, possiamo chiamarlo Spring4Shell. La vulnerabilità esiste nel core di Spring con versione JDK maggiore o uguale a 9.0.
Il framework Spring e i framework derivati: file spring-beans-*.jar o CachedIntrospectionResults.class
Tutti i dettagli di seguito sono ora confermati. Non mi assumo la responsabilità per eventuali danni causati.
Come uno dei framework open-source Java leggeri più popolari al mondo, Spring consente agli sviluppatori di concentrarsi sulla logica di business e semplifica il ciclo di sviluppo delle applicazioni Java enterprise.
Lo sfruttamento richiede un endpoint con DataBinder abilitato (ad esempio, una richiesta POST che decodifica automaticamente i dati dal corpo della richiesta) e dipende fortemente dal contenitore servlet dell'applicazione. Ad esempio, quando Spring è distribuito su Apache Tomcat, WebAppClassLoader è accessibile, consentendo a un attaccante di chiamare getter e setter per scrivere infine un file JSP dannoso su disco. Tuttavia, se Spring è distribuito utilizzando il contenitore servlet Tomcat Embedded, il classloader è un LaunchedURLClassLoader che ha accesso limitato.
Tuttavia, nella versione JDK9 (e successive) del framework Spring, un attaccante remoto può ottenere l'oggetto AccessLogValve e valori di campo dannosi attraverso la funzione di binding dei parametri del framework, a condizione che siano soddisfatte determinate condizioni.
Sul server in esecuzione del sistema dell'organizzazione, eseguire il comando "java -version" per controllare la versione JDK in esecuzione. Se il numero di versione è minore o uguale a 8, non è affetto dalla vulnerabilità.
Dopo aver completato i due passaggi di risoluzione dei problemi sopra indicati, le seguenti due condizioni devono essere soddisfatte contemporaneamente per determinare che è affetto da questa vulnerabilità:
Ora il team Spring ha corretto la vulnerabilità e ha rilasciato le ultime versioni di Spring Boot 2.6.6 e 2.5.12 che dipendono da Spring Framework 5.3.18
Sui dispositivi di protezione di rete come WAF, implementare il filtraggio delle regole per stringhe come "class.", "Class.", ".class." e ".Class." in base alla situazione del traffico effettivo dei servizi distribuiti. Dopo aver filtrato le regole, testare l'operatività del business per evitare impatti aggiuntivi.
La riparazione temporanea della falla deve essere eseguita nei seguenti due passaggi contemporaneamente:
Cercare l'annotazione @InitBinder globalmente nell'applicazione per vedere se il metodo dataBinder.setDisallowedFields viene chiamato nel corpo del metodo. Se viene trovata l'introduzione di questo frammento di codice, aggiungere {"class.","Class." alla blacklist originale ",".class.", ".Class."}. (Nota: Se questo frammento di codice è usato molto, deve essere aggiunto ovunque)
Creare la seguente classe globale sotto il pacchetto del progetto del sistema applicativo, e assicurarsi che questa classe sia caricata da Spring (si consiglia di aggiungerla nel pacchetto in cui si trova il Controller). Dopo aver aggiunto la classe, il progetto deve essere ricompilato e impacchettato, e testato per la verifica funzionale. e ripubblicare il progetto. import org.springframework.core.annotation.Order;
import org.springframework.web.bind.WebDataBinder;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.InitBinder;
@ControllerAdvice
@Order(10000)
public class GlobalControllerAdvice{
@InitBinder
public void setAllowedFields(webdataBinder dataBinder){
String[]abd=new string[]{"class.*","Class.*","*.class.*","*.Class.*"};
dataBinder.setDisallowedFields(abd);
}
}

Dal Repository Git dei progetti Spring, sembra che lo sviluppatore di Spring stia lavorando a una correzione per la vulnerabilità di esecuzione di codice remoto, ma dobbiamo attendere la conferma ufficiale.