CreateRCE: otra vulnerabilidad en CreateUri
Resumen ejecutivo
El investigador de Akamai Ben Barnea descubrió una vulnerabilidad en Microsoft Windows a la que se asignó la CVE-2023-35628.
Un atacante en Internet puede activar la vulnerabilidad en clientes de Outlook sin interacción alguna del usuario (sin hacer clic).
Esta vulnerabilidad radica en el análisis de una ruta de acceso por parte de la función CreateUri. Actualmente conocemos dos formas de activar esta vulnerabilidad: (1) enviando un correo electrónico especialmente diseñado a un cliente de Outlook, o (2) sugiriendo a un usuario que se desplace en el Explorador de archivos hasta una carpeta que contenga un archivo malicioso descargado.
Esta vulnerabilidad se divulgó de forma responsable a Microsoft y se solucionó en el Patch Tuesday de diciembre de 2023.
Los equipos Windows que tienen instalada la actualización de software de diciembre de 2023 están protegidos frente a esta vulnerabilidad. Además, los clientes de Outlook que utilizan servidores de Exchange con la actualización de software de marzo de 2023 instalada están protegidos contra la función explotada.
Introducción
La omnipresencia de Microsoft en la empresa y fuera de ella lo convierte en un objetivo importante (y lucrativo) para los atacantes. Como tal, hemos realizado una amplia investigación en el conjunto de productos y protocolos, que ha dado lugar a la detección de ambas vulnerabilidades y a la creación de herramientas para ayudar en la detección y la mitigación.
Como parte de esta investigación, hemos descubierto una nueva vulnerabilidad de ejecución remota de código (RCE) en la función de WinAPI CreateUri a la que se llama como parte del parche para la vulnerabilidad original CVE-2023-23397. Mientras que la cadena de vulnerabilidades de RCE anterior necesitaba encadenar dos vulnerabilidades para lograr una primitivo de RCE sin hacer clic, esta vulnerabilidad puede hacerlo por sí sola. Además de Outlook, también le mostraremos cómo activar la vulnerabilidad en el Explorador de archivos.
La saga de vulnerabilidades
Entre las vulnerabilidades solucionadas como parte del Patch Tuesday de marzo de 2023 se encontraba una vulnerabilidad crítica de Outlook descubierta por Microsoft (a la que se asignó la CVE-2023-23397) explotada en el mundo real por un atacante ruso patrocinado por el estado denominado Forest Blizzard.
En diciembre de 2023, Microsoft, junto con el Comando Cibernético Polaco, publicó que había observado intentos de explotación recientes de esta vulnerabilidad por parte del mismo atacante. Esta vulnerabilidad permitía a un atacante forzar a un cliente de Outlook a conectarse al servidor del atacante. Como parte de esta conexión, el cliente envía sus credenciales NTLM al atacante, que puede descifrarlas sin conexión o utilizarlas en un ataque de retransmisión. Esta vulnerabilidad se podía explotar de forma remota a través de Internet sin ninguna interacción del usuario (sin hacer clic).
Después de publicar el parche para esta vulnerabilidad, encontramos dos omisiones junto con una vulnerabilidad de análisis de sonido. El encadenamiento de las vulnerabilidades de omisión y análisis podría dar lugar a un primitivo de RCE completo sin hacer clic en el cliente de Outlook.
MapUrlToZone
Como parte del parche para la vulnerabilidad de Outlook CVE-2023-23397, el código responsable de gestionar un sonido de recordatorio personalizado agrega una llamada a MapUrlToZone. La llamada comprueba que la dirección URL proporcionada, especificada a través de la propiedad de MAPI extendida PidLidReminderFileParameter, no apunta a un recurso de Internet.
Aunque esto mitiga la vulnerabilidad inicial, añade una nueva superficie de ataque: la propia función MapUrlToZone; controlamos la ruta que se transfiere a MapUrlToZone.
Como parte del análisis realizado por MapUrlToZone, esta llama a CreateUri. CreateUri crea un objeto IUri que representa un Identificador de recursos uniforme (URI). Para crear el objeto, la función sabe analizar tanto las URL como algunas de las rutas de Windows en DOS.
Cuando se llama a CreateUri con una ruta de archivo (por ejemplo, mediante file:// scheme, o una ruta de Windows que apunta a un archivo/directorio), se llama a la función CrackUrlFile . También es la función que contenía las omisiones que se describen en la anterior entrada de blog.
La nueva vulnerabilidad
Al principio de CrackUrlFile, si este recibe una URL en lugar de una ruta de Windows, crea una copia de la entrada y, a continuación, transforma la copia de la URL en una ruta de Windows mediante PathCreateFromUrlW. El búfer de trabajo se marca como asignado de forma dinámica, por lo que sabrá cómo liberarlo posteriormente. Si la función recibe una ruta de Windows, funciona directamente en la ruta de entrada y, por lo tanto, no necesita liberar el puntero.
Durante el análisis del búfer de trabajo, el búfer se puede avanzar; por ejemplo, si es una ruta de dispositivo local (comienza por "\\.\" o "\\?\"), la función avanza el puntero cuatro caracteres. A continuación, si el nombre del dispositivo es "UNC\", avanza cuatro caracteres más. Si hay varias barras diagonales inversas, la función también avanza el búfer más allá de las barras diagonales inversas duplicadas.
Como parte de nuestro proceso de reversión de los parches a las omisiones, hemos observado que se ha añadido un nuevo código en CrackUrlFile en julio de 2023, lo que parecía no estar relacionado con nuestras omisiones (Figura 1).
Como parte del análisis de la ruta, la función comprueba si el componente de ruta es de una ruta de unidad o de acceso raíz. En caso afirmativo, marca la ruta como local. El nuevo código reemplaza el puntero de búfer original por un puntero al componente de ruta (el búfer avanzado) si la ruta es de unidad.
Este es el origen del error: El puntero que se ha avanzado se guarda. Posteriormente, el puntero de búfer original (PPWorkingBuffer en la Figura 1) se recupera y se libera si estaba asignado de forma dinámica. Puesto que este se reemplazó por el puntero avanzado, se produce una llamada a free() con un puntero que no fue devuelto por malloc. Esto proporciona a un atacante un primitivo para proporcionar al asignador de memoria los metadatos de un fragmento malicioso.
Para que se active la vulnerabilidad, primero debemos especificar una URL de esquema de archivos con una ruta UNC. A continuación, hay que marcar la ruta como una ruta de unidad, por lo que es necesario utilizar una unidad compartida (C:). La ruta completa para activar la vulnerabilidad tendrá este aspecto:
file://./UNC/C:/Akamai.com/file.wav
El código corregido copia a continuación los bytes del componente de ruta mediante RtlMoveMemory, en lugar de guardar el puntero.
Activación a través del explorador
Aunque la búsqueda de estos lugares estaba fuera del ámbito de nuestra investigación, realizamos un intento rápido: activándola a través del Explorador de Windows.
Para ello, creamos un acceso directo (archivo .lnk) que apuntaba a la ruta vulnerable. Cuando la víctima visualiza el directorio en el que reside el archivo de acceso directo, la vulnerabilidad se activa en el Explorador, lo cual provoca un bloqueo inmediato (Figura 2).
Para comprobar si su equipo es vulnerable a este problema, puede descargar nuestra prueba de concepto (PoC), que bloqueará Explorer. (Lea detenidamente los detalles y los riesgos de la PoC en nuestro repositorio de investigación sobre seguridad antes de utilizarla).
Resumen
Esta es nuestra última publicación de blog relacionada con la investigación sobre el posible impacto de la CVE-2023-23397.
En mayo de 2023, cuando descubrimos la primera omisión, recomendamos eliminar la función explotada, dado que el uso de MapUrlToZone añade una nueva superficie de ataque. También hemos mencionado que exponer una superficie de ataque de análisis de sonido a un atacante remoto sin necesidad de hacer clic y sin utilizar un espacio aislado, presenta peligros para los usuarios y no les reporta ningún valor.
En nuestra investigación posterior, conseguimos demostrar precisamente esto con la detección de dos omisiones, un problema de análisis de sonido y, por último, una ruta de Windows que analiza los daños en la memoria.
Esperamos que haya aprendido cosas nuevas sobre las rutas de Windows, los códecs de sonido y las diferentes vulnerabilidades a través de estas publicaciones. Animamos a otros investigadores a que examinen los parches y piensen en cómo se podrían omitir. No podemos descartar que existan más omisiones MapUrlToZone .
¿Quiere saber más?
Lea nuestras publicaciones de blog anteriores sobre este tema:
- Supresión del sonido: encadenamiento de vulnerabilidades para la ejecución remota de código en Outlook: parte 1
- Supresión del sonido: encadenamiento de vulnerabilidades para la ejecución remota de código en Outlook: parte 2
- De una vulnerabilidad a otra: el análisis de parches de Outlook revela un defecto importante en la API de Windows