Skip to content
KitploitKITPLOIT
StrumentiBlog
Invia
StrumentiBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
spring4shell-local-verification-lab — Spring Framework CVE-2022-22965: verifica delle condizioni di impatto locale, correzione dell'aggiornamento della versione e progetto di ritest | Kitploit
Strumenti/GitHubGitHub/meng-security/spring4shell-local-verification-lab
Analisi delle VulnerabilitàAnalisi del CodiceExploitSicurezza WebApprendimento e FormazioneLab e Pratica
GitHubmeng-security/spring4shell-local-verification-lab

spring4shell-local-verification-lab

Spring Framework CVE-2022-22965: verifica delle condizioni di impatto locale, correzione dell'aggiornamento della versione e progetto di ritest

Vedi Repository
11 mese faNon ancora revisionato

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi

Progetto di verifica delle condizioni di impatto locale, riparazione e ripetizione del test per Spring4Shell

Introduzione al progetto

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:

  • Preparazione dell'ambiente JDK, Maven e Apache Tomcat
  • Allestimento del progetto WAR Spring MVC
  • Verifica della baseline delle funzionalità normali
  • Conferma delle condizioni di impatto della vulnerabilità
  • Diagnostica di sola lettura dei percorsi delle proprietà interne
  • Analisi delle cause della vulnerabilità
  • Aggiornamento della versione di Spring Framework
  • Ripetizione del test di sicurezza dopo la riparazione
  • Ripetizione del test delle funzionalità normali dopo la riparazione
  • Redazione del rapporto di test e raccolta delle evidenze screenshot

Dichiarazione di sicurezza

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:

  • Nessuna scrittura di WebShell
  • Nessuna esecuzione di comandi di sistema
  • Nessuna modifica della configurazione di Tomcat
  • Nessuna creazione di reverse shell
  • Nessun controllo persistente
  • Nessun impatto su sistemi esterni

È vietato utilizzare i metodi di test di questo progetto su obiettivi non autorizzati.

Contesto della vulnerabilità

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

Obiettivi del progetto

  1. Comprendere il processo di base del data binding dei parametri delle richieste di Spring MVC.
  2. Allestire un progetto di test Spring MVC WAR locale.
  3. Completare la verifica della baseline delle funzionalità business normali.
  4. Confermare le condizioni di impatto come Spring Framework, JDK, Tomcat, deployment WAR e punto di ingresso del data binding.
  5. Utilizzare un metodo di sola lettura per osservare le prestazioni di accesso ai percorsi delle proprietà interne.
  6. Analizzare le cause principali della vulnerabilità.
  7. Aggiornare Spring Framework alla versione corretta.
  8. Utilizzare lo stesso metodo per ripetere il test dopo la riparazione.
  9. Confermare che l'aggiornamento della versione non abbia influenzato le funzionalità business normali.
  10. Organizzare il codice sorgente del progetto, il rapporto di test e le evidenze screenshot.

Ambiente sperimentale

Questo progetto è stato completato in un ambiente sperimentale isolato VMware locale.

  • Host: Windows 11
  • Macchina di destinazione: Macchina virtuale Windows 10
  • Software di virtualizzazione: VMware Workstation
  • Ambiente Java: Eclipse Temurin JDK 11.0.31
  • Strumento di costruzione del progetto: Apache Maven 3.9.16
  • Servlet container: Apache Tomcat 9.0.60
  • Versione di Spring Framework prima della riparazione: 5.3.17
  • Versione di Spring Framework dopo la riparazione: 5.3.18
  • Framework Web: Spring MVC
  • Modalità di deployment del progetto: Deployment WAR tradizionale
  • Indirizzo di test: 127.0.0.1

Dati di test delle funzionalità normali:

  • Nome: Alice
  • Email: [email protected]

Percorso della proprietà per la diagnostica di sicurezza:

class.module.name

Struttura del progetto

spring4shell-local-verification-lab/

  • README.md: Introduzione al progetto, idea di test, risultati della verifica e spiegazione della riparazione
  • docs/: Rapporto di verifica delle condizioni di impatto locale, riparazione e ripetizione del test per Spring4Shell
  • images/: Screenshot dell'ambiente del progetto, del processo di test e della ripetizione del test
  • vulnerable-demo/: Progetto prima della riparazione che utilizza Spring Framework 5.3.17
  • fixed-demo/: Progetto dopo la riparazione che utilizza Spring Framework 5.3.18
  • notes/: Appunti di apprendimento e registrazione del processo

Struttura principale del codice sorgente:

  • config/: Classi di configurazione di Spring MVC e classi di inizializzazione dell'applicazione
  • controller/: Controller per l'elaborazione dei moduli e la diagnostica dei percorsi delle proprietà
  • model/: Classe UserProfile per ricevere i parametri nome ed email
  • WEB-INF/views/: Pagine JSP per la homepage, i risultati dell'invio e i risultati della diagnostica

Descrizione del progetto di test

Questo progetto ha creato due applicazioni Spring MVC, una prima della riparazione e una dopo la riparazione.

Progetto prima della 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

Progetto dopo la riparazione

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

Descrizione delle funzionalità normali

Il progetto di test fornisce un semplice modulo del profilo utente, che include:

  • Campo di input per il nome
  • Campo di input per l'email
  • Pulsante di invio del profilo

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.

Questa funzione viene utilizzata per confermare che il progetto può funzionare correttamente e dimostrare che esiste un punto di ingresso efficace per il data binding dei parametri delle richieste di Spring MVC nell'applicazione.

Idea di test

Questo progetto segue l'idea di "prima confermare le funzionalità normali, poi confermare le condizioni di impatto, quindi eseguire una diagnostica dei rischi di sola lettura, e infine riparare e ripetere il test".

  1. Installare e configurare JDK 11, Maven e Apache Tomcat.
  2. Allestire un progetto Spring MVC utilizzando Spring Framework 5.3.17.
  3. Creare un modulo per nome ed email.
  4. Utilizzare @ModelAttribute per associare i parametri della richiesta all'oggetto UserProfile.
  5. Utilizzare Maven per impacchettare il progetto come file WAR.
  6. Distribuire il file WAR su Apache Tomcat in esecuzione indipendente.
  7. Inviare un profilo utente simulato localmente per completare la verifica della baseline delle funzionalità normali.
  8. Verificare il JDK effettivamente in esecuzione, Tomcat, Spring Framework e la modalità di deployment.
  9. Utilizzare Spring BeanWrapper per una diagnostica di sola lettura su class.module.name.
  10. Registrare i risultati di accesso al percorso delle proprietà nell'ambiente Spring Framework 5.3.17.
  11. Aggiornare Spring Framework alla versione 5.3.18.
  12. Ricostruire e distribuire il progetto dopo la riparazione.
  13. Utilizzare lo stesso percorso delle proprietà per ripetere il test dopo la riparazione.
  14. Inviare nuovamente nome ed email per confermare che le funzionalità normali non siano state influenzate.

Conferma delle condizioni di impatto

Questo progetto ha confermato una per una le seguenti condizioni di impatto:

  • Utilizzo di JDK 11.0.31, che soddisfa la condizione di JDK 9 o versione successiva
  • Utilizzo di Spring Framework 5.3.17
  • Il progetto include il componente spring-webmvc
  • Utilizzo di Apache Tomcat 9.0.60
  • Il progetto è distribuito come pacchetto WAR tradizionale
  • Il progetto è caricato da Tomcat in esecuzione indipendente
  • Il controller ha un punto di ingresso di data binding basato su @ModelAttribute

Le dipendenze Spring effettivamente distribuite nel progetto prima della riparazione includono:

  • spring-beans-5.3.17.jar
  • spring-core-5.3.17.jar
  • spring-web-5.3.17.jar
  • spring-webmvc-5.3.17.jar

Questo progetto non giudica direttamente se la vulnerabilità esista solo in base alla versione di Spring Framework, ma esegue un'analisi completa combinando JDK, Spring MVC, Tomcat, deployment WAR e punto di ingresso del data binding.

Metodo di diagnostica dei rischi

Per evitare di eseguire sfruttamenti distruttivi della vulnerabilità, questo progetto utilizza BeanWrapper fornito da Spring Framework per eseguire un controllo di sola lettura sul seguente percorso delle proprietà:

class.module.name

Questo percorso rappresenta:

  • class: accede all'oggetto Java Class corrispondente all'oggetto business corrente
  • module: accede al modulo Java a cui appartiene la classe
  • name: legge il nome del modulo

Il processo di diagnostica chiama solo metodi di controllo della leggibilità delle proprietà e di lettura dei valori delle proprietà:

  • Non imposta proprietà dell'oggetto
  • Non modifica la configurazione del server
  • Non scrive file sul server
  • Non esegue comandi del sistema operativo

Pertanto, questa diagnostica può essere utilizzata solo per osservare le differenze di accesso ai percorsi delle proprietà interne prima e dopo la riparazione, e non può da sola dimostrare che sia stata raggiunta l'esecuzione remota di codice.

Risultati della verifica

Risultati prima della riparazione

L'ambiente prima della riparazione utilizza:

Spring Framework 5.3.17

Percorso della proprietà controllato:

class.module.name

Risultato della diagnostica:

  • Leggibile: true
  • Risultato della lettura: null

true indica che l'ambiente corrente può continuare a risolvere module.name lungo la proprietà class dell'oggetto business normale.

Il risultato della lettura è null perché l'applicazione WAR corrente è in esecuzione nel modulo senza nome di Java e il nome del modulo è vuoto, non significa che la lettura del percorso della proprietà sia fallita.

Risultati dopo la riparazione

L'ambiente dopo la riparazione utilizza:

Spring Framework 5.3.18

Utilizzando lo stesso percorso della proprietà per la nuova diagnostica:

class.module.name

Risultato della diagnostica:

  • Leggibile: false
  • Risultato della lettura: Not readable

I risultati prima e dopo la riparazione mostrano un chiaro contrasto:

  • Spring Framework 5.3.17: il percorso della proprietà è leggibile
  • Spring Framework 5.3.18: il percorso della proprietà non è leggibile

Questo risultato indica che dopo l'aggiornamento della versione, l'accesso al percorso della proprietà diagnosticato originale è stato limitato e la manifestazione del rischio osservata prima della riparazione non si verifica più.

Misure di riparazione

Questo progetto adotta il metodo di aggiornamento della versione di Spring Framework per la riparazione.

Configurazione prima della riparazione:

<spring.version>5.3.17</spring.version>

Configurazione dopo la riparazione:

<spring.version>5.3.18</spring.version>

Durante il processo di riparazione sono state completate le seguenti operazioni:

  1. Copiare il progetto prima della riparazione in fixed-demo.
  2. Mantenere invariata la logica business di Controller, modello dati e pagine JSP.
  3. Aggiornare Spring Framework da 5.3.17 a 5.3.18.
  4. Utilizzare Maven per scaricare nuovamente le dipendenze della versione corretta.
  5. Ricompilare e generare il file WAR della versione corretta.
  6. Distribuire il file WAR della versione corretta su Apache Tomcat.
  7. Verificare le versioni reali dei JAR Spring distribuiti nel progetto corretto.
  8. Utilizzare il percorso della proprietà originale per completare la ripetizione del test di sicurezza.
  9. Testare nuovamente la funzione di invio di nome ed email.

Le dipendenze Spring effettivamente distribuite nel progetto dopo la riparazione includono:

  • spring-beans-5.3.18.jar
  • spring-core-5.3.18.jar
  • spring-web-5.3.18.jar
  • spring-webmvc-5.3.18.jar

Questo risultato dimostra che la versione corretta è stata effettivamente ricostruita e distribuita, non solo modificando il numero di versione in pom.xml.

Ripetizione del test delle funzionalità normali dopo la riparazione

Dopo l'aggiornamento a Spring Framework 5.3.18, accedere nuovamente alla homepage del progetto corretto e inviare i seguenti dati di test:

  • Nome: Alice
  • Email: [email protected]

Dopo l'invio, la pagina visualizza ancora correttamente:

  • Invio del profilo utente riuscito
  • Nome: Alice
  • Email: [email protected]

Questo risultato indica che l'aggiornamento della versione non ha influenzato la funzione di binding dei parametri della richiesta normale e la visualizzazione della pagina del progetto originale.

Cause della vulnerabilità

Il meccanismo di data binding automatico di Spring MVC può accedere alle proprietà degli oggetti Java in base ai nomi dei parametri delle richieste HTTP.

I parametri business normali name e email devono solo accedere alle proprietà normali corrispondenti in UserProfile.

Tuttavia, il meccanismo di accesso alle proprietà di Spring supporta anche percorsi di proprietà annidati con punti. Nelle versioni interessate, le restrizioni su alcuni percorsi di proprietà interne non sono sufficientemente rigorose, consentendo ai parametri esterni in ambienti specifici di continuare a percorrere l'oggetto business normale per accedere a oggetti relativi a Java Class, modulo, class loader o Servlet container.

Quando esistono proprietà scrivibili in oggetti interni in grado di influenzare la configurazione del server o il file system, e l'applicazione soddisfa anche condizioni come JDK, Tomcat, deployment WAR e data binding, può ulteriormente formare un rischio di esecuzione remota di codice.

Questa vulnerabilità non è dovuta al fatto che le proprietà name o email stesse abbiano problemi, né tutti i progetti che utilizzano Spring MVC possono essere sfruttati. La validità della vulnerabilità richiede generalmente la presenza simultanea di più condizioni.

Raccomandazioni per la riparazione

Nei sistemi business reali si consiglia di adottare le seguenti misure:

  • Verificare le versioni effettive di Spring Framework e Spring Boot in esecuzione
  • Dare priorità all'aggiornamento alle versioni di sicurezza ancora supportate ufficialmente
  • Ricostruire e distribuire l'applicazione dopo l'aggiornamento
  • Verificare le versioni reali dei JAR Spring nel pacchetto di distribuzione finale
  • Limitare l'ambito del data binding del Controller
  • Consentire solo il binding dei campi necessari per il business normale
  • Utilizzare oggetti dati di richiesta dedicati per ricevere parametri esterni
  • Evitare di esporre direttamente entità del database o oggetti interni complessi ai parametri esterni
  • Non fare affidamento sulla convalida front-end per completare le limitazioni di sicurezza
  • Per i sistemi che non possono essere aggiornati immediatamente, adottare misure di mitigazione temporanee
  • Le misure di mitigazione temporanee non possono sostituire l'aggiornamento formale della versione
  • Eseguire Tomcat e i servizi Java con account con privilegi ridotti
  • Impostare i permessi minimi necessari per le directory dell'applicazione e di configurazione
  • Monitorare parametri di richiesta anomali e modifiche ai file del server
  • Dopo la riparazione, eseguire contemporaneamente il ripetizione del test di sicurezza e il ripetizione del test delle funzionalità business normali

Evidenze screenshot chiave

Ambiente e deployment

Conferma della versione JDK 11

Conferma della versione Maven

Avvio riuscito di Apache Tomcat 9.0.60

Pacchettizzazione Maven riuscita

Deployment del progetto WAR riuscito

Baseline delle funzionalità normali

Accesso normale alla homepage del progetto di test

Verifica della baseline delle funzionalità normali riuscita

Verifica prima della riparazione

Conferma delle dipendenze Spring Framework 5.3.17

Percorso delle proprietà interne leggibile prima della riparazione

Riparazione e ripetizione del test

Pacchettizzazione della versione corretta riuscita

Percorso delle proprietà interne non leggibile dopo la riparazione

Ripetizione del test delle funzionalità normali dopo la riparazione riuscita

Conferma delle dipendenze Spring Framework 5.3.18 dopo la riparazione

Stato di avanzamento

  • Creazione della directory del progetto
  • Scrittura del README
  • Creazione del rapporto di test
  • Preparazione dell'ambiente JDK, Maven e Tomcat
  • Allestimento del progetto di test Spring MVC
  • Completamento del packaging e del deployment del progetto WAR
  • Completamento della verifica della baseline delle funzionalità normali
  • Completamento della conferma delle condizioni di impatto della vulnerabilità
  • Completamento della diagnostica dei rischi di sola lettura locale
  • Completamento dell'analisi delle cause della vulnerabilità
  • Completamento dell'aggiornamento della versione di Spring Framework
  • Completamento del ripetizione del test di sicurezza dopo la riparazione
  • Completamento del ripetizione del test delle funzionalità normali dopo la riparazione
  • Conferma della versione effettiva delle dipendenze dopo la riparazione
  • Organizzazione del rapporto di test e delle evidenze screenshot

Riepilogo del progetto

Questo progetto ha completato la conferma delle condizioni di impatto, la diagnostica delle manifestazioni di rischio, la riparazione tramite aggiornamento della versione e il ripetizione del test dopo la riparazione per CVE-2022-22965 di Spring Framework in un ambiente locale isolato.

Il progetto prima della riparazione utilizzava Spring Framework 5.3.17. Nell'ambiente con JDK 11, Spring MVC, Apache Tomcat 9.0.60 e deployment WAR tradizionale, il percorso della proprietà class.module.name è stato giudicato leggibile.

Il progetto dopo la riparazione ha aggiornato Spring Framework alla versione 5.3.18. Lo stesso percorso della proprietà è diventato non leggibile, mentre la normale funzione di binding dei dati per nome ed email è rimasta utilizzabile.

Questo progetto non ha eseguito uno sfruttamento completo di codice remoto, ma ha completato la verifica delle differenze prima e dopo la riparazione attraverso un metodo sicuro e controllato di sola lettura.

Il progetto ha evidenziato le seguenti capacità:

  • Allestimento dell'ambiente di base Java e Spring MVC
  • Costruzione del progetto Maven
  • Deployment dell'applicazione WAR su Tomcat
  • Comprensione del meccanismo di data binding di Spring
  • Analisi delle condizioni di impatto della vulnerabilità
  • Progettazione del processo di test di sicurezza
  • Aggiornamento della versione dei componenti
  • Ripetizione del test dopo la riparazione
  • Test di regressione delle funzionalità normali
  • Scrittura del rapporto di test di sicurezza
  • Organizzazione delle evidenze screenshot e del progetto GitHub
Scarica lo strumento