Keyhole – geração própria de licenças da Windows Store
(massgrave.dev)- Keyhole é uma falha de bypass de DRM que permitia contornar o fluxo de validação de licenças do CLiP e criar licenças para apps da Microsoft Store e edições recentes do Windows
- O CLiP usa uma cadeia de confiança em que valida a licença XML assinada em
clipsvc.dll, depois envia oSPLicenseBlockparaclipsp.sys, onde ela é verificada novamente no kernel - O
clipup.execontinha uma chave ECDSA para assinatura de licenças XML sem ofuscação, o que permitia ao ClipSvc aceitar licenças XML assinadas arbitrariamente - A vulnerabilidade real era que os dados após o bloco de assinatura do bloco de licença não eram validados, mas ainda podiam sobrescrever blocos anteriores do mesmo tipo; além disso, licenças Windows device-locked exigiam uma licença de app também device-locked
- A Cisco TALOS reportou a mesma falha à Microsoft em 8 de abril de 2024 e, após a correção, o parser encerra imediatamente ao encontrar o bloco de assinatura, sem processar os blocos seguintes
Natureza do Keyhole e contexto da divulgação
- Keyhole foi uma falha descoberta durante trabalhos de bypass da verificação de licenças do Windows, e permitia conceder licenças a apps da Microsoft Store ou a edições recentes do Windows
- Algumas falhas foram mantidas em sigilo para eventual preservação como métodos de ativação ou ferramentas de teste, mas com a divulgação do CVE-2024-38184 pela Cisco TALOS, os detalhes do Keyhole também foram tornados públicos
- Essa falha foi descoberta de forma independente por volta da mesma época em que foi reportada à Microsoft
Estrutura de processamento de licenças do CLiP
- O CLiP (Client Licensing Platform) é um sistema introduzido no Windows 10, usado principalmente para implementar o DRM de apps da Microsoft Store, além de se integrar à ativação do Windows
- Os principais componentes no Windows são os seguintes
clipup.exe: migra licenças da Store do Windows 8, tickets de originalidade e chaves de produto para licenças digitaisclipsvc.dll: serviço em modo usuário que gerencia licenças de appsclipc.dll: API usada por aplicações para interagir com o CLiPclipwinrt.dll: API para aplicações UWP que usam o Windows Runtimeclipsp.sys: driver em modo kernel que valida licenças
- Quando um app com licença CLiP é instalado, a licença XML assinada é enviada para
clipsvc.dlle, após a validação da assinatura XML, os dados são armazenados em%PROGRAMDATA%\Microsoft\Windows\ClipSVC\tokens.dat - Depois disso, o bloco de licença assinado na tag
SPLicenseBlocké extraído e enviado paraclipsp.sys, onde é validado e armazenado no repositório de licenças CLiPHKLM\SYSTEM\CurrentControlSet\Control\{7746D80F-97E0-4E26-9543-26B41FC22F79} - Esse repositório é protegido para não ficar visível por padrão, mas pode ser acessado com mudança de permissões
A chave de assinatura que permaneceu em clipup.exe
- O
clipup.exearmazenava sem ofuscação uma chave ECDSA válida que podia ser usada para assinar licenças XML - Essa chave era usada originalmente para enviar licenças temporárias à Microsoft Store e receber uma licença digital, mas o ClipSvc aceitava a mesma chave também para licenças de apps
- Como resultado, era possível assinar ou reassinar qualquer licença XML, contornando a checagem em modo usuário do ClipSvc e enviando diretamente o bloco de licença desejado para
clipsp.sys - Nesse ponto, a cadeia de confiança em nível de modo usuário era neutralizada, e a questão restante era se seria possível enganar o ClipSp
Análise do ClipSp e remoção da ofuscação Warbird
- Grande parte do código do ClipSp estava escondida com Warbird, a ferramenta proprietária de ofuscação da Microsoft
- O ClipSp envolve chamadas a código ofuscado com funções de descriptografia e criptografia, de forma semelhante ao funcionamento do Warbird em programas de modo usuário
- Os símbolos de
clipsp.syspresentes nos servidores da Microsoft ajudaram na análise e, com base no método de KiFilterFiberContext, foi possível executar manualmente a função de descriptografia para inspecionar o código oculto - O funcionamento do Warbird em modo usuário pode ser consultado em warbird-docs
Formato dos blocos de licença e a falha Keyhole
- No CLiP, informações importantes de licença ficam em blocos de licença, cujo formato está documentado no CikExtractor
- Os blocos de licença usam o formato TLV (tag-length-value)
- Cada sub-bloco possui tipo de dado, comprimento do dado e o dado em si
- Por exemplo, o tipo
0xC9representa License Information, e o comprimento0xAindica 10 bytes de dados
- No fim do bloco de licença sempre há um bloco de assinatura do tipo
0xCC, que contém a assinatura de todos os dados anteriores e informações sobre a chave usada na assinatura - Testes mostraram que os dados anexados após o bloco de assinatura não eram validados e, se houvesse vários blocos do mesmo tipo, o último sobrescrevia os anteriores
- Assim, ao anexar novos dados de licença após o bloco de assinatura, era possível alterar as informações originais da licença; esse método recebeu o nome de Keyhole
Alcance possível e limitações
- Esse método permitia gerar, a partir de outra licença da Microsoft Store, licenças para itens vendidos na Microsoft Store
- Como até apps gratuitos possuem muitas licenças, era possível gerar várias licenças para o item desejado
- Porém, licenças device-locked não podiam ser criadas a partir de licenças device-unlocked
- Como as licenças digitais do Windows são device-locked, para criar uma licença do Windows era necessária uma licença de app device-locked, como a do Roblox
- Isso permitia realizar ações antes impossíveis, como ativar o Enterprise LTSC com licença digital ou ativar um servidor KMS legítimo com uma generic key
Fluxo de reprodução divulgado e forma de correção
- O fluxo para criar uma licença do Windows envolvia instalar um app device-locked, interceptar a licença recebida de
https://licensing.mp.microsoft.com/v7.0/licenses/content, decodificar a licença e extrair os blocos, adicionar novos dados, empacotar e assinar em XML, copiar paraC:\ProgramData\Microsoft\Windows\ClipSVC\Install\Migratione então reiniciar o ClipSvc ou executarclipup -p - O relatório TALOS-2024-1964 da Cisco TALOS reportou a mesma falha à Microsoft em 8 de abril de 2024
- Embora essa falha possa parecer apenas um problema de DRM, o Keyhole podia servir como ponto de entrada para uma falha mais grave no ClipSp, por isso foi incluído no escopo de divulgação da TALOS
- O parser corrigido de blocos de licença encerra imediatamente ao encontrar o bloco de assinatura, sem processar blocos posteriores, bloqueando assim o Keyhole
Materiais publicados e relação com o Xbox One
- Após a divulgação do Keyhole, foram publicados o código de geração de licenças do Keyhole e uma coleção de binários do CLiP com símbolos para auxiliar na análise
- Foi identificado que uma parte considerável do código do ClipSp foi copiada do sistema de DRM do Xbox One
- O Xbox One possui um chip SP baseado no TPM de PCs modernos, ou seja, um secure processor, cuja função principal é impor assinatura de código e validar licenças
- O formato de licenças XML do CLiP e a maior parte dos blocos de licença baseados em TLV vieram do sistema de DRM do Xbox One
- O Xbox SP também tem uma falha de parsing semelhante à do ClipSp, mas como ele analisa separadamente os blocos de dados e os blocos relacionados à assinatura, o Keyhole não funciona no Xbox
1 comentários
Opiniões no Hacker News
Então isso quer dizer que agora, se descobrirem os detalhes, dá para baixar jogos de Xbox diretamente de graça pela Microsoft Store?
Ou seja, o Xbox está, por enquanto, tão completamente hackeado quanto o PS Vita?
Só que, infelizmente, isso não vale para quem deixou as atualizações automáticas ativadas no Xbox. O software de sistema mais recente parece incluir uma versão do kernel superior à suportada pelo exploit collateral-damage.
Seria bom também conseguir uma licença para instalar o app Lego Boost for Windows 10, que ficou na Windows Store até 2020.
Pelo que entendi, se você tiver a licença ainda dá para baixar, mas ele não é mais oferecido a novos usuários.
Se li corretamente, a Microsoft poderia reduzir o escopo da chave de assinatura de licenças temporárias, então é provável que a janela para gerar licenças permanentes não seja longa.
Com isso dá para ativar a extensão HEVC sem conta Microsoft? É muito frustrante não conseguirem resolver as patentes por meio de uma licença em massa.
0: https://massgrave.dev/unsupported_products_activation#hevc-v...
ms-windows-store://pdp?productId=9N4WGH0Z6VHQ
ms-windows-store://pdp?productId=9PMMSR1CGPWG
ms-windows-store://pdp?productid=9MVZQVXJBQ9V
ms-windows-store://pdp?productid=9N4D0MSMP0PT
ms-windows-store://pdp?productid=9N95Q1ZZPMH4
Coisas desse tipo foram, por décadas, o canal de distribuição e comunicação do Windows mais eficaz.
Ironicamente, acho que vou acabar usando isso a sério para jogar em hardware original um jogo Guitar Hero do qual tenho o disco físico. O jogo está instalado, mas, se o disco não estiver preso no drive de DVD quebrado, fico sem a “licença” para jogar.
A ironia ainda maior é que, mesmo que isso funcione, talvez eu não consiga ler meus saves porque a chave pública do console está na lista de revogação. Dá para contornar reassinando o arquivo CON com o valor padrão 0.
Talvez venha uma terceira ironia em breve. Tudo isso parece muito familiar. Extremamente bem feito.
Este bug é, essencialmente, mais uma plataforma retroativa de pivô para o dia em que entrada não higienizada e escape de contexto se combinarem por acaso.
Por fora parece uma simples troca de adesivos digitais, mas, como a Microsoft alavancou demais o próprio sucesso e se recusou a fazer mudanças incompatíveis por causa da compatibilidade retroativa e da própria dívida técnica, alguns erros, mesmo pequenos, acabam tendo impacto grande e permanente.
Se o antivírus estiver bloqueando a página, dá para ver aqui: https://archive.is/90XGW
O Clip não existia desde antes do Xbox One?
Depois de ler o texto, especialmente a parte em que esse motor foi copiado e colado do motor de DRM do Xbox, alguém ainda acredita que o Pluton, que também foi copiado do Xbox, existe para a segurança do usuário final? No fim, não é para a Microsoft ter DRM aplicável no PC?
A propósito, o Pluton já entrou nos chips mais recentes de notebooks da Intel e está nos da AMD há algum tempo. Quanto tempo até o Windows passar a exigir isso?
Como administrador Microsoft, o pessoal da empresa gosta de configurações de bloqueio máximo como Win11 e Intune. Para mim, a essência do Windows não é isso, mas sim ótimas ferramentas de administração e compatibilidade retroativa.
O Pluton vai virar mais um TPM. Eles introduzem, esperam 5 anos e depois tornam obrigatório. A Microsoft tem tempo.
Mesmo assim, ainda dá para instalar Linux em PCs vendidos com Windows, instalar no Windows software de terceiros obtido fora da Store e assistir a filmes piratas baixados por torrent.
Se você não se importar em não poder mudar a imagem da área de trabalho, também dá para rodar Windows sem registrar nem pagar.
A Microsoft pode se beneficiar potencialmente? Claro. Mas isso não nega uma motivação real de segurança do usuário nem os benefícios que chegam ao usuário final.
“Os dados depois do bloco de assinatura não são verificados de forma alguma, e podem até sobrescrever dados anteriores. Quando blocos do mesmo tipo são armazenados juntos, o último bloco sobrescreve todos os anteriores. Portanto, se você quiser alterar os dados da licença, basta criar esse bloco e colocá-lo depois do bloco de assinatura.”
Realmente impressionante.