
CVE-2023-38831 - WinRAR
Este repositorio contiene una lógica de detección para CVE-2023-38831 (explotación de suplantación de archivos ZIP / doble extensión de WinRAR) con consultas sin procesar / bloques de código y nombres de proveedores específicos de ETW + ID de eventos. Una versión vulnerable de WinRAR (< 6.23) en el sistema objetivo
CVE-2023-38831 se explota cuando:
El usuario abre un ZIP malicioso en WinRAR
El archivo comprimido contiene:
● Un archivo señuelo (por ejemplo, invoice.pdf )
● Un directorio con el mismo nombre (por ejemplo, invoice.pdf )
● Dentro del directorio "dos" archivos con el mismo nombre pero nombres ligeramente diferentes (para un archivo, un espacio y que termina con cualquier extensión; por ejemplo, si el primer archivo es "invoice.pdf ", el segundo puede ser cualquier script o ejecutable como "invoice.pdf .cmd")
WinRAR ejecuta el script o ejecutable en lugar de abrir el documento (“PDF” en este caso)
Esta ejecución se desencadena al llamar a la función ShellExecuteExW para ejecutar el archivo, pasando shExecInfo (ShellExecute a través del Explorador)
WinRAR genera un proceso hijo (cmd, powershell, mshta, wscript, exe, igual que cualquier cosa presente dentro de la carpeta)
La ejecución a menudo ocurre desde Temp / AppData / ruta extraída
Resumen del flujo El usuario abre el archivo
↓
WinRAR muestra el archivo señuelo
↓
El usuario hace doble clic en el documento
↓
WinRAR extrae el directorio con el mismo nombre
↓
Ejecutable escrito en *.pdf\*.pdf .exe
↓
ShellExecute vía Explorador
↓
ImageLoad del ejecutable
↓
Ejecución del payload
Por qué este flujo es importante para la detección
● Sin uso de macros
● Sin dependencia de la creación de procesos
● El exploit se basa en el enmascaramiento del sistema de archivos
● Señal de alta confianza y bajo ruido
Detalles técnicos importantes
Los archivos se escriben en una estructura especial
Es como tener dos objetos (archivo/directorio) con el mismo nombre; cuando tienes un archivo y un directorio con el mismo nombre en un archivo comprimido y quieres abrir el archivo temporalmente, al hacer doble clic en él (archivo objetivo) dentro del archivo comprimido abierto, WinRAR extrae ese archivo por ti y también extrae todos los archivos que tienen el mismo nombre que el archivo objetivo. Todos se escriben en un directorio temporal en la ruta %tmp%.
| Nombre de archivo/directorio | Ruta de extracción |
| ------------------------------------------------------ | --------------------------------------------------------------------------------- |
| CLASSIFIED_DOCUMENTS.txt <– archivo objetivo en el que se hizo clic | `C:\Users\UsersName\AppData\Loca\Temp\Rar$DIa8432.13968\CLASSIFIED_DOCUMENTS.txt\`|
| CLASSIFIED_DOCUMENTS.txt .cmd <– el archivo en el directorio | `C:\Users\UsersName\AppData\Loca\Temp\Rar$DIa8432.13968\CLASSIFIED_DOCUMENTS.txt\`|
Si hay dos archivos en un directorio temporal (de descompresión) con el mismo nombre pero diferente tamaño (por ejemplo, 20k y 12k), y abres el archivo comprimido y abres el primer archivo, 1.txt, que tiene 20k bytes, WinRAR te pedirá que reemplaces un archivo con el segundo archivo, 1.txt, que tiene 10K. Si haces clic en "Sí", solo se abrirá el segundo archivo, 1.txt. Esta condición se puede añadir como exclusión.
Punto importante para la lógica de detección
Ejecución de procesos desencadenada desde una ruta de extracción ZIP o un directorio temporal, con una extensión engañosa o una carpeta que se hace pasar por un archivo
Cuando WinRAR libera un archivo para descompresión en el directorio temporal, debe contener dos archivos con el mismo nombre pero nombres ligeramente diferentes (un espacio y que termina con cualquier extensión), como un nombre igual al del archivo principal con un “ ” (CLASSIFIED_DOCUMENTS.pdf ) al final de su nombre y luego un “.cmd” (CLASSIFIED_DOCUMENTS.pdf .cmd).
Cuando WinRAR carga una DLL y llama a la función ShellExecuteExA, el parámetro "pExecInfo" tiene una ruta con un espacio y que termina con cualquier extensión, como "CLASSIFIED_DOCUMENTS.pdf .cmd."
Proveedores ETW y filosofía de detección (solo ETW) Proveedores ETW
| Propósito | Proveedor ETW |
| -------------------------- | ------------------------------------- |
| Creación de procesos | `Microsoft-Windows-Kernel-Process` |
| Visibilidad de la línea de comandos | `Microsoft-Windows-Security-Auditing` |
| Operaciones de archivo (opcional) | `Microsoft-Windows-Kernel-File` |
La detección se basará en (si no hay ProcessStart, CreateProcess o lógica de padre/hijo estilo EDR):
● ETW del sistema de archivos
● ETW de Shell / Explorador
● ETW de carga de imagen (opcional, sin creación)
● ETW de línea de comandos (opcional)
Proveedores ETW principales
| Propósito | Proveedor ETW |
| -------------------------- | ------------------------------------- |
| Creación de directorios | `Microsoft-Windows-Kernel-File` |
| Creación de EXE | `Microsoft-Windows-Kernel-File` |
| Ejecución de Shell | `Microsoft.Windows.ShellExecute` |
| Carga de imagen | `Microsoft-Windows-Kernel-Image` |
| Explorador | `Microsoft-Windows-Explorer` |
| Shell | `Microsoft-Windows-Shell-Core` |
Lógica de detección sin procesar
A alto nivel, la lógica detecta:
● WinRAR.exe iniciando escrituras de archivos
● Creación de un directorio y un archivo con el mismo nombre base
● Extensión de ejecutable que se materializa después de un renombrado o sobrescritura
● Secuencia que ocurre dentro de una ventana de tiempo estrecha (<2 s)
Este patrón es extremadamente raro en flujos de trabajo benignos, pero es fundamental para la ruta de ejecución del exploit.
● La regla evita intencionalmente:
● Inspección de la línea de comandos
● Seguimiento de procesos hijos
● Hash completo de archivos
La lógica de detección principal se menciona a continuación, junto con un nivel de confianza y una breve justificación.
1. Carga de imagen (confirmación de ejecución)
Razón: esto confirma la ejecución real sin telemetría de creación de procesos.
Lógica de detección:
Cargador de Windows:
● Mapea Invoice.pdf .exe en memoria
Señal ETW:
● ImageLoad
● Ruta de imagen:
● *.pdf\*.pdf .exe
2. Regla de detección (API ShellExecuteExA) - lógica de regla de alta fidelidad
Regla de detección genérica basada en la siguiente telemetría:
● Eventos de creación de archivos por parte de WinRar.exe
● Eventos de carga de imagen para WinRar.exe que carga una DLL Shell32.dll y comienza a usar una API (ShellExecuteExA|W) con los parámetros.
● Esta función solo recibe un argumento llamado SHELLEXECUTEINFO, que es una estructura. Como ves, esta estructura tiene muchos campos, pero dos de ellos son importantes para nosotros:
lpVerb y lpFile.
● lpVerb: indica que si estableces lpVerb en NULL, ShellExecuteExA|W usa el verbo predeterminado si está disponible; si no, realiza el verbo “open”. Y el verbo “open” abre o ejecuta el archivo.
● lpFile: lpFile es la ruta del archivo que se usa en ShellExecuteExA para realizar el verbo; y ahora puedes prestar atención al carácter de espacio (0x20) al final de la ruta del archivo.
Nota:
1- Shell32.dll: aquí es donde se define ShellExecuteExA. Contiene la lógica para analizar la estructura SHELLEXECUTEINFO y determinar cómo manejar la solicitud (por ejemplo, abrir un documento, ejecutar un EXE o mostrar un cuadro de diálogo de propiedades)
2- Así es como funciona la vulnerabilidad: la vulnerabilidad está aquí. WinRAR eliminó el espacio del nombre del archivo en el momento de la escritura, pero olvidó aplicar este cambio a la lista de extracción. Entonces el nombre del archivo objetivo no cambió y el espacio sigue en el nombre del archivo.
Tambi├®n puedo decir que ShellExecuteExA abre el archivo “CLASSIFIED_DOCUMENTS.pdf .cmd”. El “.cmd” no importa para ShellExecuteExA; solo ejecuta un archivo con el nombre “CLASSIFIED_DOCUMENTS.pdf ” en esa ruta.
Lógica de detección (lógica de regla de alta fidelidad):
● Basado en SQL: \\Detection_Logic\\SQL-based-ShellExecute.txt
● KQL (ProcessCommandLine): \\Detection_Logic\\KQL-API-ProcessCommandLine.txt
● Lógica de detección en pseudocódigo: \\Detection_Logic\\SQL-API-ShellExecute.txt
Nota: puedes crear una lógica de detección de acuerdo con los estándares anteriores. También estoy añadiendo un script simple de Python para obtener eventos que te ayudarán a escribir tu regla de detección. También se añadió algo útil al crear reglas basadas en ETW.
| Proveedor | ID de evento | ID de evento / Tarea |
| ------------------------------------- | ----------------------------------------- | --------------------------- |
| `Microsoft-Windows-Shell-Core` | {30336983-0362-4540-9E69-14844E6A3B7A} | ID de evento 1 (Ejecutar) |
| `Microsoft-Windows-Kernel-Process` | {22FB2AD3-E163-4078-8C2A-801648437D2D} | Carga de imagen / Inicio de proceso |
3. Lógica de regla de alta fidelidad para la explotación de CVE-2023-38831 en WinRAR
- Razón: alerta cuando se crea o carga un ejecutable desde un directorio cuyo nombre termina con una extensión de documento, y la ejecución se inicia a través de las API del Explorador/Shell.
- Lógica de detección en pseudocódigo (lógica de regla de alta fidelidad): \\Detection_Logic\\WinRAR-CVE-2023-38831-Exploitation.txt
4. Regla de detección EDR (basada en ETW)
Regla de detección EDR genérica basada en la siguiente telemetría:
● Eventos de creación de archivos
● Ejecución de Shell / invocación del Explorador
● Eventos de carga de imagen (opcionales pero sólidos)
Lógica de detección: \\Detection_Logic\\EDR-Detection-ETW-based.txt
5. Consulta KQL sin DeviceProcessEvents (si el endpoint lo admite)
Razón: esta versión funciona sin depender de DeviceProcessEvents.
Lógica de detección: \\Detection_Logic\\KQL-Detection-without-DeviceProcessEvents.txt
6. Señal de ejecución de Shell (si está habilitada y es compatible)
Razón: esto refuerza la confianza cuando se correlaciona con la creación de archivos.
Lógica de detección: \\Detection_Logic\\Shell-Execution-Signal.txt
7. Amigable para SOC (flujo de triaje)
Razón: esta regla se creó para cada paso descubierto durante un ataque.
Lógica de detección: \\Detection_Logic\\SOC-Friendly.txt
(Alerta / si se incluye ProcessStart, CreateProcess o lógica de padre/hijo estilo EDR)
1. Detectar cuando winrar.exe crea un directorio/archivo sospechoso, especialmente desde rutas de extracción temporal o de archivos, y ejecuta un archivo sospechoso creado usando una versión vulnerable de WinRAR
Razón: crea reglas según los eventos que maneja tu producto, como los basados en acceso, eventos o en la nube.
Lógica de detección: \\Detection_Logic\\Gen-Pseudocode-Detection-Logic.txt
2. Detectar cuando winrar.exe genera un proceso hijo sospechoso, especialmente desde rutas de extracción temporal o de archivos
Lógica de detección:
Endpoint: \\Detection_Logic\\winrar-spawns-suspicious-child-process.txt
Regla Sigma: \\Detection_Logic\\Sigma-Rule-WinRAR Exploit.txt
3. Alerta basada en el proveedor ETW (creación de procesos)
| Proveedor | ID de evento |
| ------------------------------------- | --------------------------- |
| `Microsoft-Windows-Security-Auditing` | 4688 (Creación de procesos) |
Lógica de detección
● Proceso padre = winrar.exe
● Nuevo proceso = motor de scripting o ejecutable
● La línea de comandos incluye Temp/AppData
4. Consulta KQL con DeviceProcessEvents (si el endpoint lo admite)
Razón: si queremos desarrollar usando DeviceProcessEvents.
Lógica de detección: \\Detection_Logic\\KQL-Detection-with-DeviceProcessEvents.txt
5. Indicador de ataque (puedes añadir una alerta de alta confianza)
Al cumplir las condiciones siguientes, puedes añadir una regla de IOA o lista de vigilancia para alertar.
| Indicador | Confianza |
| ---------------------------------- | ---------- |
| winrar.exe generando cmd/powershell | Alta |
| Ejecución desde Temp/AppData | Alta |
| Ejecución de `.cmd/.bat /.exe ` | Alta |
| ZIP de doble extensión abierto | Media |
Crea una lista de vigilancia para dos archivos con el mismo nombre en un directorio creado por una versión vulnerable de WinRAR (< 6.23):
Como no puedes tener dos archivos con el mismo nombre en un directorio, y tampoco puedes tener un directorio y un archivo con el mismo nombre.
Pero esto es posible en software de compresión como WinRar/7zip. En un archivo comprimido, sin importar si tienes archivos con el mismo nombre, los archivos se escriben en una estructura especial.
Así que puedes tener dos objetos (archivo/directorio) con el mismo nombre en un archivo ZIP/RAR.
Disparadores probablemente legítimos
● cmd.exe generado por instaladores autoextraíbles de 7-Zip/WinRAR
● powershell.exe lanzado por actualizadores de software empresarial empaquetados en RAR
● rundll32.exe utilizado por instaladores de controladores de impresora o GPU
Lógica de exclusión (ejemplo)
AND NOT (
ChildImage IN (cmd.exe, powershell.exe, rundll32.exe)
AND
CommandLine CONTAINS (
"setup.exe",
"install.cmd",
"driverinstall",
"vendorupdate"
)
)
Esto preserva la detección del exploit mientras suprime el comportamiento conocido de los instaladores.
Telemetría de archivos comprimidos (eventos del sistema de archivos): correlacionar esta regla con la actividad de extracción de RAR/ZIP (por ejemplo, la creación de archivos .cmd/.bat/.exe inmediatamente antes de la ejecución, especialmente desde directorios de extracción de WinRAR como Rar$EX*) aumentaría significativamente la confianza y reduciría los falsos positivos al demostrar que la ejecución siguió directamente a la extracción del archivo.
T1204.002 – Ejecución de usuario: archivo malicioso
T1059 – Intérprete de comandos y scripts
T1036 – Enmascaramiento (doble extensión)
Este código de detección es solo para fines educativos y de pruebas autorizadas.
No lo uses en sistemas que no te pertenezcan o para los que no tengas permiso explícito de prueba.