CVE-2022-30216 - Coacción en la autenticación del servicio "Servidor" de Windows
Por Ben Barnea
Resumen ejecutivo
El investigador de Akamai, Ben Barnea, ha descubierto una nueva vulnerabilidad importante en el servicio de Windows Server a la que se asignó CVE-2022-30216 y una puntuación base de 8,8.
La vulnerabilidad aprovecha un error por un paso en un procedimiento de devolución de llamada de seguridad que implementa el servicio "Servidor".
Hemos confirmado que la vulnerabilidad existe en equipos Windows 11 y Windows Server 2022 a los que no se han aplicado parches.
Cuando se combina con un ataque de retransmisión de New Technology LAN Manager (NTLM) en los servicios de certificados de Active Directory (AD CS), la vulnerabilidad proporciona a un atacante con credenciales de dominio la capacidad de ejecutar código de forma remota en el controlador de dominio.
También creemos que un atacante podría utilizar esta técnica para modificar la asignación de certificados de un servidor y, por lo tanto, llevar a cabo la suplantación del servidor.
La vulnerabilidad se divulgó de forma responsable a Microsoft y se solucionó en el Patch Tuesday de julio.
Proporcionamos una prueba de concepto de la vulnerabilidad en nuestro Repositorio de GitHub.
Introducción
Durante los últimos meses, nuestro equipo ha llevado a cabo una investigación exhaustiva de las llamadas a procedimientos remotos de Microsoft (MS-RPC). En pocas palabras, un RPC se utiliza para comunicaciones eficaces entre procesos. Se basa en un modelo cliente-servidor estándar y es uno de los protocolos más utilizados en Windows en la actualidad.
Uno de los aspectos más interesantes que hemos identificado en el diseño de MS-RPC es la devolución de llamada de seguridad, que funciona para restringir el acceso a los servidores RPC, proporcionando esencialmente seguridad frente a usuarios no deseados, a menudo remotos. Muchos servidores RPC implementan una devolución de llamada de seguridad, cada servidor con sus propias consideraciones y lógica.
Los servicios de Windows hacen un uso extensivo de RPC para que su funcionalidad esté disponible para los clientes. Esto nos llevó a investigar los diferentes servicios y la lógica subyacente de sus implementaciones de devolución de llamada de seguridad. En un servicio de este tipo, el servicio "Servidor", pudimos detectar un defecto de seguridad que podría permitir a los atacantes llevar a cabo la suplantación del servidor o activar la coacción de autenticación en la víctima.
En este blog ofrecemos una descripción general de los aspectos de RPC que hemos estado investigando que colectivamente contribuyen a este nuevo error: qué es el error, cómo se puede utilizar y cómo mitigarlo.
¿Qué es el servicio "Servidor" de Windows?
El servicio "Servidor" (también llamado LanmanServer) es un servicio de Windows que es responsable de la gestión de los recursos compartidos SMB. Los recursos compartidos son recursos (archivos, impresoras y árboles de directorios) a los que un servidor del sistema de archivos de Internet común puede acceder a través de la red. Básicamente, los recursos compartidos de red permiten a los usuarios utilizar otros dispositivos de la red para realizar varias tareas diarias.
El servicio "Servidor" permite a un equipo remoto crear, configurar, consultar y eliminar recursos compartidos a través de RPC mediante un canal con nombre (\\pipe\srvsvc). En el resto de esta publicación, nos referiremos al servicio como srvsvc.
Existe una vulnerabilidad en srvsvc que tiene impacto porque el servicio proporciona la funcionalidad principal y, por lo tanto, se ejecuta de forma predeterminada en todos los equipos Windows.
SMB a través de QUIC
A partir de Windows 10 20H2, Microsoft introdujo una nueva función: SMB a través de QUIC. La función permite acceder a los recursos compartidos SMB a través de QUIC, un nuevo protocolo de red de capa de transporte. El objetivo de QUIC es proporcionar una conexión más fiable y segura, al tiempo que se superan los problemas comunes de Internet, como la latencia y la pérdida de paquetes.
En una interacción de red de QUIC, como medida de seguridad adicional, el cliente verifica la identidad del servidor comprobando el certificado que proporciona el servidor. Con la adición de SMB a través de QUIC, el servicio "Servidor" se convirtió en el responsable de gestionar esos certificados.
La vulnerabilidad que hemos detectado radica en esta funcionalidad. Para entenderlo, primero necesitamos explorar una de las maneras en que los servidores RPC realizan el control de acceso.
Devoluciones de llamadas de seguridad
Muchos servicios de Windows, srvsvc entre ellos, implementan un servidor RPC para permitir la comunicación entre procesos y para proporcionar acceso a su funcionalidad a diferentes clientes. RPC en Windows utiliza varios mecanismos de seguridad; nos centraremos en uno denominado "devolución de llamada de seguridad".
El objetivo de una devolución de llamada de seguridad es restringir el acceso a una interfaz RPC. El desarrollador del servidor RPC implementa la devolución de llamada y permite a cada desarrollador aplicar su propia lógica para permitir el acceso a usuarios específicos o impedir el acceso a funciones específicas. En RPC, las funciones expuestas por el servidor se representan mediante "opnums" (números de operación), que veremos en breve en la devolución de llamada de seguridad de srvsvc.
Crónica de una devolución de llamada de seguridad
Para entender el error, primero tenemos que ver una versión anterior de la devolución de llamada de seguridad de srvsvc antes de que se añadiera la función SMB a través de QUIC:
Como podemos observar arriba, la devolución de llamada de seguridad de srvsvc tiene la siguiente lógica:
- Si un cliente remoto intenta acceder a una función en el rango de 64–69 (inclusive), se deniega el acceso
- Si un cliente remoto, que no es una cuenta de clúster, intenta acceder a una función en el rango de 58–63 (inclusive), se deniega el acceso
Por lo tanto, en esencia, se impide que los clientes remotos accedan a estas funciones particulares de la interfaz. Esta comprobación de rango indica que las funciones restringidas son sensibles y solo deben ser invocadas por procesos (locales) esperados.
Con la adición de SMB a través de QUIC, Windows 10 20H2 añadió cuatro nuevas funciones al servicio srvsvc:
- LocalrServerCertificateMappingGet
- LocalrServerCertificateMappingSet
- LocalrServerCertificateMappingEnum
- LocalrServerCertificateMappingRemove
Como no era deseable que se pudiera acceder remotamente a estas funciones, se añadieron al rango de funciones locales, es decir, funciones que la devolución de llamada de seguridad de srvsvc prohíbe para clientes remotos.
Y, como se puede ver a continuación, el rango se cambió para incluir los "opnums" para estas nuevas cuatro funciones, aumentando el primer rango local de 64–69 a 64–73 y ampliando el control de acceso de la devolución de llamada de seguridad a estas funciones. Hasta aquí, todo bien.
En Windows 11 y Windows Server 2022, Microsoft añadió una nueva función llamada LocalrServerCertificateMappingModify:
Sin embargo, esta vez, el rango de funciones restringidas no ha cambiado en esta versión más reciente para incluir la nueva función añadida:
Por lo tanto, en el momento en que se añadió esta función, no estaba cubierta por la devolución de llamada de seguridad y, por lo tanto, era accesible para los clientes RPC remotos.
Oportunidades de explotación
Al invocar esta función, un atacante puede cambiar las configuraciones de asignaciones de certificados en el servidor. Una asignación de certificados es un "vínculo simbólico" entre el certificado QUIC de un servidor y un certificado del almacén de certificados. Creemos que un atacante podría utilizar esta función para añadir su propia asignación de certificados y, por lo tanto, llevar a cabo la suplantación del servidor. Tenga en cuenta que esta función no añade ni modifica un certificado en el almacén de certificados de Windows, sino que cambia una asignación del certificado que utiliza el servidor de QUIC a un certificado en el almacén de Windows.
Al intentar evaluar el impacto de la vulnerabilidad, observamos que la estructura que recibe la función contiene la ubicación del almacén del certificado:
Al proporcionar una ruta UNC como la variable storeLocation, un atacante puede provocar que LocalrServerCertificateMappingModify desencadene una solicitud RPC desde el servidor atacado a un equipo que él controla. El flujo de función que hace que se active la solicitud es el siguiente:
LocalrServerCertificateMappingModify → SsValidCertandUpdateCertinfo → CertOpenStore → _CertDllOpenSystemStoreProvW → EnumPhysicalStore → FormatSystemRegPath → RegConnectRegistryExW → BaseBindToMachine → Rpc_OpenPredefHandle → NdrClientCall3
Durante la solicitud RPC que envía el servidor a nuestro equipo, el servidor lleva a cabo la autenticación mediante el servidor del atacante. El atacante ahora puede aprovechar las credenciales de la víctima para realizar un ataque de retransmisión de NTLM.
Aprovechando la vulnerabilidad y llevando a cabo el flujo de retransmisión de NTLM, hemos logrado replicar el escenario de ataque de PetitPotam de explotación del AD CS y hacerse cargo del controlador de dominio.
Para activar la vulnerabilidad es necesario que el atacante tenga acceso a un equipo del dominio. Para el escenario de retransmisión de NTLM, es necesario añadir la función AD CS, junto con uno de sus servicios que son propensos a la retransmisión de NTLM (Inscripción web de entidad de certificación, Servicio web de inscripción de certificados).
Corrección
Microsoft publicó un parche para esta vulnerabilidad en el Patch Tuesday de julio. El problema se ha corregido de la siguiente manera:
Corregir el rango de funciones locales en la devolución de llamada de seguridad para impedir así el acceso remoto a LocalrServerCertificateMappingModify
Añadir una comprobación de acceso en cada una de las nuevas funciones locales añadidas
Tiempo de divulgación
26 de abril de 2022: se envió un informe a Microsoft.
26 de abril de 2022: el estado cambió de Nuevo a En revisión/reproducción .
9 de mayo de 2022: el estado cambió de En revisión/reproducción a Desarrollo.
12 de julio de 2022: se publica el parche.
Mitigación y detección
A continuación se muestran las recomendaciones para mitigar la retransmisión de NTLM:
A menudo, un ataque de retransmisión NTLM que explota el AD CS implicará una solicitud de TGT. El registro de eventos (EventID 4768) incluirá la dirección IP del equipo solicitante. Se pueden detectar solicitudes TGT maliciosas si se solicita un TGT para un controlador de dominio desde un equipo que no es un controlador de dominio en sí.
Hay una prueba de concepto disponible en el repositorio de Investigación sobre seguridad de Akamai.
Resumen
Cuando se añaden nuevas características, es importante tener en cuenta las posibles consecuencias que tienen, no solo en la funcionalidad de la característica en sí, sino también en la forma en que se vuelve accesible para los usuarios. En nuestro caso, SMB a través de QUIC se añadió en Windows e introdujo nuevas funciones en el servicio "Servidor". Sin embargo, la vulnerabilidad no radica en la implementación de SMB a través de QUIC, sino en la forma en que una función más antigua restringía el acceso a la interfaz RPC correspondiente.
El equipo de Investigación sobre seguridad de Akamai ha llevado a cabo varias investigaciones sobre MS-RPC, empezando por un análisis de una vulnerabilidad de tiempo de ejecución de RPC en el Patch Tuesday de abril, así como una descripción general de otra CVE que detectamos en mayo. Ben Barnea y Ophir Harpaz presentaron la investigación de la vulnerabilidad del servicio "Servidor" en DEF CON 30 en Las Vegas.