
Write-Up Técnico e Exploit PoC para CVE-2020-11519 e CVE-2020-11520
Data: Junho de 2020
Autor: Dennis Elser (código: github)
De acordo com sua representação na web, o Winmagic SecureDoc "permite que as empresas lidem com a segurança do seu ambiente de TI de forma eficiente, aproveitando recursos incluindo: Criptografia Completa de Disco (FDE), Autenticação Multifator, Criptografia de Contêiner de Mídia Removível (RMCE) e Criptografia de Arquivos e Pastas (FFE). Esses recursos ajudam as empresas a aumentar a segurança, mitigar riscos de negócios e atender aos requisitos governamentais e regulatórios para criptografia de disco rígido."
O produto Winmagic SecureDoc, disponível nas edições standalone e enterprise, é afetado por duas vulnerabilidades de escalonamento de privilégios local (CVE-2020-11519 e CVE-2020-11520) nas versões 8.3 e 8.5. Após as vulnerabilidades terem sido reportadas à Winmagic no final de março, o fornecedor lançou um patch (versão 8.5SR2) em meados de junho de 2020. No entanto, verificou-se que este patch abordava as vulnerabilidades de forma insuficiente, o que também tornou a versão 8.5SR2 vulnerável às falhas relatadas. Embora os detalhes técnicos sobre as vulnerabilidades tenham sido retidos por esse motivo, as falhas tiveram que ser consideradas públicas desde então. De acordo com o fornecedor, outro patch ainda está em desenvolvimento, aproximadamente 106 dias após o relatório inicial de vulnerabilidade à Winmagic. Em 15 de julho, 111 dias após o relatório inicial de vulnerabilidade ao fornecedor, a Winmagic lançou o SecureDoc v8.5 SR2 HF1 para os clientes, que supostamente corrige o CVE-2020-11519 e o CVE-2020-11520. Versões do SecureDoc anteriores à 8.3 não foram testadas, mas podem ser consideradas afetadas também, com base no código do componente afetado.
A exploração bem-sucedida de qualquer uma das vulnerabilidades levará ao escalonamento de privilégios para SYSTEM para atacantes autenticados localmente.
Ambas as vulnerabilidades afetam o componente "SDDisk2k.sys", um driver de kernel que acompanha o produto Winmagic SecureDoc. As falhas de segurança foram identificadas usando análise estática manual com a ajuda do Hex-Rays IDA Pro disassembler e decompiler. Em retrospectiva, as fraquezas poderiam ter sido descobertas com significativamente menos esforço se abordagens de teste dinâmico, como fuzzing, tivessem sido aplicadas. Isso porque o driver pode ser interfaceado a partir de aplicações limitadas em modo de usuário e porque ele assume que sua entrada está bem formada por padrão.
Devido à criação insegura de um objeto de dispositivo "SecureDocDevice" pelo driver "SDDisk2k.sys" e à falta de código que configurasse um descritor de segurança apropriado, até mesmo contas de usuário limitadas têm a capacidade de adquirir um identificador para o dispositivo usando a função de API CreateFile(). Ao conceder a uma aplicação em modo de usuário um identificador para seu objeto de dispositivo, o driver abre aqui um caminho direto para sua superfície de ataque no espaço do kernel.``` c RtlInitUnicodeString(&DestinationString, L"\Device\SecureDocDevice"); RtlInitUnicodeString(&SymbolicLinkName, L"\DosDevices\SecureDocDevice"); if ( IoCreateDevice(v1, 0xDD8u, &DestinationString, 0x8D1Fu, 0, 0, &DeviceObject) >= 0 ) // <--- unsafe { memset(DeviceObject->DeviceExtension, 0, 0xDD8ui64); DeviceObject->Flags |= 4u; DeviceObject->AlignmentRequirement = 0; if ( IoCreateSymbolicLink(&SymbolicLinkName, &DestinationString) < 0 ) IoDeleteDevice(DeviceObject); IoObject = DeviceObject; }
Ao reverter a engenharia de vários manipuladores de serviço [IOCTL](https://docs.microsoft.com/en-us/windows-hardware/drivers/kernel/introduction-to-i-o-control-codes) do driver "SDDisk2k.sys", descobriu-se que um deles expõe funcionalidades críticas ao modo de usuário, permitindo operações de leitura e gravação em setores brutos de disco de uma unidade arbitrária — por design. Além disso, ao interagir com esse mesmo código, notou-se que o driver ignora quaisquer bloqueios exclusivos que possam ter sido definidos anteriormente em uma unidade. Como consequência, operações concorrentes de leitura/gravação são possíveis, o que facilita condições de corrida e riscos de perda de dados.