Che cosa potrebbe accadere se i metacaratteri di espressioni regolari che usano il gruppo di cattura denominato non sono codificati?

1

Diciamo che un'applicazione web prende un input specifico dall'utente (ad esempio, modulo di ricerca), applica un'espressione regolare di Java con i gruppi caputring denominati e usa l'output finale per fare altre cose (ad esempio, cerca la risorsa cercata quale nome è stato modificato attraverso la regex).

Cosa succede se alcuni metacaratteri di espressioni regolari, in particolare $ che viene utilizzato nel gruppo di acquisizione denominato per fare riferimento ai gruppi specifici (ad esempio $ 1 si riferisce al gruppo 1), non sono codificati e un utente potrebbe alterare il flusso regex per iniettarli?

Un piccolo esempio di codice:

"aaaaaafooNfooaaaaaaa".replaceAll("foo([A-Z])foo", "user_input" )

L'utente, invece di "user_input", potrebbe inserire $ 1 e richiamare il primo gruppo di acquisizione. Ma questo è solo un semplice esempio, potrebbero esserci molti altri tipi di utilizzo.

Non riesco a vedere alcuna minaccia concreta per la sicurezza, a parte cercare di manipolare il flusso regex, ma vorrei sapere se qualcuno potrebbe.

    
posta p_of_pentester 27.10.2014 - 17:25
fonte

1 risposta

1

Tecnicamente sì, c'è una vulnerabilità di perdita di dati molto piccola qui.

Nel tuo esempio:

"aaaaaafooNfooaaaaaaa".replaceAll("foo([A-Z])foo", "user_input")

se user_input contiene $1 e il valore di quanto sopra è stato prodotto e la stringa di input aaaaaafooNfooaaaaaaa non era controllata dall'utente, l'utente sarebbe stato in grado di scoprire quale fosse la stringa "segreta" originale (cioè N ).

In pratica la risposta è davvero no, a meno che qualcuno non sia stato deliberatamente "insolito" con la loro codifica.

    
risposta data 28.10.2014 - 17:29
fonte