CVE-2024-38077: Ejecución remota de código en el servicio de licencias de Escritorio remoto de Windows ("MadLicense")
I. Resumen de la vulnerabilidad
- CVE ID: CVE-2024-38077
- Alias: MadLicense
- CVSS Score: 9.8 (Crítico)
- Type: Desbordamiento de búfer basado en montón (CWE-122)
- Discovered by: Ver, Lewis Lee, Zhiniang Peng
- Description: Una vulnerabilidad de ejecución remota de código sin autenticación y sin clics en el servicio de licencias de Escritorio remoto (RDL) de Windows. Un atacante no autenticado puede enviar un paquete RPC manipulado al punto final
RPC over TCP expuesto por mstlsap.dll / tlslicense.dll, desencadenando un desbordamiento de búfer basado en montón que conduce a la ejecución de código arbitrario en el contexto de SYSTEM.
II. Detalles técnicos
El servicio de licencias de Escritorio remoto escucha en puntos finales RPC dinámicos (normalmente puertos 49664–49681) accesibles a través del puerto TCP 135 (Asignador de puntos finales RPC). La vulnerabilidad reside en el manejador de la interfaz RPC LicensingSendResponse o relacionado dentro de la gestión de memoria del montón del servicio de licencias. Al enviar una solicitud de protocolo de licencias especialmente manipulada con una estructura LicensingBinary de tamaño excesivo o malformada, el servicio realiza una memcpy insegura en un búfer del montón de tamaño insuficiente, corrompiendo los metadatos adyacentes del montón y permitiendo la ejecución de código.
Aspectos clave:
- Pre-auth: Sin credenciales válidas ni sesión RDP requerida.
- 0-click: Sin interacción del usuario en el objetivo.
- Network vector: Explotado de forma remota a través de la red.
- Impact: Compromiso completo a nivel SYSTEM del servidor Windows objetivo.
III. Versiones afectadas
Versiones anteriores (Windows 2000 Server, Server 2003, Server 2008) también pueden verse afectadas si el servicio RDL está habilitado.
IV. Configuración del entorno
- Instale una versión compatible de Windows Server (2008–2025) en una máquina virtual.
- Asegúrese de que el rol de Licencias de Escritorio remoto esté instalado a través del Administrador del servidor:
- Agregar roles y características → Servicios de Escritorio remoto → Licencias de Escritorio remoto
- Inicie/verifique el servicio:
net start "Remote Desktop Licensing"
- Confirme que el servicio está escuchando:
netstat -an | findstr LISTENING
- El servicio RDL registra puntos finales RPC dinámicos. Consulte el puerto 135 con una herramienta de asignación de puntos finales RPC.
- Aísle la VM objetivo de las redes de producción — el PoC provocará un bloqueo de forma predeterminada.
V. Pasos de reproducción
- Ejecute el script PoC contra un servidor Windows objetivo con el servicio RDL expuesto:
python exploit.py --target <TARGET_IP>
- En el objetivo, supervise un bloqueo del servicio
tlslicense.dll o un bloqueo del sistema (BSOD dependiendo de la gravedad de la corrupción del montón).
- Para verificar el desbordamiento, adjunte un depurador (WinDbg) al
svchost.exe que aloja el servicio RDL antes de activar el exploit y observe la violación de acceso.
VI. Código PoC
El script adjunto exploit.py en este directorio contiene una reproducción del ataque MadLicense. Se conecta al servicio RDL objetivo a través de RPC sobre TCP, construye una solicitud de licencia malformada con un blob binario de tamaño excesivo y desencadena el desbordamiento de búfer basado en montón.
VII. Mitigación
- Parche: Instale la actualización de seguridad oficial de Microsoft del martes de parches de julio de 2024 (KB5040426 / KB5040430 / KB5040434 / KB5040437 según la versión de Windows).
- Solución alternativa:
- Deshabilitar el servicio de licencias de Escritorio remoto si no es necesario:
sc stop "Remote Desktop Licensing"
sc config "Remote Desktop Licensing" start= disabled
- Bloquear los puertos dinámicos RPC entrantes (TCP 49152–65535 / 49664–49681) en el firewall mientras se permite solo el tráfico RPC necesario.
- Restringir el acceso a TCP/135 y puertos dinámicos RPC mediante segmentación de red.
VIII. Referencias