6 vulnerabilidades de alta gravedad que afectan a todos los dispositivos de red de Juniper, incluido SSL VPN

Las siguientes versiones de software se han actualizado para resolver estos problemas específicos: Junos OS 19.1R3-S9, 19.2R3-S6, 19.3R3-S7, 19.4R3-S9, 20.1R3-S5, 20.2R3-S5, 20.3R3-S5, 20.4R3-S4, 21.1R3-S2, 21.2R3-S1, 21.3R2-S2, 21.3R3, 21.4R1-S2, 21.4R3, 22.1R1-S1, 22.1R2, 22.2R1 y todas las versiones posteriores. El aviso de Juniper se puede encontrar aquí.

SOLUCIÓN ALTERNATIVA :

Deshabilite J-Web o limite el acceso solo a hosts confiables.

Detalles de vulnerabilidad

1. CVE-2022-22241 : deserialización remota de Phar preautenticada para RCE.

Los archivos Phar (Archivo PHP) contienen metadatos en formato serializado, que cuando se analizan mediante una función de operación de archivos PHP conduce a que los metadatos se deserialicen. Un atacante puede abusar de este comportamiento para explotar una vulnerabilidad de creación de instancias de objetos dentro del código base de Juniper.

La característica única de los archivos phar es que esta deserialización ocurrirá incluso usando funciones PHP que no evalúan el código PHP como file_get_contents(), fopen(), file() o file_exists(), md5_file(), filemtime() o tamaño del archivo() , is_dir(), si la entrada del usuario se pasa a las funciones.

Impacto : esta vulnerabilidad puede ser aprovechada por un atacante remoto no autenticado para deserializar archivos phar remotos, lo que lleva a la escritura arbitraria de archivos, lo que genera una vulnerabilidad de ejecución remota de código (RCE). No lanzaremos un PoC completo sobre la deserialización que abusamos para obtener RCE hasta que se parcheen más servidores, pero el dispositivo de deserialización es muy fácil de detectar si está mirando el código base de JunOS. Esta es la única razón por la que esta vulnerabilidad no tiene una calificación crítica de 9.8: un atacante deberá encontrar un dispositivo de deserialización que hayamos encontrado u otro diferente para obtener RCE.

La vulnerabilidad es causada por el siguiente código en /jsdm/ajax/logging_browse.php:

Aunque hay $usuario = nuevo usuario(verdadero); en la línea 1, aún se puede acceder al controlador sin autenticación porque la verificación del usuario no se cierra si no es verdadera. Enviar una solicitud POST simple con el parámetro de ruta de archivo apuntando al archivo Phar obliga a que ocurra la deserialización.

Un ejemplo de solicitud para llegar a la deserialización parece tan simple como esto: 

El archivo phar puede ser un archivo de imagen local cargado a través del portal de carga de imágenes, un archivo de caché o un archivo remoto cargado a través de la página de carga no autenticada.

2. CVE-2022-2224 2 : XSS reflejado preautenticado en la página de error. 

Impacto : esta vulnerabilidad puede ser aprovechada por un atacante remoto no autenticado para robar sesiones de administración de JunOS o usarse en combinación con otras vulnerabilidades que requieren autenticación. Por ejemplo, esta vulnerabilidad se puede usar junto con el error de escritura del archivo posterior a la autenticación que forma parte del informe.

La vulnerabilidad es causada por el siguiente código en /error.php:
SERVER_NAME es una variable global que se construye con REQUEST_URI

PoC :

https://JUNOS_IP/error.php?SERVER_NAME=<script>alert(0)</script>

3. CVE-2022-2224 3 : Inyección XPATH en jsdm/ajax/wizards/setup/setup.php

Impacto : esta vulnerabilidad puede ser aprovechada por un atacante remoto autenticado para manipular las sesiones de administración de JunOS o manipular el flujo XPATH que usa el servidor para hablar con sus analizadores XML.

La vulnerabilidad es creada por el siguiente código en /jsdm/ajax/wizards/setup/setup.php:

3. CVE-2022-2224 3 : Inyección XPATH en jsdm/ajax/wizards/setup/setup.php

Impacto : esta vulnerabilidad puede ser aprovechada por un atacante remoto autenticado para manipular las sesiones de administración de JunOS o manipular el flujo XPATH que usa el servidor para hablar con sus analizadores XML.

La vulnerabilidad es creada por el siguiente código en /jsdm/ajax/wizards/setup/setup.php:

JNX_STATE_AUTHENTICATED es una variable global que se activa si existe una sesión de usuario activa. Este ataque no es posible de realizar si JNX_STATE_AUTHENTICATED no está activado, por lo que solo es posible que lo exploten atacantes autenticados de bajo nivel. 

La entrada controlada por el atacante se envía al método setDate. El método command() verifica contra JNX_STATE_AUTHENTICATED . Un atacante también puede explotar esta vulnerabilidad a través de un vector CSRF. 

4. CVE-2022-2224 4 : Inyección de XPATH en el método send_raw() 

Impacto : esta vulnerabilidad puede ser aprovechada por un atacante remoto autenticado para manipular las sesiones de administración de JunOS o manipular el flujo XPATH que usa el servidor para hablar con sus analizadores XML.

Esta vulnerabilidad es causada por el siguiente código en /modules/monitor/interfaces/interface.php:

podemos llegar a la función send_raw() con la siguiente entrada

Esto hará que send_raw() se comunique con el analizador XPath a través de interface.php

5. CVE-2022-2224 5 : El recorrido de ruta durante la carga de archivos conduce a RCE

Impacto : esta vulnerabilidad puede ser aprovechada por un atacante remoto autenticado para ejecutar código PHP cargando un archivo con un nombre especial. Esta vulnerabilidad también puede ser aprovechada con XSS por un atacante no autenticado.

Esta vulnerabilidad es causada por el siguiente código en /Upload.php:

Si el parámetro de fragmento no se envía y en su lugar se envía un parámetro XSRF válido, el archivo cargado por el atacante se construye en el siguiente destino: /var/tmp/$filename 

Además, hay una función llamada check_filename que intenta desinfectar la carga pero tiene el siguiente aspecto: 

El método check_filename() se puede omitir con \..\..\filename . Esto funciona porque Apache en Linux normaliza las barras invertidas en barras diagonales.

lo que permite que un atacante que envíe fileName=\..\..\..\..\www\dir\new\shell.php cree el siguiente archivo: 

/var/tmp/\..\..\..\..\www\dir\new\shell.php → /www/dir/new/shell.php

Esta vulnerabilidad permite que un atacante pueda crear cualquier archivo en cualquier destino del dispositivo.

6. CVE-2022-2224 6 : el archivo PHP incluye /jrest.php 

Impacto : esta vulnerabilidad puede ser aprovechada por un atacante remoto autenticado para ejecutar código PHP mediante la inclusión de archivos locales. Esta vulnerabilidad también se puede utilizar para ejecutar un archivo PHP cargado por la vulnerabilidad de carga arbitraria.

La vulnerabilidad es causada por el siguiente código en /jrest.php:

que se puede manipular con la siguiente consulta:

lo que llevará al servidor a ejecutar la siguiente consulta:

require_once ("/html/jsdm/jrest/". "\..\..\..\..\any\file" .".php");

Esto permite que un atacante incluya cualquier archivo PHP almacenado en el servidor. Si esta vulnerabilidad se explota junto con la vulnerabilidad de carga de archivos, puede conducir a la ejecución remota de código.

Si tiene algún dispositivo JunOS, actualícelo a la última versión para mitigar estas vulnerabilidades.

Fuente: https://octagon.net/blog/2022/10/28/juniper-sslvpn-junos-rce-and-multiple-vulnerabilities/