Spring4Shell: falla critica in Spring Framework, aggiorna le tue applicazioni Java

Una vulnerabilità nel data binding di Spring Framework permette di eseguire codice da remoto su applicazioni con JDK 9 o superiore distribuite su Tomcat. I dettagli sono trapelati prima della patch, uscita il 31 marzo.

Spring4Shell: falla critica in Spring Framework, aggiorna le tue applicazioni Java

A pochi mesi da Log4Shell, il mondo Java ha un’altra emergenza. Il 30 marzo sono trapelati online i dettagli e un exploit di una vulnerabilità in Spring Framework, il framework più diffuso per costruire applicazioni web Java, e il giorno dopo gli sviluppatori hanno anticipato il rilascio delle correzioni. La falla, ribattezzata Spring4Shell, è la CVE-2022-22965 e ha gravità critica.

Spring collega in automatico i parametri di una richiesta HTTP agli oggetti Java dell’applicazione: è il data binding. Con Java 9 sono diventate raggiungibili alcune proprietà interne che una vecchia protezione non bloccava più, e un attaccante può usarle con una semplice richiesta per modificare la configurazione del server. Nell’exploit pubblico cambia le impostazioni dei log di Tomcat e scrive sul disco una web shell JSP, da cui esegue comandi.

L’exploit noto funziona solo se si verificano insieme queste condizioni:

  • Spring Framework dalla 5.3.0 alla 5.3.17, dalla 5.2.0 alla 5.2.19 o versioni più vecchie;
  • JDK 9 o superiore;
  • applicazione Spring MVC o WebFlux;
  • distribuzione come file WAR su Apache Tomcat.

Le applicazioni Spring Boot avviate come JAR eseguibile, la configurazione predefinita, non sono vulnerabili a quell’exploit. Gli sviluppatori avvertono però che la falla è più generale e potrebbero esistere altre strade. I tentativi di attacco su Internet sono già partiti, e l’agenzia statunitense per la cybersicurezza l’ha inserita nel catalogo delle vulnerabilità sfruttate attivamente. Attento anche a non confonderla con la CVE-2022-22963 di Spring Cloud Function, resa pubblica negli stessi giorni: grave anche quella, ma con una correzione diversa.

Aggiornare, o almeno chiudere la strada nota

La soluzione è Spring Framework 5.3.18 o 5.2.20; con Spring Boot, la 2.6.6 o la 2.5.12. Se non puoi aggiornare subito, porta Tomcat alla 10.0.20, 9.0.62 o 8.5.78, che chiudono il vettore noto, oppure torna temporaneamente a Java 8. Un’altra via è bloccare nel codice i campi pericolosi del data binding, come class.* e *.class.*, con un @ControllerAdvice globale.

Poi l’inventario, che dopo Log4Shell dovresti avere già a metà: cerca spring-beans e spring-webmvc nelle dipendenze e negli archivi WAR, compresi quelli di terze parti. E nelle cartelle web di Tomcat cerca file JSP che non riconosci.

Condividi LinkedIn X Telegram

Continua a leggere