
CVE-2021-40444 - Fully Weaponized Microsoft Office Word RCE Exploit
Gerador de docx malicioso para explorar o CVE-2021-40444 (Execução Remota de Código no Microsoft Office Word), funciona com arquivos DLL arbitrários.
Agora o gerador é capaz de gerar o documento necessário para explorar também o ataque "Follina" (aproveitando o ms-msdt).
Embora muitos PoCs já estejam disponíveis na internet, resolvi dar uma chance a mim mesmo de armamentar esta vulnerabilidade, pois o que encontrei disponível carecia de informações valiosas que valessem a pena compartilhar, considerando também que a Microsoft já lançou uma correção para esta vulnerabilidade.
Até agora, os únicos recursos valiosos que vi para criar um gerador totalmente funcional são:
Os recursos acima descrevem muitos dos requisitos necessários para criar uma cadeia completa. Para evitar repetir muitas informações desnecessárias, vou apenas resumir os detalhes relevantes.
Existem vários requisitos ignorados para que esta exploração funcione, o que fez com que até bons PoCs, como o do lockedbyte, falhassem em funcionar corretamente.
Talvez ninguém tenha "liberado" explicitamente para evitar que a vulnerabilidade fosse mais explorada. Mas agora está corrigida, então não deve causar muitos problemas divulgar os detalhes.
Conforme este tweet de Will Dormann, o HTML deve ter pelo menos 4096 bytes de tamanho para acionar a "Pré-visualização" no MS Word.
O arquivo CAB precisa ser corrigido por bytes para evitar erros de extração e para alcançar o ZipSlip:
filename.inf deve se tornar ../filename.inffilename.inf coffCabStartCFFOLDER.typeCompress CFFOLDER.coffCabStart deve ser aumentado em 3 (devido ao '../' adicionado)CFFOLDER.cCfData CFFILE.cbFile deve ser maior que todo o CFHEADER.cbCabinetCFDATA.csum A razão para essas restrições são muitas, e não passei tempo suficiente para entender profundamente todas, mas vamos ver as mais importantes:
NOTA1: O Defender agora detecta se o arquivo CAB contém um PE usando o valor _IMAGE_DOS_HEADER.e_magic como uma
assinatura, potencialmente impedindo que arquivos PE sejam embutidos no CAB. Essa assinatura pode ser contornada?
Não tenho certeza, mas, como observado antes, esta é uma vulnerabilidade corrigida, então não pretendo investir muito mais tempo
nisso. Cabe ao leitor curioso desenvolver isso mais adiante.
NOTA2: O Patch da Microsoft bloqueia esquemas de URI arbitrários, aparentemente usando uma abordagem de lista negra (isso é apenas uma suposição)
A principal cadeia de ataque associada ao CVE-2021-40444 é o ataque DLL carregado via esquema de URI .cpl. Para
explorar isso, um atacante precisa gerar uma DLL especialmente criada. Se quiser testar, experimente meu script evildll-gen.
Como observado por Max Maluin, é possível interagir com vários tipos de arquivo abusando do IE e da extensão de arquivo associada ao URI. Embora isso possa ser uma boa maneira de explorar o IE, tem limitações.
De fato, deve-se notar que o método usado na exploração para baixar arquivos é baseado em atualizações de controle ActiveX,
e não pode ser usado para baixar arquivos arbitrários.
Conforme documentação da Microsoft, a tag codebase
pode apontar apenas para alguns tipos de arquivo: OCX, INF e CAB.
Mesmo que possamos baixar diretamente um arquivo OCX ou INF, ainda não podemos ter certeza de baixar o arquivo no local certo
dentro do sistema. Com a exploração do cab, é possível mover o arquivo .inf para um caminho conhecido usando o path traversal,
mas em qualquer outro caso o arquivo será armazenado em um diretório aleatório, tornando virtualmente impossível referenciá-lo.
Até hoje, não encontrei uma maneira de encadear download e execução SEM um arquivo CAB.
Nota: Falando apenas do IE, o HTML smuggling pode ser um cenário possível para explorar a vulnerabilidade.
Esta técnica foi divulgada pela primeira vez por Eduardo Braun no Twitter e explicada mais detalhadamente neste artigo.
Observe que usando esta técnica, a cadeia de ataque é um pouco diferente. Este ataque exige que o usuário baixe um arquivo RAR especialmente criado, obtido encadeando um script WSF válido e um arquivo RAR válido. Uma vez aberto, o RAR conterá um DOCX com uma referência a um HTML, que por sua vez tentará carregar o arquivo RAR como um script WSF.
Para resumir:
O utilitário gerador pode atualmente reproduzir os seguintes ataques:
1O CAB não é baixado corretamente em alguns ambientes
2O usuário precisa clicar em "Salvar" para baixar o arquivo no IE
3Não funciona realmente em todas as versões do Windows/MS Word
O utilitário cab_parser.py pode ser usado para ver os cabeçalhos do arquivo de exploração, mas não o considere um analisador
completo. É um visualizador de cabeçalho CAB muito rápido e rústico que desenvolvi para entender o que estava acontecendo.
O gerador foi projetado para funcionar no Windows, pois usa o utilitário makecab. Antes de usar, certifique-se de instalar as dependências necessárias:
git clone https://github.com/klezVirus/CVE-2021-40444
cd CVE-2021-40444
pip install virtualenv
python -m virtualenv venv
venv\Scripts\activate.bat
pip install -r requirements
git clone https://github.com/klezVirus/CVE-2021-40444
cd CVE-2021-40444
pip install -r requirements
O gerador é trivial de usar, e embora tenha sido testado com vários payloads e versões do Windows, não é à prova de falhas. Estou encontrando comportamentos diferentes em diferentes compilações do Windows. Assim que tiver mais detalhes para compartilhar, postarei aqui.
usage: generator.py [-h] -P PAYLOAD -u URL [-o OUTPUT] [--host] [-c COPY_TO] [-nc] [-t]
[%] CVE-2021-40444 - Exploração RCE do MS Office Word [%]
argumentos opcionais:
-h, --help mostra esta mensagem de ajuda e sai
-P PAYLOAD, --payload PAYLOAD
Payload DLL a ser usado para a exploração
-u URL, --url URL URL do servidor para referências maliciosas (CAB->INF)
-o OUTPUT, --output OUTPUT
Nome base dos arquivos de saída (sem extensão)
--host Se definido, hospedará o payload após a criação
-c COPY_TO, --copy-to COPY_TO
Copiar payload para um caminho alternativo
-nc, --no-cab Usar a versão sem CAB da exploração
-t, --test Abrir o IExplorer para testar o arquivo HTML final
python generator.py -u http://127.0.0.1 -P test\calc.dll --host
Nota: a porta é selecionada pela URL, e a exploração é gerada com base na extensão do arquivo payload
python generator.py -u http://127.0.0.1 -P test\job-jscript.wsf --no-cab --host -t
python generator.py -u http://127.0.0.1 -P test\calc.js --no-cab --host -t
python generator.py -u http://127.0.0.1 -P test\calc.ps1 --no-cab --host --convert
| Ataque | Modelos HTML | Alvo | Método de Entrega | Método de Execução | Funciona |
|---|
| Versão original do ataque | cab-orig-* | WORD | DOCX | CAB + DLL | SIM |
| Ataque apenas IE do j00sean | cab-orig-j00san | IE | HTML | CAB + DLL | SIM |
| Minha versão sem DLL | cab-uri-* | WORD | DOCX | CAB + JS/VBS | NÃO1 |
| Ataque "CABless" de Eduardo B. usando RAR | cabless-rar-* | WORD | RAR | WSF | SIM |
| Ataque modificado do j00sean + HTML smuggling | cabless-smuggling-* | IE | HTML | JS/VBS | SIM2 |
| Ataque Follina | cabless-msdt-* | WORD | DOCX/RTF | MSDT + PS | SIM3 |