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
CVE-2022-22978 — Proof-of-concept per CVE-2022-22978, che dimostra il bypass dell'autorizzazione in RegexRequestMatcher di Spring Security tramite iniezione CRLF, con un'applicazione demo e un'analisi della correzione. | Kitploit
Strumenti/GitHubGitHub/raghvendra1207/cve-2022-22978
Autenticazione e AutorizzazioneAnalisi delle VulnerabilitàExploitSfruttamento di Applicazioni WebApprendimento e FormazioneLab e Pratica
GitHubraghvendra1207/cve-2022-22978

CVE-2022-22978

Proof-of-concept per CVE-2022-22978, che dimostra il bypass dell'autorizzazione in RegexRequestMatcher di Spring Security tramite iniezione CRLF, con un'applicazione demo e un'analisi della correzione.

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
Vedi Repository
4 anni faNon ancora revisionato

CVE 2022-22978: Authorization Bypass in RegexRequestMatcher 🥶

Panoramica

Secondo le informazioni che ho raccolto, questa è una vulnerabilità relativa alla classe RegexRequestMatcher nel framework Spring Security. Nello specifico, le applicazioni che usano RegexRequestMatcher con un’espressione regolare contenente un punto (.) possono essere bypassate usando i caratteri \r(%0a) e \n(%0d); pertanto gli attaccanti senza autenticazione possono accedere a percorsi non autorizzati.

Versioni del framework Spring Security affette dalla vulnerabilità:

  • 5.5.x precedenti a 5.5.7
  • 5.6.x precedenti a 5.6.4
  • Versioni precedenti non supportate.

Analisi

Dobbiamo accedere al codice sorgente di Spring Security per analizzare staticamente questa vulnerabilità. Nello specifico, ho usato la funzione di confronto dei commit tra le versioni 5.6.3 (vulnerabile) e 5.6.4 (corretta) su Github. Vedi il seguente link: Comparing 5.6.3...5.6.4 · spring-projects/spring-security (github.com)

img1

Ho esaminato le modifiche nella classe RegexRequestMatcher. Si può notare che nella versione 5.6.4 questa classe usa Pattern.DOTALL invece del default . come nella versione 5.6.3.

Dove:

  • Pattern è una delle tre classi nel pacchetto java.util.regex, usata per elaborare le espressioni regolari.
  • Pattern.DOTALL: quando si usa questo flag, "." nell’espressione regolare corrisponde a tutti i caratteri, inclusi i caratteri di nuova riga come \n , \r.
  • Pattern.CASE_INSENSITIVE: non fa distinzione tra maiuscole e minuscole.

img2

Per impostazione predefinita, il punto . in un’espressione regolare corrisponde a tutti i caratteri tranne i caratteri di nuova riga come \n, \r. Se una funzione regex valida il pattern di una stringa, non corrisponderà se nella stringa sono presenti caratteri di nuova riga. Per evitare ciò, si può usare il flag Pattern.DOTALL.

Tuttavia, se qualcuno usa intenzionalmente %0d invece di \n o %0a invece di \r, la regex precedente non corrisponderà comunque. Pertanto, nella versione 5.6.4, è stato aggiunto un controllo per questo caso in RegexRequestMatcherTests.java. Specificamente, converte %0d e %0a rispettivamente in \n e \r prima di controllare con la regex.

img3

Demo

Passo 1: Creare un’applicazione web Spring Boot usando Spring Initializr con le due dipendenze Spring Security e Spring Web.

img4

Passo 2: Creare un Controller che stampi il testo This is a CVE-2022-22978 demo quando viene fatta una richiesta al percorso /admin/*.

img5

Passo 3: Impostare un meccanismo di autenticazione per ogni accesso al percorso /admin/<qualsiasi> usando regexMatchers("/admin/.*").authenticated(). Questa è la vulnerabilità sfruttata dagli attaccanti per visualizzare il contenuto delle pagine /admin/<qualsiasi> senza autenticazione.

img6

Passo 4: Nel file di configurazione, dichiarare la versione di Spring Security che contiene la vulnerabilità. Qui scelgo la versione 5.6.3.

img7

Passo 5: Eseguire l’applicazione con il comando gradlew bootRun, il programma usa per impostazione predefinita Apache Tomcat in ascolto sulla porta 8080. Accedere al percorso /admin/xyz (qualsiasi percorso purché inizi con /admin/).

img8

Il risultato restituisce il codice 403 Forbidden, il che significa che non è possibile accedere perché non autenticati.

A questo punto, sfruttando la vulnerabilità della funzione regexMatchers in Spring Security (versione 5.6.3) poiché non corrisponde ai caratteri di nuova riga come \r(%0d) e \n(%0a), possiamo accedere al percorso sopra senza autenticazione usando il payload /admin/%0dxyz.

img9

Analogamente con il payload /admin/%0axyz.

img10

Così abbiamo sfruttato con successo la vulnerabilità CVE-2022-22978 con un payload molto semplice.

Mitigazione

Aggiornare la versione di Spring Security a:

  • 5.5.7+
  • 5.6.4+
  • 5.7+

Demo: Usare la versione corretta, nello specifico 5.7.1.

img11

Provare ad attaccare il web con lo stesso payload di prima: /admin/%0dxyz.

img12

A questo punto, l’app non restituisce la risposta desiderata dall’attaccante.

Usage

root@kitploit:~
git clone https://github.com/ducluongtran9121/CVE-2022-22978-PoC.git
cd CVE-2022-22978-PoC
gradlew bootRun

Requirements

root@kitploit:~
Java 18
Gradle 7.4.1
Scarica lo strumento