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.