Una aplicación Blog, disponible en la URL proporcionada, contiene múltiples vulnerabilidades. ModSecurity WAF usa OWASP CRS y reglas personalizadas para proteger el servidor. En esta sección, nos enfocaremos en explotar la vulnerabilidad XSS en la funcionalidad de comentarios mientras bypasseamos la protección WAF. La versión específica de OWASP CRS (3.3.5) usada contiene un bypass conocido que permite que se explote una vulnerabilidad XSS.
En OWASP CRS, el archivo de configuración REQUEST-941-APPLICATION-ATTACK-XSS.conf, bloquea primariamente ataques XSS. Contiene un ID de regla 941110 y 941160, los cuales detectan el uso de etiquetas script, HTML, manejadores de eventos y más.
Intentos XSS Bloqueados
Navega a la URL y postea un comentario que contenga los siguientes payloads XSS:
<script>alert("xss")</script><img src=x onerror=alert("xss")>

Observa que el WAF bloquea estos intentos y devuelve una página de error 403 Forbidden, como muestra la imagen.

El OWASP CRS v3.3.5 detecta efectivamente los payloads básicos y avanzados. Sin embargo, se descubrió un bypass que evade estas reglas. La técnica utiliza eval() y atob() en el tag anchor (<a>).
El Bypass Conocido
Usar el payload <a href=javascript:eval(atob("YWxlcnQoInhzcyIp"))>test</a>, donde la string está codificada en base64 (equivalente a alert("xss"), podemos comprobar que usar eval() y atob() solos no funcionará. Esto es debido a que la expresión de regex realizada por la regla con ID 941170, bloquea el uso de dichas funciones y el esquema JavaScript.
Esta restricción puede ser sobrepasada usando caracteres Unicode para parte de las strings bloqueadas, reemplazando colons con $colon;, y ofuscando el JavaScript añadiendo un carriage return (
) en algún lugar de la string.
En la aplicación Blog, postea un comentario que contenga el siguiente payload y observa que el WAF no consigue bloquear el ataque:
<a href=ja
vascript:\u0065val(\u0061tob("YWxlcnQoInhzcyIp"))>test</a>
La imagen de abajo muestra que el payload bypasseó el WAF exitosamente y hacer click en el enlace ejecuta el payload XSS.

Mantener el software parcheado debería ser tratado como trabajo de rutina, especialmente para herramientas de seguridad.
