CVE-2023-38831 - WinRAR
Ce dépôt contient une logique de détection pour CVE-2023-38831 (exploit WinRAR de falsification de fichier ZIP / double extension) avec des requêtes brutes / blocs de code et des noms de fournisseurs ETW spécifiques + ID d'événements. Une version vulnérable de WinRAR (< 6.23) sur le système cible
CVE-2023-38831 est exploité lorsque :
L'utilisateur ouvre un ZIP malveillant dans WinRAR
L'archive contient :
● Un fichier leurre (par ex., invoice.pdf )
● Un répertoire avec le même nom (par ex., invoice.pdf \ )
● À l'intérieur du répertoire, "deux" fichiers avec le même nom mais des noms légèrement différents (pour un fichier, un espace et se terminant par n'importe quelle extension ; par exemple, si le 1er fichier est un "invoice.pdf " alors le 2e peut être un script ou exécutable comme "invoice.pdf .cmd")
WinRAR exécute le script ou l'exécutable au lieu d'ouvrir le document (“PDF” dans ce cas)
Cette exécution est déclenchée via l'appel de la fonction ShellExecuteExW pour exécuter le fichier, en passant shExecInfo (ShellExecute via Explorer)
WinRAR génère un processus enfant (cmd, powershell, mshta, wscript, exe, selon ce qui est présent dans le dossier)
L'exécution se produit souvent depuis Temp / AppData / le chemin d'extraction
Résumé du flux L'utilisateur ouvre l'archive
↓
WinRAR affiche le fichier leurre
↓
L'utilisateur double-clique sur le document
↓
WinRAR extrait le répertoire avec le même nom
↓
Exécutable écrit dans *.pdf\*.pdf .exe
↓
ShellExecute via Explorer
↓
ImageLoad de l'exécutable
↓
Exécution de la charge utile
Pourquoi ce flux est important pour la détection
● Aucune utilisation de macro
● Aucune dépendance à la création de processus
● L'exploit repose sur le masquage du système de fichiers
● Signal à haute confiance et faible bruit
Détails techniques importants
Les fichiers sont écrits dans une structure spéciale
Par exemple, avoir deux objets (fichier/répertoire) avec le même nom. Lorsque vous avez un fichier et un répertoire avec le même nom dans un fichier d'archive et que vous souhaitez ouvrir le fichier temporairement en double-cliquant dessus (fichier cible) dans le fichier d'archive ouvert, WinRAR extrait ce fichier pour vous. Il extrait également tous les fichiers ayant le même nom que le fichier cible. Tous sont écrits dans un répertoire temporaire dans le chemin %tmp%.
| Nom du fichier/répertoire | Chemin d'extraction |
| ------------------------------------------------------ | --------------------------------------------------------------------------------- |
| CLASSIFIED_DOCUMENTS.txt <–fichier cible cliqué dessus | `C:\Users\UsersName\AppData\Loca\Temp\Rar$DIa8432.13968\CLASSIFIED_DOCUMENTS.txt\`|
| CLASSIFIED_DOCUMENTS.txt .cmd <– le fichier dans le répertoire | `C:\Users\UsersName\AppData\Loca\Temp\Rar$DIa8432.13968\CLASSIFIED_DOCUMENTS.txt\`|
S'il y a deux fichiers dans un répertoire temporaire (décompression) avec le même nom mais des tailles différentes (par exemple, 20k et 12k) et que vous ouvrez l'archive et ouvrez le premier fichier, 1.txt, qui fait 20k octets, WinRAR vous demandera de remplacer un fichier par le second fichier, 1.txt, qui fait 10k. Si vous cliquez sur "Oui", seul le second fichier, 1.txt, s'ouvrira. Cette condition peut être ajoutée pour exclusion.
Point important pour la logique de détection
Exécution de processus déclenchée depuis un chemin d'extraction ZIP ou un répertoire temporaire, avec une extension trompeuse ou un dossier se faisant passer pour un fichier
Lorsque WinRAR libère un fichier pour décompression dans le répertoire temporaire, il doit contenir deux fichiers avec le même nom mais des noms légèrement différents (un espace et se terminant par n'importe quelle extension), comme le nom du fichier principal avec un “ ” (CLASSIFIED_DOCUMENTS.pdf ) à la fin de son nom, puis un “.cmd” (CLASSIFIED_DOCUMENTS.pdf .cmd).
Lorsque WinRAR charge une DLL et appelle la fonction ShellExecuteExA, le paramètre "pExecInfo" a un chemin avec un espace et se terminant par n'importe quelle extension, comme "CLASSIFIED_DOCUMENTS.pdf .cmd."
Fournisseurs ETW et philosophie de détection (ETW uniquement) Fournisseurs ETW
| But | Fournisseur ETW |
| -------------------------- | ------------------------------------- |
| Création de processus | `Microsoft-Windows-Kernel-Process` |
| Visibilité de la ligne de commande | `Microsoft-Windows-Security-Auditing` |
| Opérations sur les fichiers (optionnel) | `Microsoft-Windows-Kernel-File` |
La détection reposera sur (si pas de ProcessStart, CreateProcess ou logique parent/enfant de type EDR) :
● ETW du système de fichiers
● ETW du Shell / Explorer
● Chargement d'image ETW (optionnel, hors création)
● Ligne de commande ETW (optionnel)
Fournisseurs ETW principaux
| But | Fournisseur ETW |
| -------------------------- | ------------------------------------- |
| Création de répertoire | `Microsoft-Windows-Kernel-File` |
| Création d'EXE | `Microsoft-Windows-Kernel-File` |
| Exécution du Shell | `Microsoft.Windows.ShellExecute` |
| Chargement d'image | `Microsoft-Windows-Kernel-Image` |
| Explorateur | `Microsoft-Windows-Explorer` |
| Shell | `Microsoft-Windows-Shell-Core` |
Logique de détection brute
À un niveau élevé, la logique détecte :
● WinRAR.exe initiant des écritures de fichiers
● Création à la fois d'un répertoire et d'un fichier avec le même nom de base
● Extension exécutable apparaissant après renommage ou écrasement
● Séquence se produisant dans une fenêtre temporelle étroite (<2s)
Ce modèle est extrêmement rare dans les workflows bénins mais central dans le chemin d'exécution de l'exploit.
● La règle évite intentionnellement :
● L'inspection de la ligne de commande
● Le suivi des processus enfants
● Le hachage complet des fichiers
La détection de la logique de base est mentionnée ci-dessous, avec un niveau de confiance et une brève justification.
1.Chargement d'image (Confirmation d'exécution)
Raison : Cela confirme l'exécution réelle sans télémétrie de création de processus.
Logique de détection :
Chargeur Windows :
● Mappe Invoice.pdf .exe en mémoire
Signal ETW :
● ImageLoad
● Chemin de l'image :
● *.pdf\*.pdf .exe
2. Règle de détection (API ShellExecuteExA) - Logique de règle haute fidélité
Règle de détection générique basée sur la télémétrie ci-dessous :
● Événements de création de fichiers par un WinRar.exe
● Événements de chargement d'image pour WinRar.exe chargeant une DLL Shell32.dll et commençant à utiliser une API (ShellExecuteExA|W) avec les paramètres.
● Cette fonction prend un argument nommé SHELLEXECUTEINFO, qui est une structure. Comme vous le voyez, cette structure a de nombreux champs, mais deux sont importants pour nous : lpVerb et lpFile.
● lpVerb - Il indique que si vous définissez LpVerb sur NULL, ShellExecuteExA|W utilise le verbe par défaut s'il est disponible, sinon il exécute le verbe « open ». Et le verbe « open » ouvre ou exécute le fichier.
● lpFile - lpFile est le chemin du fichier utilisé dans ShellExecuteExA pour exécuter le verbe, et maintenant vous pouvez remarquer le caractère espace (0x20) à la fin du chemin du fichier.
Note:
1- Shell32.dll : C'est là que ShellExecuteExA est définie. Elle contient la logique pour analyser la structure SHELLEXECUTEINFO et déterminer comment traiter la requête (par ex., ouvrir un document, exécuter un EXE, ou afficher une boîte de dialogue de propriétés)
2- Voici comment fonctionne la vulnérabilité : La vulnérabilité est ici. WinRAR a supprimé l'espace du nom de fichier lors de l'écriture mais a oublié d'appliquer cette modification à la liste d'extraction. Ainsi, le nom du fichier cible n'a pas changé et l'espace est toujours dans le nom du fichier. Aussi, je peux dire que ShellExecuteExA ouvre le fichier « CLASSIFIED_DOCUMENTS.pdf .cmd ». Le « .cmd » n'a pas d'importance pour ShellExecuteExA et il exécute simplement un fichier avec le nom « CLASSIFIED_DOCUMENTS.pdf » dans ce chemin.
Logique de détection (Logique de règle haute fidélité) :
● SQL-Based :\\Detection_Logic\\SQL-based-ShellExecute.txt
● KQL (ProcessCommandLine):\\Detection_Logic\\KQL-API-ProcessCommandLine.txt
● Pseudocode Detection Logic :\\Detection_Logic\\SQL-API-ShellExecute.txt
Note : Vous pouvez créer une logique de détection selon les normes ci-dessus. J'ajoute également un script Python simple pour obtenir des événements qui vous aideront dans la rédaction de votre règle de détection. Également ajouté ce qui est utile lors de la création d'une règle basée sur ETW.
| Fournisseur | ID d'événement | ID d'événement / Tâche |
| ------------------------------------- | ----------------------------------------- | --------------------------- |
| `Microsoft-Windows-Shell-Core` | {30336983-0362-4540-9E69-14844E6A3B7A} | Event ID 1 (Execute) |
| `Microsoft-Windows-Kernel-Process` | {22FB2AD3-E163-4078-8C2A-801648437D2D} | Image Load / Process Start |
3. Logique de règle haute fidélité pour l'exploitation de CVE-2023-38831 WinRAR
- Raison : Alerter lorsqu'un exécutable est créé ou chargé depuis un répertoire dont le nom se termine par une extension de document, et que l'exécution est initiée via les API Explorer/Shell.
- Logique de détection en pseudocode (Logique de règle haute fidélité) - \\Detection_Logic\\WinRAR-CVE-2023-38831-Exploitation.txt
4. Règle de détection EDR (basée sur ETW)
Règle de détection EDR générique basée sur la télémétrie ci-dessous :
● Événements de création de fichiers
● Exécution du Shell / invocation de l'Explorateur
● Événements de chargement d'image (optionnel mais fort)
Logique de détection : \\Detection_Logic\\EDR-Detection-ETW-based.txt
5. Requête KQL sans DeviceProcessEvents (si l'endpoint le supporte)
Raison : Cette version fonctionne sans dépendre de DeviceProcessEvents
Logique de détection : \\Detection_Logic\\KQL-Detection-without-DeviceProcessEvents.txt
6. Signal d'exécution du Shell (si activé et supporté)
Raison : Cela renforce la confiance lorsqu'il est corrélé avec la création de fichiers.
Logique de détection : \\Detection_Logic\\Shell-Execution-Signal.txt
7. Adapté au SOC (Flux de triage)
Raison : Cette règle a été créée pour chaque étape découverte lors d'une attaque.
Logique de détection : \\Detection_Logic\\SOC-Friendly.txt
(Alerte / Si inclus ProcessStart, CreateProcess, ou logique parent/enfant de type EDR)
1.Détecter lorsque winrar.exe crée un répertoire/fichier suspect, surtout depuis temp ou les chemins d'extraction d'archive et exécute un fichier suspect créé en utilisant une version vulnérable de WinRAR
Raison : Créez des règles en fonction des événements que votre produit gère, tels que l'accès, l'événement ou le cloud.
Logique de détection :\\Detection_Logic\\Gen-Pseudocode-Detection-Logic.txt
2.Détecter lorsque winrar.exe génère un processus enfant suspect, surtout depuis temp ou les chemins d'extraction d'archive
Logique de détection :
Endpoint : \\Detection_Logic\\winrar-spawns-suspicious-child-process.txt
Règle Sigma : \\Detection_Logic\\Sigma-Rule-WinRAR Exploit.txt
3. Alerte basée sur le fournisseur ETW (Création de processus)
| Fournisseur | ID d'événement |
| ------------------------------------- | --------------------------- |
| `Microsoft-Windows-Security-Auditing` | 4688 (Process Creation) |
Logique de détection
● Processus parent = winrar.exe
● Nouveau processus = moteur de script ou exécutable
● CommandLine inclut Temp/AppData
4. Requête KQL avec DeviceProcessEvents (si l'endpoint le supporte)
Raison : Si nous voulons développer en utilisant DeviceProcessEvents
Logique de détection : \\Detection_Logic\\KQL-Detection-with-DeviceProcessEvents.txt
5. Indicateur d'attaque (vous pouvez ajouter une alerte à haute confiance)
En respectant les conditions ci-dessous, vous pouvez ajouter une règle IOA ou de liste de surveillance pour l'alerte.
| Indicateur | Confiance |
| ---------------------------------- | ---------- |
| winrar.exe spawning cmd/powershell | Haute |
| Exécution depuis Temp/AppData | Haute |
| `.cmd/.bat /.exe ` execution | Haute |
| ZIP à double extension ouvert | Moyenne |
Créez une liste de surveillance pour deux fichiers avec le même nom dans un répertoire créé par une version vulnérable de WinRAR (< 6.23) :
Comme vous ne pouvez pas avoir deux fichiers avec le même nom dans un répertoire, ni un répertoire et un fichier avec le même nom.
Mais c'est possible dans les logiciels de compression comme WinRAR/7zip. Dans un fichier compressé, peu importe que vous ayez des fichiers avec le même nom, les fichiers sont écrits dans une structure spéciale.
Ainsi, vous pouvez avoir deux objets (Fichier/Répertoire) avec le même nom dans un fichier ZIP/RAR.
Déclencheurs probablement légitimes
● cmd.exe généré par les installateurs auto-extractibles de 7-Zip/WinRAR
● powershell.exe lancé par des outils de mise à jour de logiciels d'entreprise conditionnés dans RAR
● rundll32.exe utilisé par les installateurs de pilotes d'imprimante ou de GPU
Logique d'exclusion (exemple)
AND NOT (
ChildImage IN (cmd.exe, powershell.exe, rundll32.exe)
AND
CommandLine CONTAINS (
"setup.exe",
"install.cmd",
"driverinstall",
"vendorupdate"
)
)
Cela préserve la détection de l'exploit tout en supprimant les comportements d'installateur connus.
Télémétrie des fichiers d'archive (événements du système de fichiers) — Corréler cette règle avec l'activité d'extraction RAR/ZIP (par ex., création de fichiers .cmd/.bat/.exe immédiatement avant l'exécution, surtout depuis des répertoires d'extraction WinRAR comme Rar$EX*) augmenterait considérablement la confiance et réduirait les faux positifs en prouvant que l'exécution a directement suivi l'extraction de l'archive.
T1204.002 – Exécution utilisateur : Fichier malveillant
T1059 – Interpréteur de commandes et de scripts
T1036 – Masquage (double extension)
Ce code de détection est uniquement à des fins éducatives et de test autorisé.
Ne l'utilisez pas sur des systèmes que vous ne possédez pas ou pour lesquels vous n'avez pas d'autorisation explicite de tester.