1 puntos por GN⁺ 2024-09-08 | 1 comentarios | Compartir por WhatsApp
  • Keyhole es un bug de evasión de DRM que permitía eludir el flujo de validación de licencias de CLiP para crear licencias para apps de Microsoft Store y ediciones recientes de Windows
  • CLiP usa una cadena de confianza en la que valida licencias XML firmadas en clipsvc.dll y luego pasa SPLicenseBlock a clipsp.sys para una nueva comprobación en el kernel
  • clipup.exe contenía, sin ofuscación, una clave ECDSA para firmar licencias XML, lo que permitía que ClipSvc aceptara licencias XML firmadas arbitrariamente
  • La vulnerabilidad real era que los datos posteriores al bloque de firma dentro del bloque de licencia no se validaban, pero aun así podían sobrescribir bloques anteriores del mismo tipo; para licencias de Windows vinculadas al dispositivo hacía falta una licencia de app vinculada al dispositivo
  • Cisco TALOS reportó el mismo bug a Microsoft el 8 de abril de 2024 y, tras la corrección, el parser termina de inmediato al encontrar un bloque de firma, por lo que no procesa los bloques posteriores

Naturaleza de Keyhole y contexto de su publicación

  • Keyhole es un bug descubierto durante trabajos para eludir la verificación de licencias de Windows; era un método de evasión de DRM que permitía otorgar licencias a apps de Microsoft Store o a ediciones recientes de Windows
  • Algunos bugs se mantuvieron en privado para conservarlos como posibles métodos de activación o herramientas de prueba futuras, pero cuando CVE-2024-38184 se hizo público a través de Cisco TALOS, también se publicaron los detalles de Keyhole
  • Este bug fue descubierto de forma independiente en una época similar a la de su reporte a Microsoft

Estructura de procesamiento de licencias en CLiP

  • CLiP (Client Licensing Platform) es un sistema introducido en Windows 10 que implementa principalmente el DRM de apps de Microsoft Store y también está integrado con la activación de Windows
  • Sus componentes principales dentro de Windows son los siguientes
    • clipup.exe: migra licencias de Windows 8 Store, tickets genuinos y claves de producto a licencias digitales
    • clipsvc.dll: servicio en modo usuario que administra licencias de apps
    • clipc.dll: API para que las aplicaciones interactúen con CLiP
    • clipwinrt.dll: API para aplicaciones UWP que usan Windows Runtime
    • clipsp.sys: driver en modo kernel que valida licencias
  • Cuando se instala una app con licencia CLiP, la licencia XML firmada se entrega a clipsvc.dll; tras validar la firma XML, los datos se guardan en %PROGRAMDATA%\Microsoft\Windows\ClipSVC\tokens.dat
  • Luego, del tag SPLicenseBlock se extrae el bloque de licencia firmado y se lo pasa a clipsp.sys; después de la validación, se guarda en el almacén de licencias de CLiP HKLM\SYSTEM\CurrentControlSet\Control\{7746D80F-97E0-4E26-9543-26B41FC22F79}
  • Este almacén está protegido para no ser visible de forma predeterminada, pero puede accederse a él si se cambian los permisos

La clave de firma que permanecía en clipup.exe

  • clipup.exe tenía almacenada sin ofuscación una clave ECDSA válida que podía usarse para firmar licencias XML
  • Esta clave se usa originalmente para enviar licencias temporales a Microsoft Store y recibir licencias digitales, pero ClipSvc también aceptaba la misma clave para licencias de apps
  • Como resultado, era posible firmar o volver a firmar licencias XML arbitrarias y eludir las comprobaciones en modo usuario de ClipSvc para pasar el bloque de licencia deseado directamente a clipsp.sys
  • En esta etapa, la cadena de confianza a nivel de modo usuario quedaba neutralizada, y la cuestión restante era si se podía engañar a ClipSp

Análisis de ClipSp y desofuscación de Warbird

  • Gran parte del código de ClipSp estaba oculto con Warbird, una herramienta de ofuscación propietaria de Microsoft
  • ClipSp envolvía las llamadas a código ofuscado con funciones de descifrado y cifrado, de forma similar a cómo Warbird funciona en programas de modo usuario
  • Los símbolos de clipsp.sys que estaban en servidores de Microsoft ayudaron al análisis y, con base en el método de KiFilterFiberContext, fue posible ejecutar manualmente la función de descifrado para revisar el código oculto
  • El funcionamiento de Warbird en modo usuario puede consultarse en warbird-docs

Formato del bloque de licencia y bug Keyhole

  • En CLiP, la información importante de licencia está dentro del bloque de licencia, cuyo formato está documentado en CikExtractor
  • El bloque de licencia usa el formato TLV (tag-length-value)
    • Cada subbloque contiene el tipo de datos, la longitud de los datos y los datos reales
    • Por ejemplo, el tipo 0xC9 significa License Information, y la longitud 0xA indica 10 bytes de datos
  • Al final del bloque de licencia siempre hay un bloque de firma de tipo 0xCC, que contiene la firma de todos los datos previos y la información de la clave usada para firmar
  • Los experimentos mostraron que los datos agregados después del bloque de firma no se validaban y que, si había varios bloques del mismo tipo, el último bloque sobrescribía a los anteriores
  • Por lo tanto, al añadir nuevos datos de licencia después del bloque de firma era posible cambiar la información de licencia existente; este método fue denominado Keyhole

Alcance posible y limitaciones

  • Este método permitía crear licencias para elementos vendidos en Microsoft Store a partir de otra licencia de Microsoft Store
  • Como también hay muchas licencias para apps gratuitas, era posible crear muchas licencias para el elemento deseado
  • Sin embargo, las licencias device-locked no podían crearse a partir de licencias device-unlocked
  • Como las licencias digitales de Windows son device-locked, para crear una licencia de Windows hacía falta una licencia de app device-locked, como la de Roblox
  • Con esto también se hicieron posibles tareas que antes no lo eran, como activar Enterprise LTSC con una licencia digital o activar un servidor KMS normal con una generic key

Flujo de reproducción publicado y método de corrección

  • El flujo para crear una licencia de Windows consistía en instalar una app device-locked, interceptar la licencia proveniente de https://licensing.mp.microsoft.com/v7.0/licenses/content, decodificar la licencia y extraer el bloque, agregar nuevos datos, empaquetar y firmar el XML, copiarlo a C:\ProgramData\Microsoft\Windows\ClipSVC\Install\Migration, y luego reiniciar ClipSvc o ejecutar clipup -p
  • TALOS-2024-1964 de Cisco TALOS reportó el mismo bug a Microsoft el 8 de abril de 2024
  • Este bug puede parecer un simple problema de DRM, pero como Keyhole podía convertirse en un punto de entrada hacia un bug más grave de ClipSp, quedó incluido dentro del alcance de la publicación de TALOS
  • El parser de bloques de licencia corregido termina de inmediato al encontrar un bloque de firma, por lo que no procesa los bloques posteriores a la firma; este cambio bloqueó Keyhole

Materiales publicados y relación con Xbox One

  • Tras la publicación de Keyhole, se liberaron el código de generación de licencias de Keyhole y una colección de binarios de CLiP con símbolos para ayudar al análisis
  • Se determinó que una parte considerable del código de ClipSp fue copiada del sistema DRM de Xbox One
  • Xbox One tiene un chip SP, es decir, secure processor, basado en el TPM de las PCs modernas, y sus funciones principales son hacer cumplir la firma de código y validar licencias
  • El formato de licencias XML de CLiP y la mayoría de los bloques de licencia basados en TLV provienen del sistema DRM de Xbox One
  • Xbox SP también tiene bugs de parsing similares a los de ClipSp, pero como parsea por separado los bloques de datos y los bloques relacionados con firmas, Keyhole no funciona en Xbox

1 comentarios

 
GN⁺ 2024-09-08
Opiniones de Hacker News
  • Entonces, ¿eso significa que ahora, si averiguamos los detalles, se pueden descargar juegos de Xbox gratis directamente desde Microsoft Store?
    O sea, ¿Xbox está por ahora tan completamente hackeada como la PS Vita?

    • Sí. Parece la parte más pasada por alto del artículo, pero quizá también la más interesante.
      Aunque, lamentablemente, no aplica para quienes tienen activadas las actualizaciones automáticas en Xbox. Parece que el software de sistema más reciente incluye una versión del kernel más alta que la compatible con el exploit collateral-damage.
    • Totalmente aparte, me pareció muy interesante que usaran el símbolo de yen/yuan para las notas al pie. Me pregunto si hay alguna historia que me estoy perdiendo, o si simplemente lo eligieron al azar.
  • Ojalá también se pudiera obtener una licencia para instalar la app Lego Boost for Windows 10, que estuvo en Windows Store hasta 2020.
    Según entiendo, si tienes una licencia todavía se puede descargar, pero ya no se ofrece a usuarios nuevos.

  • Si lo leí bien, Microsoft podría reducir el alcance de la clave de firma de licencias temporales, así que probablemente no haya mucho tiempo para generar licencias permanentes.

  • ¿Con esto se puede activar la extensión HEVC sin una cuenta de Microsoft? Es muy frustrante que no puedan manejar las patentes con una licencia global.

    • No necesitas este exploit. Puedes usar un reproductor multimedia que no requiera el paquete de códecs de MS, pero si eso no es una opción:
      1. Ve a https://store.rg-adguard.net
      2. Pega https://apps.microsoft.com/detail/9n4wgh0z6vhq
      3. Cambia el ring a "Retail"
      4. Descarga el archivo con extensión "appxbundle"
      5. Instálalo. En este paso quizá tengas que activar el modo desarrollador, no lo recuerdo con exactitud.
    • El enlace de descarga del instalador HEVC oficial firmado por Microsoft también se puede encontrar en massgrave.dev[0]. Es un recurso excelente.
      0: https://massgrave.dev/unsupported_products_activation#hevc-v...
    • No hace falta pagar. Solo necesitas el enlace directo.
      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
    • ¿Para qué lo necesitarías? El códec HEVC viene incluido en el paquete de drivers del fabricante de la GPU.
  • Este tipo de cosas ha sido, durante décadas, el canal de distribución y comunicación más eficaz para Windows.

    • No aplica a la mayoría del resto del software.
  • Irónicamente, creo que en la práctica lo usaría en serio para jugar en hardware original un Guitar Hero que tengo en disco físico. El juego está instalado, pero si el disco no está metido en la unidad de DVD averiada, no tengo la “licencia” para jugarlo.
    La ironía mayor es que, incluso si esto funciona, quizá no pueda leer mis partidas guardadas porque la clave pública de la consola está en la lista de revocación. Se puede sortear volviendo a firmar el archivo CON con el valor predeterminado 0.
    Tal vez pronto haya una tercera ironía. Todo esto se ve muy familiar. Tremendamente genial.

    • En un ecosistema como XML > TLV > cadenas terminadas en null / UTF-16 para entrada de usuario, cualquier error off-by-one o entrada maliciosa de usuario sin validar puede hacer que un castillo de naipes de deuda técnica se derrumbe en un campo minado de escalada de privilegios, ejecución remota de código y movimiento lateral. Pero no es algo trivial.
      Este bug, en esencia, es casi una plataforma de pivote retroactiva para el día en que se combinen por accidente entrada sin sanear y escape de contexto.
      Por fuera parece un simple cambio de calcomanía digital, pero como Microsoft ha apalancado en exceso su éxito y se ha negado a introducir cambios incompatibles por la retrocompatibilidad y su propia deuda técnica, algunos errores, aunque sean menores, terminan teniendo un impacto enorme y permanente.
  • Si tu antivirus bloquea la página, puedes verla aquí: https://archive.is/90XGW

    • ¿Qué antivirus hacen eso?
  • ¿Clip no existía desde antes que Xbox One?

  • Después de leer el artículo, especialmente la parte donde dice que este motor fue copiado y pegado del motor DRM de Xbox, ¿todavía hay alguien que crea que Pluton es para la seguridad del usuario final, considerando que también fue copiado de Xbox? ¿No será, al final, para que Microsoft tenga DRM exigible en la PC?
    Como referencia, Pluton ya está en los chips de laptops Intel más recientes, y en AMD lleva un tiempo. ¿Cuánto tardará Windows en exigirlo?

    • Nunca creí en eso. Lo peor es explicárselo a la gente que bebe el Kool-Aid de Microsoft.
      Como soy administrador de Microsoft, en la empresa les encantan las configuraciones de bloqueo máximo como Win11 e Intune. Para mí, la esencia de Windows no es eso, sino buenas herramientas de administración y retrocompatibilidad.
      Pluton será otro TPM. Lo introducirán, esperarán cinco años y luego lo harán obligatorio. Microsoft tiene tiempo.
    • La gente lleva más de 10 años diciendo eso desde que se introdujo TPM.
      Aun así, todavía se puede instalar Linux en PCs vendidas con Windows, instalar en Windows software de terceros descargado fuera de la Store y ver películas pirateadas bajadas por torrent.
      Si no te molesta no poder cambiar la imagen de fondo, incluso puedes ejecutar Windows sin registrarlo ni pagarlo.
    • Quizá sea ingenuo, pero todavía lo creo. Hace falta escepticismo, pero descartarlo por completo solo con conjeturas también es una forma de razonamiento falaz.
      ¿Microsoft podría beneficiarse potencialmente? Por supuesto. Pero eso no niega que pueda haber una motivación real de seguridad para el usuario ni beneficios para el usuario final.
  • “Los datos después del bloque de firma no se revisan en absoluto, e incluso pueden sobrescribir datos anteriores. Si se almacenan juntos bloques del mismo tipo, el último bloque sobrescribe todos los anteriores. Así que, si quieres cambiar los datos de la licencia, solo tienes que crear ese bloque y ponerlo después del bloque de firma”.
    Realmente sorprendente.

    • Me pregunto si es el peor error criptográfico desde que Nintendo Wii usó strncmp para la verificación de hash y se detenía en el primer byte 00 coincidente.