Una catástrofe para el control: entendiendo el bypass de autenticación de ScreenConnect (CVE-2024-1709 y CVE-2024-1708)

El 19 de febrero de 2024, ConnectWise publicó un aviso de seguridad para ScreenConnect versión 23.9.8, que hacía referencia a dos vulnerabilidades y debilidades de software. Ese mismo día, los investigadores de Huntress trabajaron para entender esta amenaza y lograron recrear con éxito un exploit de prueba de concepto que demostraba su impacto.

Este artículo analiza nuestro trabajo de investigación y los detalles técnicos detrás de este ataque, al que hemos bautizado como "SlashAndGrab".

El aviso de ConnectWise indicaba que en todas las versiones de ScreenConnect anteriores a la 23.9.8 existían dos vulnerabilidades:

  1. CVE-2024-1709: Omisión de autenticación mediante una ruta o canal alternativo (CWE-288)
  2. CVE-2024-1708: Limitación incorrecta de un nombre de ruta a un directorio restringido ("path traversal") (CWE-22)

La primera vulnerabilidad se divulgó con una puntuación base CVSS crítica de 10, la severidad más alta posible. La omisión de autenticación terminaría abriendo la puerta a la segunda vulnerabilidad.

ConnectWise puso a disposición un parche y señaló que todas las versiones locales de ScreenConnect 23.9.7 y anteriores debían actualizarse de inmediato; las instancias en la cloud ya se habían parchado automáticamente.

En el momento del lanzamiento, el aviso de ConnectWise tenía muy pocos detalles técnicos. No había mucha información disponible sobre en qué consistían realmente estas vulnerabilidades, cómo se podrían aprovechar, ni ninguna otra inteligencia de amenazas o indicador de compromiso para investigar.

Una vez que recreamos el exploit y la cadena de ataque, llegamos a la misma conclusión: no debían publicarse detalles sobre la vulnerabilidad hasta que la industria tuviera tiempo suficiente para aplicar el parche. Sería demasiado peligroso que esta información estuviera disponible para los actores de amenazas.

Pero, con otros proveedores compartiendo públicamente el exploit de prueba de concepto, el secreto ya se reveló. Ahora sentimos que compartir nuestro análisis no representa una amenaza mayor que la que ya está disponible. Así que estamos listos para contarlo todo.

El "exploit" es trivial y vergonzosamente fácil.

A continuación, hay una demostración en video de nuestro exploit de prueba de concepto recreado, que realiza la simple omisión de autenticación, pero va un paso más allá para mostrar la ejecución remota de código.


Nuestro análisis

Cuando el equipo de Huntress se enteró del aviso de ConnectWise, nuestro equipo empezó a investigar qué cambios se habían hecho en el parche que pudieran ayudar a explicar en qué consistían estas vulnerabilidades.

Podíamos simplemente buscar las diferencias entre el código presente en la nueva versión parchada y la versión anterior sin parchar. Al crear un entorno de pruebas local para ambos estados del software ScreenConnect, pudimos ver fácilmente el delta que podría darnos una pista sobre el posible exploit.

Observamos que estos archivos eran diferentes:

CVE-2024-1709 - Omisión de autenticación

La mayoría de estos cambios observados en la nueva versión eran archivos binarios, que requieren descompilación para compararlos; sin embargo, SetupWizard.aspx es un archivo de texto. Al observar las diferencias en este archivo, de inmediato se veía prometedor:

Loading Gist...

En la actualización más reciente, podemos ver que hay una nueva verificación para asegurarse de que la instancia esté configurada antes de permitir que el usuario use el asistente de configuración. Esto nos llamó la atención, ya que, a primera vista, la versión 23.9.7 ya bloqueaba el acceso al asistente de configuración después de la autenticación. Al mirar más de cerca ScreenConnect.SetupModule dentro de ScreenConnect.Web.dll, se revela más información sobre la ruta de explotación.

En versiones anteriores de ScreenConnect, este controlador estaba registrado para el evento OnBeginRequest, mientras que en la 28.9.8 está registrado para el evento OnPostMapRequestHandler. Esto parece haberse hecho para que el campo context.Handler se complete. Se agregó una nueva verificación para validar si el manejador HTTP resuelto implementa la nueva interfaz ISetupHandler, mientras que el código anterior simplemente verificaba que la cadena de Request.Path coincidiera con "/SetupWizard.aspx". Este cambio implica que existía alguna forma de evitar la comparación de cadenas de Request.Path en versiones anteriores. Si la ruta de la solicitud no coincide con "/SetupWizard.aspx", entonces se permitirá el asistente de configuración sin importar el estado de configuración de la instancia.

Esto normalmente no sería explotable, pero .Net tiene una funcionalidad peculiar que permite que los componentes de ruta de URL después de una URL legítima mapeada se pasen a la aplicación. Esta información se expone en Request.FilePath, Request.PathInfo y Request.Path. Por ejemplo, si existe una ruta legítima "/something.aspx", entonces .Net permitirá que el usuario solicite "/something.aspx/anythingelse" y pasará la parte final después de la ruta del archivo a través de Request.PathInfo. Sin embargo, Request.Path siempre contiene tanto Request.FilePath como Request.PathInfo según la documentación de MSDN:

Al juntar todo esto, significa que simplemente podemos solicitar "/SetupWizard.aspx/literallyanything" y deberíamos poder acceder al asistente de configuración en instancias de ScreenConnect ya configuradas.

El asistente de configuración se encarga de crear el usuario administrativo inicial y de instalar una licencia en el sistema durante la configuración inicial. La creación de este usuario ocurre inmediatamente después de hacer clic en el botón "Next" en la página de configuración, así que no es necesario completar todo el asistente para explotar el sistema (es decir, no necesitas reemplazar ni tener acceso a una clave de licencia válida). Completar este paso sobrescribirá por completo la base de datos interna de usuarios. Todos los demás usuarios locales se eliminarán, salvo el usuario que especifiques en el asistente de configuración.

Una vez que tengas acceso administrativo a una instancia comprometida, es trivial crear y subir una extensión maliciosa de ScreenConnect para lograr ejecución remota de código (RCE). Esto no es una vulnerabilidad, sino una función de ScreenConnect, que permite a un administrador crear extensiones que ejecutan código .Net como SYSTEM en el servidor de ScreenConnect.

CVE-2024-1708 - Path Traversal

La segunda vulnerabilidad mencionada en el aviso de ConnectWise ScreenConnect presenta un riesgo de ataques ZipSlip. Observamos cambios en ScreenConnect.Core.dll:

Loading Gist...

y en ScreenConnect.Server.dll:

Loading Gist...

Esto agrega nuevos argumentos de función para manejar estrictamente las rutas de archivos al extraer contenido de un archivo ZIP. Al revisar la base de código, podemos ver que estas funciones utilitarias solo parecen usarse al manejar extensiones de ScreenConnect. Antes de este parche, una extensión maliciosa podía potencialmente escribir archivos en cualquier lugar dentro de C:\Program Files (x86)\ScreenConnect\App_Extensions en lugar de estar correctamente restringida a su subdirectorio de extensión.

Si bien esta es otra vulnerabilidad corregida en la versión 23.9.8 que podría dar lugar a ejecución remota de código en ciertas condiciones, depende de contar con credenciales administrativas y acceso para poder usar la función de extensiones. Esta capacidad queda "desbloqueada" por el bypass de autenticación, pero por sí sola es menos severa.

En nuestra recreación de la prueba de concepto del exploit, aprovechar este posible vector de ataque de ZipSlip no fue necesario; después de obtener acceso de administrador con el bypass de autenticación, ya era posible ejecutar código arbitrario con el conjunto de funciones típico de extensiones. La diferencia principal es que el código malicioso escrito usando esta vulnerabilidad no necesariamente necesita una extensión instalada para ejecutarse. Esto significa que podría pasar desapercibido más fácilmente dentro de tu entorno. Es probable que cualquier archivo .aspx o .ashx dentro de la raíz de C:\Program Files (x86)\ScreenConnect\App_Extensions\ sea un artefacto malicioso. ScreenConnect normalmente no coloca ningún archivo dentro de este directorio.

Guía de detección

Mientras investigaba las vulnerabilidades mencionadas, Huntress identificó Indicadores de Compromiso (IOCs) y desarrolló un conjunto de detecciones que se pueden usar para notificar a los usuarios de ScreenConnect sobre posible actividad maliciosa.

Como recordatorio, según la publicación anterior de Huntress, las siguientes reglas SIGMA que usan el Windows Event ID 4663 requieren que la política de auditoría avanzada esté configurada, y que se aplique una SACL adecuada al directorio. Consulta la publicación anterior del blog para saber cómo generar este evento.

CVE-2024-1709 - Omisión de autenticación

Mientras replicaba el exploit de omisión de autenticación, Huntress observó registros de IIS para la ruta URL maliciosa SetupWizard.aspx, que se puede usar como indicador de compromiso:

La siguiente regla Sigma detectará solicitudes realizadas a SetupWizard.aspx con un segmento de ruta adicional al final. Este comportamiento nunca es legítimo y, si se observa en el entorno real, debería indicar claramente una intención maliciosa.

Loading Gist...

Después de acceder al Asistente de configuración, un atacante ingresará nuevas credenciales para obtener acceso a Screen Connect. Al hacerlo, se escribirá una nueva base de datos de usuarios en un archivo XML temporal. La siguiente regla Sigma se puede usar para detectar cuando el servidor de ScreenConnect escribe en un archivo XML temporal en el servidor. Si bien esto puede ser un indicador de compromiso, esta actividad también se observa cuando se modifican de forma legítima los usuarios locales o sus permisos en ScreenConnect, por lo que existe una tasa de falso positivo distinta de cero.

Loading Gist...

La siguiente regla YARA es similar a la regla Sigma de registros de IIS mencionada anteriormente. Detectará entradas de registros de IIS que hagan referencia a SetupWizard.aspx con un componente de ruta adicional al final. Como se mencionó antes, un componente de ruta adicional en este archivo siempre está asociado con actividad maliciosa.

Loading Gist...

CVE-2024-1708 - Path Traversal

El exploit de path traversal permite a los atacantes escribir archivos dentro de la raíz del directorio App_Extensions. La siguiente regla Sigma debería alertar sobre modificaciones de archivos en la raíz del directorio App_Extensions, excluyendo las modificaciones legítimas de las extensiones mismas.

Loading Gist...

Animamos a los clientes y socios a contactarnos si necesitan ayuda. Si actualmente no usas Huntress y necesitas ayuda para monitorear la actividad relacionada con esta vulnerabilidad, puedes usar la prueba gratuita de Huntress.

También te podría interesar