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.