Digamos que una aplicación web toma una entrada específica del usuario (p. ej., formulario de búsqueda), aplica una expresión regular de Java con grupos de capital nombrados y usa la salida final para hacer otras cosas (p. ej., busque el recurso buscado) cuyo nombre ha sido modificado a través de la expresión regular).
¿Qué sucede si algunos metacaracteres de expresiones regulares, especialmente $ que se usan en el grupo de captura con nombre para referirse a los grupos específicos (por ejemplo, $ 1 se refiere al grupo 1), no están codificados y un usuario podría alterar el flujo de expresiones regulares inyectándolos?
Un pequeño ejemplo de código:
"aaaaaafooNfooaaaaaaa".replaceAll("foo([A-Z])foo", "user_input" )
El usuario, en lugar de "user_input", podría insertar $ 1 y recuperar el primer grupo de captura. Pero esto es solo un simple y simple ejemplo, podría haber muchos otros tipos de usos.
Realmente no puedo ver ninguna amenaza de seguridad concreta, aparte de tratar de manipular el flujo de expresiones regulares, pero deseo saber si alguien podría hacerlo.