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.