El 12 de mayo de 2022, se publicaron detalles sobre una vulnerabilidad que afecta a varios dispositivos VPN y cortafuegos de Zyxel Networks. Registrada como CVE-2022-30525 con una puntuación CVSS de 9,8 (crítica), esta vulnerabilidad permite a un atacante ejecutar comandos arbitrarios en el dispositivo sin autenticación. Descubierta por investigadores de Rapid7, esta vulnerabilidad es fácil de explotar y ya se ha utilizado con éxito en la naturaleza.
Censys fue capaz de identificar las versiones específicas de estos dispositivos, y en el momento de escribir este artículo, Censys observó 19.506 dispositivos cortafuegos/VPN de Zyxelde los cuales más de 7.500 pueden ser vulnerables a este ataque específico.
La buena noticia es que muchos de estos dispositivos parecen tener activadas las actualizaciones automáticas, pues ya hemos observado miles de hosts con la última versión parcheada del firmware 5.30 instalada en los últimos días.
Serie ATP
Resumen
USG FLEX 50(W)
USG FLEX 100(W), 200, 500, 700
Identificación y huella digital de dispositivos Zyxel
Para determinar el alcance real de esta vulnerabilidad, tuvimos que encontrar un método para identificar versiones específicas del software en ejecución. A veces es más fácil decirlo que hacerlo, y este proveedor no es una excepción. No hay información específica en nuestros datos de escaneado que indique la versión real del software en ejecución. Pero no permitimos que esto nos disuadiera, ya que hemos versionado con éxito lo no versionable con anterioridad.
El primer paso fue mirar los artefactos y datos que tenemos ahora para ver si podíamos potencialmente utilizar algo para asignar un dispositivo a una versión específica. Parecía que cada dispositivo Zyxel que podíamos encontrar en nuestros datos tenía un conjunto común de archivos javascript que el dispositivo importaba:
Uno de los archivos javascript include que nos llamó la atención fue uno llamado "/ext-js/app/common/zld_product_spec.js", que también contenía un argumento de consulta llamado "v" seguido de una cadena de números. Por ejemplo:
Dado que nuestros datos sólo incluyen información que se encuentra en la raíz del servicio HTTP, tuvimos que recuperar manualmente este archivo específico de cara al público. El contenido de este archivo contiene más de mil líneas de variables javascript, incluyendo una variable llamada "ZLDCONFIG_CLOUD_HELP_VERSION".
Parece que esta variable se utiliza en todo el software para generar enlaces a documentación específica de la versión en la página de soporte al cliente de Zyxel. Pero si nuestras suposiciones son correctas, podemos usar esto para asociar potencialmente el enlace "?v=220420024630" con una versión real del dispositivo.
Necesitábamos generar una lista de hosts y los caracteres numéricos que seguían al archivo "zld_product_spec.js" utilizando únicamente los datos de nuestro conjunto de datos. La mejor forma de hacerlo es utilizando la interfaz BigQuery de Censys(disponible para clientes empresariales):
El resultado es el siguiente, que puede guardarse como CSV:
A continuación, tomamos la lista completa y escribimos un pequeño script personalizado para obtener automáticamente el archivo "/ext-js/app/common/zld_product_spec.js" del host, analizar los resultados y crear un archivo de registro que contenga los números que siguen al argumento "v" y el valor de la variable "ZLDCONFIG_CLOUD_HELP_VERSION" que se encuentra en el archivo javascript "zld_product_spec". Por ejemplo,
Tras analizar detenidamente estos resultados, determinamos que sólo necesitábamos fijarnos en los cuatro primeros dígitos de este número "v" para asociarlo a una versión de firmware concreta. Y puesto que sólo tenemos que identificar las versiones comprendidas entre la 5.00 y la 5.30, podemos decir lo siguiente con nuestros datos:
- v5.00 tiene un valor de argumento "v" comprendido entre '2106' y '2108'.
- v5.10 tiene un valor de argumento "v" comprendido entre '2109' y '2111'.
- v5.20 tiene un valor de argumento "v" comprendido entre '2201' y '2203'.
- v5.30 (la última y primera versión no vulnerable) tiene un argumento "v" que siempre empieza por '2204'.
Con esta información en la mano, podemos construir una imagen completa de Internet y de cómo le afecta esta vulnerabilidad. Una vez más, la mejor manera de hacerlo es utilizando la interfaz Censys BigQuery:
Lo que nos dio un total de 71 resultados, todos los cuales han sido asignados a una versión de firmware específica. A continuación, utilizamos estos datos para generar los informes resumidos que aparecen al principio de este artículo.