CVE-2020-3992 BOLETÍN TÉCNICO

RESUMEN DE LA VULNERABILIDAD

El 23 de febrero de 2021, VMware dio a conocer una vulnerabilidad crítica que se identificó en uno de sus productos, y al día de hoy retomó importancia. VMware compartió esta información con el objetivo de mantener a sus clientes informados y para que pudieran tomar medidas inmediatas para solucionar la vulnerabilidad. Los hallazgos revelaron lo siguiente:

La vulnerabilidad registrada con el CVE-2020-3992, afecta principalmente al producto VMware ESXi OpenSLP en sus versiones 7.0, 6.7 y 6.5. Un usuario malintencionado que tenga acceso al puerto 427 en una máquina ESXi y resida en la red de administración puede realizar un buffer overflow, lo que permitiría la ejecución remota de código. Los posibles efectos de la vulnerabilidad son graves, como el robo de información o la modificación de la configuración. Debido a la magnitud de esta vulnerabilidad, se evalúa con un CVSS de 9.8, lo que la convierte en crítica.

VMware ha proporcionado soluciones para mitigar esta vulnerabilidad, por lo que es altamente recomendable aplicar estas soluciones para prevenir futuros ataques.

ANÁLISIS TÉCNICO DE LA EXPLOTACIÓN

La complejidad de esta vulnerabilidad es baja, lo que significa que no se requieren conocimientos técnicos avanzados para explotarla. Un atacante con conocimientos básicos podría explotar esta vulnerabilidad.

Como se mencionó anteriormente, esta vulnerabilidad puede ser explotada a través del puerto 427. Este puerto es utilizado por el servicio de red Service Location Protocol (SLP), un protocolo estándar que proporciona un marco para permitir que las aplicaciones de red descubran la existencia, ubicación y configuración de los servicios en red. SLP está habilitado de forma predeterminada en los hosts ESXi y se puede configurar mediante vSphere Client o ESXi Shell.

Esta vulnerabilidad se debe a una validación inadecuada de los datos de entrada proporcionados por el usuario en los mensajes SLP.

Para construir un exploit en Python, la librería «Socket» es la principal herramienta que se utilizará para establecer una conexión TCP hacia la dirección IP y puerto especificado.

Después, se declaran un par de variables que almacenarán la carga útil representada en secuencias de bytes que serán transmitidas al objetivo.

La primera variable, almacena bytes que hacen referencia a los campos de un encabezado SLP, con la finalidad de enviar un paquete SLP específicamente diseñado para aprovechar esta vulnerabilidad.

Como ya ha sido mencionado, no existe un campo específico en el protocolo SLP que sea responsable de la vulnerabilidad; el problema se debe a una falta de validación adecuada en los datos de entrada en varios campos de los mensajes SLP. Analizando el header SLP, un campo relevante es:

Function-ID: hace referencia a un identificador numérico que se utiliza para reconocer la función o servicio específico que se solicita. En el caso específico de esta vulnerabilidad, el campo Function-ID establecido en «8» distingue la función DAAdvert, la cual se utiliza para anunciar la presencia de un Agente de Directorio (DA) y permitir que se descubran los servicios disponibles en la red.

El Agente de Directorio es un componente clave en el protocolo SLP, ya que es responsable de mantener una base de datos centralizada de servicios disponibles en la red. La función DAAdvert se utiliza para que el DA pueda anunciar su presencia en la red y para que otros componentes SLP puedan registrarse con el DA y hacer consultas sobre los servicios disponibles.

La segunda variable definida hace referencia a los campos de un mensaje SLP cuando el campo “function-ID” se establece en “8”.

Analizando el formato del mensaje, podemos observar que hay 2 campos de interés para explotar esta vulnerabilidad, los cuales son:

Scope-list: Este campo en el protocolo SLP permite a los clientes buscar servicios dentro de un ámbito específico, en lugar de tener que buscar en toda la red. Sin embargo, en el contexto de esta vulnerabilidad, un atacante puede enviar un mensaje DAAdvert con un «scope-list» malicioso que contenga datos de más de 1024 bytes. Este ataque tiene como objetivo desbordar el búfer y permitir la ejecución de código arbitrario en el servidor afectado.

Attr-list: Este campo se utiliza para especificar los atributos del servicio que se está anunciando, tales como el nombre, la descripción y los atributos de configuración. Para explotar la vulnerabilidad CVE-2020-3992, un atacante puede enviar un mensaje DAAdvert con un «attr-list» malicioso que contenga datos de más de 1024 bytes para sobrepasar el búfer y permitir la ejecución de código arbitrario en el servidor afectado. Esto puede permitir al atacante realizar diversas acciones malintencionadas, como el robo de información o la modificación de la configuración del sistema. Por lo tanto, es esencial tomar medidas para mitigar esta vulnerabilidad.

Después se concatenan las variables mencionadas anteriormente, se crea un objeto de la clase “Socket” que invoca al método “socket()” recibiendo como parámetros “AF_INET” que indica la comunicación en capa de transporte utilizando el protocolo de internet versión 4 (IPv4), y el parámetro “SOCK_STREAM” indica que se utilizará un protocolo orientado a conexión (TCP).

Posteriormente se almacena en una variable los componentes del socket, siendo la dirección IPv4 del objetivo y puerto del mismo, siendo para este caso en específico en puerto 427. Utilizando el objeto ya instanciado se utiliza el método “connect()” para establecer la conexión mediante TCP al objetivo.

Como último paso, se envían los datos del socket al objetivo, utilizando el método “send()” se envían los bytes y, finalmente, se cierra la conexión de red establecida por el socket mediante el método “close()”.

MITIGACIÓN Y REMEDIACIÓN

VMWare dió a conocer la solución a esta vulnerabilidad. El equipo de ESXi investigó todas las vulnerabilidades que afectan a este hipervisor y determinaron que la posibilidad de explotación se puede eliminar siguiendo los siguientes pasos. Cabe destacar que está solución alternativa está destinada a ser temporal, por lo que se recomienda instalar los parches de seguridad correspondientes.

  1. Iniciar sesión en los hosts ESXi mediante una sesión SSH.
  2. Detener el servicio SLP en el host mediante el comando:

/etc/init.d/slpd stop

NOTA: El servicio ESXi solamente se puede detener cuando el servicio no está en uso, para ver el estado operativo del demonio SLP se utiliza el comando:

esxcli system slp stats get

  1. Ejecutar el siguiente comando para deshabilitar el servicio SLP:

esxcli network firewall ruleset set -r CIMSLP -e 0

Ahora, para hacer que los cambios persistan en los reinicios:

chkconfig slpd off

Para checar que los cambios se aplicaron:

chkconfig –list | grep slpd

Ciertas versiones posteriores de ESXi informan sobre el servicio SLPD en la GUI de vCenter, para hacer el proceso anterior en una GUI se siguen los siguientes pasos.

  1. Para verificar si puede actualizar el servicio SLP a través del cliente vSphere, se inicia sesión en vCenter.
  2. Seleccionar el host ESXi y hacer clic en «Configurar» — «Servicios». Buscar SLP en la lista. Sí SLP no está en la lista, utilizar el proceso detallado anteriormente.
  1. Seleccionar SLPD y hacer clic en «Detener» y luego hacer clic en «Aceptar».
  1. Seleccionar «Editar política de inicio» y seleccionar «Iniciar y detener manualmente». Hacer clic en Aceptar.

En conclusión, la solución alternativa es temporal, por lo que los parches de seguridad para cada versión correspondiente se encuentran en los siguientes sitios oficiales de VMWare: 

REFERENCIAS

VMSA-2020-0023.3 . (2020, 20 de octubre). vmware. https://www.vmware.com/security/advisories/VMSA-2020-0023.html

Cve-cve-2020-3992 . (s/f). Mitre.org. Recuperado el 2 de marzo de 2023, de https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-3992

Leong, L. (2021, 2 de marzo). CVE-2020-3992 y CVE-2021-21974: Ejecución de código remoto previo a la autenticación en VMware ESXi . Iniciativa Día Cero. https://www.zerodayinitiative.com/blog/2021/3/1/cve-2020-3992-amp-cve-2021-21974-pre-auth-remote-code-execution-in-vmware-esxi

(S/f). Ietf.org. Recuperado el 2 de marzo de 2023, de https://www.ietf.org/rfc/rfc2608.txt

<em>Luis Herrera</em>
Luis Herrera

Analista Blue Team en Global Cybersec