Técnicas para evadir WAFs
Muchos sitios web actualmente utilizan CDN (Content Distribution Network) o balanceadores de carga, actuando como intermediarios entre un sitio web y sus usuarios finales. Una de sus características es actuar como WAF (Web Application Firewall), permitiendo que los sitios web se protejan contra la explotación de vulnerabilidades basadas en web, como son inyecciones de SQL y XSS, por mencionar algunas.
Desafortunadamente, estos sitios a menudo están mal configurados, lo que permite a un atacante eludir fácilmente la protección que ofrecen y así explotar vulnerabilidades que de lo contrario se bloquearían.
La forma correcta en que debe comportarse un servidor detrás de estos es solo aceptar el tráfico procedente de los intervalos de IP específicos. Sin embargo, muchos servidores aceptan el tráfico entrante desde cualquier fuente. Un atacante podría identificar la IP del servidor y realizar las peticiones directamente, ya que el tráfico generado no pasa por estos servicios o balanceadores.
Si se conoce la IP del servidor es posible realizar lo siguiente para evadir la seguridad de estos WAF:
1.-Acceder a la aplicación o sitio web directamente por la dirección IP.
2.-Modificar el archivo “host”, “/etc/hosts” en Linux o “c:\windows\system32\drivers\etc\hosts” en Windows, y agregar la IP y el dominio para acceder al sitio sin pasar por la validación del balanceador o CDN.
3.-Sobrescribir los DNS si se está usando “burpsuite”; esta es la mejor opción en una prueba de seguridad” Project Options -> Hostname Resolution”, agregar la entrada para sobrescribir los DNS de resolución.
Hay ocasiones cuando los WAF se encuentran configurados correctamente y la evasión de WAF tiene que hacerse de una forma más creativa, utilizando “payloads” más elaborados; a continuación, veremos unos ejemplos de cómo lograrlo.
Durante la revisión de seguridad a una aplicación web se identificó una inyección de tipo XSS en una funcionalidad de carga de archivo.
La inyección XSS fue identificada al modificar el nombre del archivo a cargar, en la petición enviada al servidor.
Al modificar el nombre del archivo e ingresar algunos “payloads” para realizar la inyección XSS se obtiene una respuesta de bloqueo; algunos de los “payloads” usados fueron los siguientes:
<script>alert(1)</script>
<img src=xssonerror=alert(1)>
<input/onmouseover=”javaSCRIPT:confirm(1)”
<iframe %00 src=”	javascript:prompt(1)	”%00>
Cada petición enviada al servidor que contenía las palabras “<script>”, “<frame>”, “<input>”, “<form>”, fueron bloqueadas por el WAF, y para que la inyección sea exitosa es necesario utilizar un “payload” que no tenga las palabras que están siendo bloqueadas.
Utilizando el siguiente “payload”, el cual no tiene las palabras que bloquea el WAF, se espera que no sea bloqueado:
<svg olnload=alert(‘AppSec Seguridad’)>.jar
Con el “payload” utilizado fue posible realizar la inyección XSS y saltarse la validación del WAF.
Uno de los métodos para probar inyecciones SQL es utilizando los operadores “UNION” y “SELECT”; el siguiente “payload” fue utilizado para probar si el sitio era vulnerable a inyección SQL:
[“1807192982′)) union select 1,2,3,4,5,6,7,8,9,0,11#”]
Utilizando el mismo “payload” separamos el operador “unión” y “select” con los caracteres “,” quedando de la siguiente forma.
[“1807192982′)) union se”,”lect 1,2,3,4,5,6,7,8,9,0,11#”]
Después de modificar el “payload” fue posible evadir el WAF.
En estos ejemplos fue posible lograr evadir el WAF debido a que bloquearon las peticiones que contenían palabras como: “<script>”, “<frame>”, “<input>”, “<form>”, e ingresando un tag “<svg>” fue posible inyectar código “Javascript”. Para el ejemplo de SQL, fue posible evadir el WAF debido a que este bloqueaba la petición enviada que contenía operadores SQL, pero al dividir la sintaxis con comillas y una coma permitió enviar el código SQL. En conclusión, no existe un método que siempre funcione para evadir WAFs. Para lograrlo dependerá de la tecnología que tenga el sitio y las configuraciones con las que cuente. Una vez identificada una posible vulnerabilidad que se encuentre bajo un WAF, el siguiente paso será analizar la tecnología y tratar de explotarla con todas las posibilidades.