
Spring Framework CVE-2022-22965: verifica delle condizioni di impatto locale, correzione dell'aggiornamento della versione e progetto di ritest
Questo progetto è utilizzato per apprendere e verificare Spring Framework CVE-2022-22965, noto anche come vulnerabilità Spring4Shell, comprese le condizioni di impatto, le manifestazioni di rischio, i metodi di riparazione e il processo di ripetizione del test dopo la riparazione.
Il progetto è stato completato in un ambiente autorizzato locale allestito personalmente. L'attenzione del progetto non è quella di attaccare obiettivi reali, ma di allestire un ambiente di test Spring MVC prima e dopo la riparazione, confermare uno per uno le condizioni di impatto relative alla vulnerabilità e utilizzare un metodo di sola lettura sicuro e controllato per osservare le differenze nei percorsi delle proprietà interne del data binding di Spring prima e dopo l'aggiornamento della versione.
Il progetto ha completato i seguenti passaggi:
Questo progetto è utilizzato esclusivamente per ambienti locali autocostruiti o ambienti di test di sicurezza esplicitamente autorizzati.
Il progetto non esegue scansioni, rilevamenti o sfruttamenti di vulnerabilità su siti web pubblici, server o sistemi di terze parti, e non include dati utente reali o dati aziendali reali.
Durante il test non sono state eseguite le seguenti operazioni:
È vietato utilizzare i metodi di test di questo progetto su obiettivi non autorizzati.
CVE-2022-22965 è comunemente noto come Spring4Shell ed è una vulnerabilità di esecuzione remota di codice in Spring Framework legata al meccanismo di data binding dei parametri delle richieste.
Spring MVC supporta il binding automatico dei parametri delle richieste HTTP nelle proprietà degli oggetti Java. Ad esempio, questo progetto riceve i parametri nome ed email nel seguente modo:
@ModelAttribute("profile") UserProfile profile
In condizioni normali, i parametri della richiesta name e email vengono associati all'oggetto UserProfile in base al nome della proprietà.
Nelle versioni interessate, le restrizioni di accesso ad alcuni percorsi di proprietà interne non sono sufficientemente rigorose. Quando si utilizza JDK 9 o versione successiva e sono soddisfatte specifiche condizioni di Servlet container, modalità di deployment e data binding, i parametri delle richieste esterne possono percorrere ulteriormente gli oggetti business normali per accedere a oggetti interni relativi a Java Class, moduli, class loader o container.
In ambienti specifici sfruttabili, un utente malintenzionato potrebbe modificare ulteriormente la configurazione del server o scrivere file sul server, creando così un rischio di esecuzione remota di codice.
Questo progetto non esegue uno sfruttamento completo di codice remoto, ma utilizza i seguenti percorsi di proprietà per una diagnostica differenziale sicura e di sola lettura:
class.module.name
Questo progetto è stato completato in un ambiente sperimentale isolato VMware locale.
127.0.0.1Dati di test delle funzionalità normali:
Alice[email protected]Percorso della proprietà per la diagnostica di sicurezza:
class.module.name
spring4shell-local-verification-lab/
README.md: Introduzione al progetto, idea di test, risultati della verifica e spiegazione della riparazionedocs/: Rapporto di verifica delle condizioni di impatto locale, riparazione e ripetizione del test per Spring4Shellimages/: Screenshot dell'ambiente del progetto, del processo di test e della ripetizione del testvulnerable-demo/: Progetto prima della riparazione che utilizza Spring Framework 5.3.17fixed-demo/: Progetto dopo la riparazione che utilizza Spring Framework 5.3.18notes/: Appunti di apprendimento e registrazione del processoStruttura principale del codice sorgente:
config/: Classi di configurazione di Spring MVC e classi di inizializzazione dell'applicazionecontroller/: Controller per l'elaborazione dei moduli e la diagnostica dei percorsi delle proprietàmodel/: Classe UserProfile per ricevere i parametri nome ed emailWEB-INF/views/: Pagine JSP per la homepage, i risultati dell'invio e i risultati della diagnosticaQuesto progetto ha creato due applicazioni Spring MVC, una prima della riparazione e una dopo la riparazione.
Directory del progetto:
vulnerable-demo
Versione utilizzata:
Spring Framework 5.3.17
File WAR generato:
spring4shell-vulnerable-demo.war
Indirizzo di accesso:
http://127.0.0.1:8080/spring4shell-vulnerable-demo/
Pagina di diagnostica:
http://127.0.0.1:8080/spring4shell-vulnerable-demo/binding-probe
Directory del progetto:
fixed-demo
Versione utilizzata:
Spring Framework 5.3.18
File WAR generato:
spring4shell-fixed-demo.war
Indirizzo di accesso:
http://127.0.0.1:8080/spring4shell-fixed-demo/
Pagina di diagnostica:
http://127.0.0.1:8080/spring4shell-fixed-demo/binding-probe
Il progetto di test fornisce un semplice modulo del profilo utente, che include:
Il controller riceve i parametri della richiesta nel seguente modo:
@ModelAttribute("profile") UserProfile profile
Quando l'utente invia il nome e l'email, Spring MVC associa automaticamente i parametri name e email all'oggetto UserProfile.
La pagina dei risultati legge l'oggetto associato e visualizza il nome e l'email inviati dall'utente.