Bastionado, seguridad en sistemas: Saltarse un WAF mediante Parameter Pollution pre { background:#eeeeee; border:1px solid #A6B0BF; font-size:120%; line-height:100%; overflow:auto; padding:10px; color:#000000 } pre:hover { border:1px solid #efefef; } code { font-size:120%; text-align:left; margin:0;padding:0; color: #000000;} .clear { clear:both; overflow:hidden; }

Bienvenido al blog

Bienvenidos al blog de seguridad en sistemas

viernes, 5 de octubre de 2012

Saltarse un WAF mediante Parameter Pollution

Buenos días a todos, al menos en Boston. Hace un par de días leí en twitter una noticia que apuntaba a una entrada del blog de Daniel Regalado (Danux Mitnick) titulado "Bypassing WAF via HTTP Parameter Pollution". 

La entrada está francamente bien y trata sobre como saltarse en ciertos casos los filtros de un Web Application Firewall o WAF, es decir, un filtro que previene de ciertos ataques Web como SQL-I, XSS, XSRF, etc. 

Daniel emplea para evadir el filtro envenenamiento de parametros o en inglés Parameter Pollution, donde en este caso, trata de saltarse los filtros del WAF cuando este analiza distintos valores para una misma variable de entrada. Un WAF mal programado podría procesar de forma distinta de como es interpretado por el lenguaje de programación empleado para la Web. Se puede ver como un fragmentation overlapping pero en capa de aplicación en vez de capa de red.

Para entenderlo de forma sencilla, si tenemos una variable que es "texto" podemos enviar una petición a la página web auditada introduciendo dos variables "texto" con distinto valor, como se puede ver en la siguiente petición Get:
http://www.paginafictica.com/index.php?texto=hola&texto=adios
El WAF podría tratar el valor del primer texto (hola), el valor del segundo texto (adios), ambos por separado (hola y adios) o el valor resultante de la suma de ambas variables (holaadios). En caso de la entrada de Daniel el se encuentra que el WAF solo procesa el valor del primer texto sin analizar el valor del segundo texto "adios".

Una vez se conoce el funcionamiento del WAF, y por tanto si realmente realiza las cuatro comprobaciones o solo algunas, sabremos si es posible o no saltarse las restricciones e inyectar el parametro deseado. 

Llegado a este punto será necesario saber como funciona la tecnología empleada para el desarrollo de la página. Daniel hace una tabla indicando el funcionamiento de cada una de las tecnologías, la cual la podeis ver en su entrada indicada al principio, pero el resumen básico sería el siguiente:
  • PHP: se queda solo con el valor de la última variable (última ocurrencia).
  • ASP y .NET: se queda con el valor de la suma de todas las variables (todas las ocurrencias).
  • JSP: se queda solo con el valor de la primera variable (primera ocurrencia).
  • Python y Perl: se crea un array.
Por lo que si sabemos que en el ejemplo de Daniel el WAF solo analiza la primera ocurrencia, si la web emplea PHP, ASP o .Net lo único que tendremos que hacer es realizar una solicitud escribiendo dos veces la misma variable y introduciendo el vector de ataque en la segunda ocurrencia. Por descontado habrá que tener cuidado si usamos "ASP" o ".Net" de que el valor de la primera ocurrencia no afecte al funcionamiento del vector de ataque:
http://www.paginafictica.com/index.php?texto=hola&texto=XSS
La verdad que me ha parecido una buena entrada, sencilla, útil y muy bien explicada por parte de Daniel. Recomiendo seguir a esta persona en Twitter y a su blog.

¡Un saludo!

PD: ya tengo asignado a un tutor para el Gold GCIA... y que tutor... ¡un crack!

No hay comentarios:

Publicar un comentario