¿Qué podría suceder si los metacaracteres de expresiones regulares que usan un grupo de captura con nombre no están codificados?

1

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.

    
pregunta p_of_pentester 27.10.2014 - 17:25
fuente

1 respuesta

1

Técnicamente, sí, hay una vulnerabilidad de fuga de datos muy pequeña aquí.

En tu ejemplo:

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

si user_input contenía $1 y el valor de lo anterior se generó y la cadena de entrada aaaaaafooNfooaaaaaaa no estaba controlada por el usuario, el usuario podría averiguar cuál era la cadena "secreta" original (es decir, N ).

En la práctica, la respuesta es realmente no, a menos que alguien haya sido deliberadamente "inusual" con su codificación.

    
respondido por el SilverlightFox 28.10.2014 - 17:29
fuente

Lea otras preguntas en las etiquetas