CVE-2023-38831 - WinRAR
Este repositório contém uma lógica de detecção para o CVE-2023-38831 (spoofing de arquivo ZIP do WinRAR / exploit de dupla extensão) com consultas brutas / blocos de código e nomes de provedores específicos de ETW + IDs de Evento. Uma versão vulnerável do WinRAR (< 6.23) no sistema alvo
O CVE-2023-38831 é explorado quando:
O usuário abre um ZIP malicioso no WinRAR
O arquivo contém:
● Um arquivo isca (ex.: invoice.pdf )
● Um diretório com o mesmo nome (ex.: invoice.pdf )
● Dentro do diretório, dois arquivos com o mesmo nome, mas com nomes ligeiramente diferentes (para um arquivo, um espaço e que termina com qualquer extensão; por exemplo, se o 1º arquivo for "invoice.pdf ", o 2º pode ser qualquer script ou executável como "invoice.pdf .cmd")
O WinRAR executa o script ou executável em vez de abrir o documento (“PDF” neste caso)
Essa execução é acionada por meio da chamada da função ShellExecuteExW para executar o arquivo, passando shExecInfo (ShellExecute via Explorer)
O WinRAR gera um processo filho (cmd, powershell, mshta, wscript, exe, assim como qualquer outro presente na pasta)
A execução geralmente ocorre a partir de Temp / AppData / caminho extraído
Resumo do fluxo Usuário abre o arquivo
↓
O WinRAR exibe o arquivo isca
↓
O usuário dá duplo clique no documento
↓
O WinRAR extrai o diretório com o mesmo nome
↓
Executável gravado em *.pdf\*.pdf .exe
↓
ShellExecute via Explorer
↓
ImageLoad do executável
↓
Execução do payload
Por que esse fluxo é importante para a detecção
● Nenhum uso de macro
● Nenhuma dependência de criação de processo
● O exploit depende de mascaramento do sistema de arquivos
● Sinal de alta confiança e baixo ruído
Detalhes técnicos importantes
Os arquivos são gravados em uma estrutura especial
Por exemplo, existem dois objetos (Arquivo/Diretório) com o mesmo nome; quando você tem um arquivo e um diretório com o mesmo nome em um arquivo compactado e deseja abrir o arquivo temporariamente, dando duplo clique nele (arquivo alvo) no arquivo compactado aberto, o WinRAR extrai esse arquivo para você. Ele também extrai todos os arquivos que têm o mesmo nome que o arquivo alvo. Todos eles são gravados em um diretório temporário no caminho %tmp%.
| Nome do Arquivo/Diretório | Caminho de extração |
| ------------------------------------------------------ | --------------------------------------------------------------------------------- |
| CLASSIFIED_DOCUMENTS.txt <–arquivo alvo clicado | `C:\Users\UsersName\AppData\Loca\Temp\Rar$DIa8432.13968\CLASSIFIED_DOCUMENTS.txt\`|
| CLASSIFIED_DOCUMENTS.txt .cmd <– arquivo no diretório | `C:\Users\UsersName\AppData\Loca\Temp\Rar$DIa8432.13968\CLASSIFIED_DOCUMENTS.txt\`|
Se houver dois arquivos em um diretório temporário (descompactação) com o mesmo nome, mas tamanhos diferentes (por exemplo, 20k e 12k), e você abrir o arquivo compactado e abrir o primeiro arquivo, 1.txt, que tem 20k bytes, o WinRAR solicitará que você substitua um arquivo pelo segundo arquivo, 1.txt, que tem 10K. Se você clicar em "Sim", apenas o segundo arquivo, 1.txt, será aberto. Essa condição pode ser adicionada como exclusão.
Ponto importante para a lógica de detecção
Execução de processo acionada a partir de um caminho de extração de ZIP ou diretório temporário, com uma extensão enganosa ou pasta se passando por arquivo
Quando o WinRAR libera um arquivo para descompressão no diretório temporário, ele deve conter dois arquivos com o mesmo nome, mas com nomes ligeiramente diferentes (espaço e que termina com qualquer extensão), como o nome do arquivo principal com um “ ” (CLASSIFIED_DOCUMENTS.pdf ) no final do nome e depois um “.cmd” (CLASSIFIED_DOCUMENTS.pdf .cmd).
Quando o WinRAR carrega uma DLL e chama a função ShellExecuteExA, o parâmetro "pExecInfo" tem um caminho com um espaço e que termina com qualquer extensão, como "CLASSIFIED_DOCUMENTS.pdf .cmd."
Provedores ETW e filosofia de detecção (somente ETW) Provedores ETW
| Finalidade | Provedor ETW |
| -------------------------- | ------------------------------------- |
| Criação de processo | `Microsoft-Windows-Kernel-Process` |
| Visibilidade da linha de comando | `Microsoft-Windows-Security-Auditing` |
| Operações de arquivo (opcional) | `Microsoft-Windows-Kernel-File` |
A detecção dependerá de (caso não haja lógica do tipo ProcessStart, CreateProcess ou pai/filho no estilo EDR):
● ETW do sistema de arquivos
● ETW de Shell / Explorer
● ETW de carregamento de imagem (opcional, sem create)
● ETW de linha de comando (opcional)
Provedores ETW principais
| Finalidade | Provedor ETW |
| -------------------------- | ------------------------------------- |
| Criação de diretório | `Microsoft-Windows-Kernel-File` |
| Criação de EXE | `Microsoft-Windows-Kernel-File` |
| Execução de shell | `Microsoft.Windows.ShellExecute` |
| Carregamento de imagem | `Microsoft-Windows-Kernel-Image` |
| Explorer | `Microsoft-Windows-Explorer` |
| Shell | `Microsoft-Windows-Shell-Core` |
Lógica de detecção bruta
Em um nível alto, a lógica detecta:
● WinRAR.exe iniciando gravações de arquivo
● Criação de um diretório e um arquivo com o mesmo nome base
● Extensão executável se materializando após renomeação ou sobrescrita
● Sequência ocorrendo em uma janela de tempo curta (<2s)
Esse padrão é extremamente raro em fluxos de trabalho benignos, mas é essencial ao caminho de execução do exploit.
● A regra evita intencionalmente:
● Inspeção de linha de comando
● Rastreamento de processos filho
● Hash completo de arquivos
A lógica de detecção principal é apresentada abaixo, junto com um nível de confiança e uma breve justificativa.
1.Image Load (Confirmação de Execução)
Razão: isso confirma a execução real sem telemetria de criação de processo.
Lógica de Detecção:
Carregador do Windows:
● Mapeia Invoice.pdf .exe na memória
Sinal ETW:
● ImageLoad
● Caminho da imagem:
● *.pdf\*.pdf .exe
2. Regra de Detecção(API ShellExecuteExA) - Lógica de Regra de Alta Fidelidade
Regra de detecção genérica com base na telemetria abaixo:
● Eventos de criação de arquivo por um WinRar.exe
● Eventos de carregamento de imagem para WinRar.exe carregar uma DLL Shell32.dll e começar a usar uma API (ShellExecuteExA|W) com os parâmetros.
● Esta função recebe apenas um argumento chamado SHELLEXECUTEINFO, que é uma estrutura. Como você pode ver, essa estrutura tem muitos campos, mas dois deles são importantes para nós:
lpVerb e lpFile.
● lpVerb - Ele indica que, se você definir LpVerb como NULL, ShellExecuteExA|W usará o verbo padrão se disponível; caso contrário, executará o verbo “open”. E o verbo “open” abre ou executa o arquivo.
● lpFile - O lpFile é o caminho do arquivo usado no ShellExecuteExA para executar o verbo; e agora você pode prestar atenção ao caractere de espaço (0x20) no final do caminho do arquivo.
Nota:
1- Shell32.dll: é onde ShellExecuteExA está definida. Ela contém a lógica para analisar a estrutura SHELLEXECUTEINFO e determinar como lidar com a solicitação (por exemplo, abrir um documento, executar um EXE ou mostrar uma caixa de diálogo de propriedades).
2- A vulnerabilidade funciona da seguinte forma: a vulnerabilidade está aqui. O WinRAR removeu o espaço do nome do arquivo no momento da gravação, mas esqueceu de aplicar essa alteração à lista de extração. Portanto, o nome do arquivo alvo não mudou e o espaço ainda está no nome do arquivo.
Também posso dizer que o ShellExecuteExA abre o arquivo “CLASSIFIED_DOCUMENTS.pdf .cmd”. O “.cmd” não importa para o ShellExecuteExA; ele apenas executa um arquivo com o nome “CLASSIFIED_DOCUMENTS.pdf ” naquele caminho.
Lógica de Detecção (Lógica de Regra de Alta Fidelidade):
● Baseado em SQL :\\Detection_Logic\\SQL-based-ShellExecute.txt
● KQL (ProcessCommandLine):\\Detection_Logic\\KQL-API-ProcessCommandLine.txt
● Lógica de detecção em pseudocódigo :\\Detection_Logic\\SQL-API-ShellExecute.txt
Nota:- Você pode criar uma lógica de detecção de acordo com os padrões acima. Também estou adicionando um script Python simples para obter eventos que ajudarão na escrita da sua regra de detecção; algo também útil ao criar regras baseadas em ETW.
| Provedor | ID do Evento | ID do Evento / Tarefa |
| ------------------------------------- | ----------------------------------------- | --------------------------- |
| `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. Lógica de Regra de Alta Fidelidade para a Exploração do CVE-2023-38831 no WinRAR
- Razão: alerta quando um executável é criado ou carregado a partir de um diretório cujo nome termina com uma extensão de documento, e a execução é iniciada via APIs do Explorer/Shell.
- Lógica de detecção em pseudocódigo (Lógica de Regra de Alta Fidelidade)- \\Detection_Logic\\WinRAR-CVE-2023-38831-Exploitation.txt
4. Regra de Detecção EDR (baseada em ETW)
Regra de detecção EDR genérica com base na telemetria abaixo:
● Eventos de criação de arquivo
● Execução de shell / invocação do Explorer
● Eventos de carregamento de imagem (opcionais, mas fortes)
Lógica de Detecção: \\Detection_Logic\\EDR-Detection-ETW-based.txt
5. Consulta KQL sem DeviceProcessEvents (se o endpoint oferecer suporte)
Razão: esta versão funciona sem depender de DeviceProcessEvents.
Lógica de Detecção: \\Detection_Logic\\KQL-Detection-without-DeviceProcessEvents.txt
6. Sinal de Execução de Shell (se habilitado e houver suporte)
Razão: isso fortalece a confiança quando correlacionado com a criação de arquivos.
Lógica de Detecção: \\Detection_Logic\\Shell-Execution-Signal.txt
7. Amigável para SOC (Fluxo de Triagem)
Razão: esta regra foi criada para cada etapa descoberta durante um ataque.
Lógica de Detecção: \\Detection_Logic\\SOC-Friendly.txt
(Alerta / caso inclua lógica do tipo ProcessStart, CreateProcess ou pai/filho no estilo EDR)
1. Detectar quando winrar.exe criar um diretório/arquivo suspeito, especialmente a partir de caminhos de temp ou extração de arquivos, e executar um arquivo criado suspeito usando uma versão vulnerável do WinRAR
Razão: crie regras dependendo dos eventos que seu produto trata, como acesso, evento ou baseado em nuvem.
Lógica de Detecção: \\Detection_Logic\\Gen-Pseudocode-Detection-Logic.txt
2. Detectar quando winrar.exe gerar um processo filho suspeito, especialmente a partir de caminhos de temp ou extração de arquivos
Lógica de Detecção:
Endpoint: \\Detection_Logic\\winrar-spawns-suspicious-child-process.txt
Regra Sigma: \\Detection_Logic\\Sigma-Rule-WinRAR Exploit.txt
3. Alerta baseado no Provedor ETW (Criação de Processo)
| Provedor | ID do Evento |
| ------------------------------------- | --------------------------- |
| `Microsoft-Windows-Security-Auditing` | 4688 (Process Creation) |
Lógica de Detecção:
● Processo pai = winrar.exe
● Novo processo = mecanismo de script ou executável
● CommandLine inclui Temp/AppData
4. Consulta KQL com DeviceProcessEvents (se o endpoint oferecer suporte)
Razão: se quisermos desenvolver usando DeviceProcessEvents.
Lógica de Detecção: \\Detection_Logic\\KQL-Detection-with-DeviceProcessEvents.txt
5. Indicador de Ataque (você pode adicionar um alerta de alta confiança)
Ao atender às condições abaixo, você pode adicionar uma regra de IOA ou watch-list para alertas.
| Indicador | Confiança |
| ---------------------------------- | ---------- |
| winrar.exe gerando cmd/powershell | Alta |
| Execução a partir de Temp/AppData | Alta |
| execução de `.cmd/.bat /.exe ` | Alta |
| ZIP de dupla extensão aberto | Média |
Crie uma watchlist para dois arquivos com o mesmo nome em um diretório criado por uma versão vulnerável do WinRAR (< 6.23):
Como você não pode ter dois arquivos com o mesmo nome em um diretório, também não pode ter um diretório e um arquivo com o mesmo nome.
Mas isso é possível em softwares de compactação como WinRar/7zip. Em um arquivo compactado, não importa se você tem arquivos com o mesmo nome; os arquivos são gravados em uma estrutura especial.
Portanto, você pode ter dois objetos (Arquivo/Diretório) com o mesmo nome em um arquivo ZIP/RAR.
Possíveis acionadores legítimos
● cmd.exe gerado por instaladores autoextraíveis do 7-Zip/WinRAR
● powershell.exe iniciado por atualizadores de software empresarial empacotados em RAR
● rundll32.exe usado por instaladores de driver de impressora ou GPU
Lógica de exclusão (exemplo)
AND NOT (
ChildImage IN (cmd.exe, powershell.exe, rundll32.exe)
AND
CommandLine CONTAINS (
"setup.exe",
"install.cmd",
"driverinstall",
"vendorupdate"
)
)
Isso preserva a detecção do exploit enquanto suprime o comportamento conhecido de instaladores.
A telemetria de arquivos compactados (eventos do sistema de arquivos) — correlacionar esta regra com a atividade de extração de RAR/ZIP (por exemplo, criação de arquivos .cmd/.bat/.exe imediatamente antes da execução, especialmente em diretórios de extração do WinRAR como Rar$EX*) aumentaria significativamente a confiança e reduziria falsos positivos ao provar que a execução seguiu diretamente a extração do arquivo.
T1204.002 – Execução do usuário: arquivo malicioso
T1059 – Interpretador de comandos e scripts
T1036 – Mascaramento (dupla extensão)
Este código de detecção é apenas para fins educacionais e de testes autorizados.
Não o utilize em sistemas que você não possui ou para os quais não tenha permissão explícita para testar.