1 pontos por GN⁺ 2024-09-08 | 1 comentários | Compartilhar no WhatsApp
  • 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 o SPLicenseBlock para clipsp.sys, onde ela é verificada novamente no kernel
  • O clipup.exe continha 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 digitais
    • clipsvc.dll: serviço em modo usuário que gerencia licenças de apps
    • clipc.dll: API usada por aplicações para interagir com o CLiP
    • clipwinrt.dll: API para aplicações UWP que usam o Windows Runtime
    • clipsp.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.dll e, 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 para clipsp.sys, onde é validado e armazenado no repositório de licenças CLiP HKLM\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.exe armazenava 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.sys presentes 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 0xC9 representa License Information, e o comprimento 0xA indica 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 para C:\ProgramData\Microsoft\Windows\ClipSVC\Install\Migration e então reiniciar o ClipSvc ou executar clipup -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

 
GN⁺ 2024-09-08
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?

    • Sim. Parece a parte mais negligenciada do texto, mas talvez também seja a mais interessante.
      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.
    • Totalmente fora do assunto, mas achei muito interessante terem usado o símbolo de iene/yuan como marcador de nota de rodapé. Fico pensando se há alguma história que deixei passar, ou se foi só uma escolha aleatória.
  • 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.

    • Este exploit não é necessário. Você pode usar um player de mídia que não precise do pacote de codecs da MS, mas, se isso não for uma opção:
      1. Acesse https://store.rg-adguard.net
      2. Cole https://apps.microsoft.com/detail/9n4wgh0z6vhq
      3. Altere o ring para "Retail"
      4. Baixe o arquivo com a extensão "appxbundle"
      5. Instale. Talvez seja preciso ativar o modo de desenvolvedor nessa etapa, mas não me lembro exatamente.
    • Links para download do instalador HEVC oficial assinado pela Microsoft também podem ser encontrados em massgrave.dev[0]. É um recurso realmente excelente.
      0: https://massgrave.dev/unsupported_products_activation#hevc-v...
    • Não precisa pagar. Basta ter os links diretos.
      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
    • Por que você precisaria disso? O codec HEVC vem junto no pacote de drivers do fabricante da GPU.
  • Coisas desse tipo foram, por décadas, o canal de distribuição e comunicação do Windows mais eficaz.

    • Isso não se aplica à maioria dos outros softwares.
  • 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.

    • Em um ecossistema como XML > TLV > strings terminadas em nulo / UTF-16 para entrada do usuário, em qualquer lugar em que apareça um erro off-by-one ou entrada maliciosa de usuário sem validação, um castelo de cartas de dívida técnica pode desmoronar em um campo minado de escalonamento de privilégios, execução remota de código e movimentação lateral. Mas não é algo trivial.
      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

    • Quais antivírus fazem isso?
  • 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?

    • Nunca acreditei nisso. O pior é explicar isso para quem bebe o Kool-Aid da Microsoft.
      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.
    • As pessoas vêm dizendo isso há mais de 10 anos, desde que o TPM foi introduzido.
      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.
    • Talvez seja ingenuidade, mas ainda acredito. Ceticismo é necessário, mas descartar completamente só com base em especulação também é uma forma de raciocínio falho.
      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.

    • Fico pensando se este é o pior erro criptográfico desde o Nintendo Wii usar strncmp na verificação de hash e parar no primeiro byte 00 correspondente.