- Keyhole est un bug de contournement de DRM qui permettait de créer des licences pour les applications Microsoft Store et les éditions récentes de Windows en contournant le flux de vérification des licences de CLiP
- CLiP utilise une chaîne de confiance dans laquelle la licence XML signée est vérifiée dans
clipsvc.dll, puis leSPLicenseBlockest transmis àclipsp.syspour une nouvelle vérification dans le noyau - Une clé ECDSA destinée à signer les licences XML était présente sans obfuscation dans
clipup.exe, ce qui permettait à ClipSvc d’accepter des licences XML signées arbitrairement - La véritable vulnérabilité venait du fait que les données placées après le bloc de signature du bloc de licence n’étaient pas vérifiées, tout en pouvant écraser un bloc antérieur du même type, et que les licences Windows verrouillées à l’appareil nécessitaient une licence d’application elle aussi verrouillée à l’appareil
- Cisco TALOS a signalé le même bug à Microsoft le 8 avril 2024 et, après le correctif, l’analyseur s’arrête immédiatement lorsqu’il rencontre le bloc de signature, sans traiter les blocs suivants
Nature de Keyhole et contexte de sa divulgation
- Keyhole est un bug découvert lors de travaux de contournement des vérifications de licence Windows, qui permettait d’attribuer une licence à des applications Microsoft Store ou à des éditions récentes de Windows
- Certains bugs avaient été gardés privés afin d’être conservés pour de futures méthodes d’activation ou comme outils de test, mais la publication de CVE-2024-38184 via Cisco TALOS a conduit à la divulgation de Keyhole
- Ce bug a été découvert indépendamment à peu près à la même période que son signalement à Microsoft
Architecture du traitement des licences dans CLiP
- CLiP (Client Licensing Platform) est un système introduit avec Windows 10, principalement pour implémenter le DRM des applications Microsoft Store, tout en étant aussi intégré à l’activation de Windows
- Les principaux composants de Windows sont les suivants
clipup.exe: migre les licences du Store de Windows 8, les tickets d’authenticité et les clés produit vers des licences numériquesclipsvc.dll: service en mode utilisateur qui gère les licences d’applicationsclipc.dll: API utilisée par les applications pour interagir avec CLiPclipwinrt.dll: API pour les applications UWP utilisant Windows Runtimeclipsp.sys: pilote en mode noyau chargé de vérifier les licences
- Lorsqu’une application de licence CLiP est installée, une licence XML signée est transmise à
clipsvc.dllet, après vérification de la signature XML, les données sont stockées dans%PROGRAMDATA%\Microsoft\Windows\ClipSVC\tokens.dat - Ensuite, le bloc de licence signé contenu dans la balise
SPLicenseBlockest extrait puis transmis àclipsp.sys, où il est vérifié avant d’être enregistré dans le magasin de licences CLiPHKLM\SYSTEM\CurrentControlSet\Control\{7746D80F-97E0-4E26-9543-26B41FC22F79} - Ce magasin est protégé pour ne pas être visible par défaut, mais il reste accessible après modification des autorisations
La clé de signature laissée dans clipup.exe
clipup.execontenait une clé ECDSA valide pouvant servir à signer des licences XML, stockée sans obfuscation- Cette clé est à l’origine utilisée pour envoyer une licence temporaire au Microsoft Store afin d’obtenir une licence numérique, mais ClipSvc acceptait la même clé pour les licences d’application
- Il devenait ainsi possible de signer ou de re-signer arbitrairement des licences XML, de contourner les contrôles en mode utilisateur de ClipSvc et d’envoyer directement à
clipsp.sysle bloc de licence souhaité - À cette étape, la chaîne de confiance au niveau du mode utilisateur était neutralisée, et la question restante était de savoir s’il était possible de tromper ClipSp
Analyse de ClipSp et levée de l’obfuscation Warbird
- Une grande partie du code de ClipSp était masquée par Warbird, l’outil propriétaire d’obfuscation de Microsoft
- ClipSp entoure les appels au code obfusqué avec des fonctions de déchiffrement et de chiffrement, de manière similaire au fonctionnement de Warbird dans les programmes en mode utilisateur
- Les symboles de
clipsp.sysprésents sur les serveurs de Microsoft ont aidé à l’analyse et, en s’appuyant sur la méthode de KiFilterFiberContext, il a été possible d’exécuter manuellement la fonction de déchiffrement pour révéler le code caché - Le fonctionnement de Warbird en mode utilisateur peut être consulté dans warbird-docs
Format des blocs de licence et bug Keyhole
- Dans CLiP, les informations de licence importantes sont stockées dans des blocs de licence, dont le format est documenté dans CikExtractor
- Les blocs de licence utilisent un format TLV (tag-length-value)
- chaque sous-bloc contient un type de données, une longueur de données et les données elles-mêmes
- par exemple, le type
0xC9correspond à License Information et la longueur0xAindique 10 octets de données
- À la fin du bloc de licence se trouve toujours un bloc de signature de type
0xCC, qui contient la signature de toutes les données précédentes ainsi que les informations sur la clé utilisée pour signer - Les expérimentations ont montré que les données ajoutées après le bloc de signature n’étaient pas vérifiées et que, lorsqu’il existait plusieurs blocs du même type, le dernier écrasait le précédent
- Il suffisait donc d’ajouter de nouvelles données de licence après le bloc de signature pour modifier les informations de licence existantes, et cette technique a reçu le nom de Keyhole
Portée possible et contraintes
- Cette méthode permettait de créer la licence d’un élément vendu sur le Microsoft Store à partir d’une autre licence Microsoft Store
- Comme même les applications gratuites disposent de nombreuses licences, il était possible de créer en grand nombre des licences pour les éléments souhaités
- En revanche, une licence device-locked ne pouvait pas être créée à partir d’une licence device-unlocked
- Les licences numériques de Windows étant device-locked, il fallait une licence d’application device-locked, comme celle de Roblox, pour créer une licence Windows
- Cela rendait possibles des opérations auparavant impossibles, comme activer Enterprise LTSC avec une licence numérique ou activer un vrai serveur KMS avec une generic key
Flux de reproduction publié et méthode de correction
- Le flux de création d’une licence Windows consistait à installer une application device-locked, intercepter la licence provenant de
https://licensing.mp.microsoft.com/v7.0/licenses/content, décoder la licence et extraire les blocs, ajouter de nouvelles données, empaqueter et signer le XML, copier le tout dansC:\ProgramData\Microsoft\Windows\ClipSVC\Install\Migration, puis redémarrer ClipSvc ou exécuterclipup -p - Le rapport TALOS-2024-1964 de Cisco TALOS a signalé le même bug à Microsoft le 8 avril 2024
- Ce bug pouvait sembler n’être qu’un simple problème de DRM, mais comme Keyhole pouvait servir de point d’entrée vers un bug plus grave de ClipSp, il a été inclus dans le périmètre de divulgation de TALOS
- Dans la version corrigée, l’analyseur des blocs de licence s’arrête immédiatement lorsqu’il rencontre le bloc de signature et ne traite plus les blocs situés après la signature, ce qui bloque Keyhole
Ressources publiées et lien avec la Xbox One
- Après la publication de Keyhole, le code de génération de licences Keyhole ainsi qu’une collection de binaires CLiP incluant les symboles pour faciliter l’analyse ont été publiés
- Une part importante du code de ClipSp semble avoir été copiée du système DRM de la Xbox One
- La Xbox One dispose d’une puce SP fondée sur le TPM des PC récents, c’est-à-dire un secure processor, dont les fonctions principales sont l’application de la signature de code et la vérification des licences
- Le format des licences XML de CLiP et la majorité des blocs de licence TLV proviennent du système DRM de la Xbox One
- Le SP de la Xbox présente aussi un bug de parsing similaire à celui de ClipSp, mais comme les blocs de données et les blocs liés à la signature y sont analysés séparément, Keyhole ne fonctionne pas sur Xbox
1 commentaires
Avis sur Hacker News
Donc, cela veut dire qu’une fois les détails trouvés, on pourra télécharger directement et gratuitement des jeux Xbox depuis le Microsoft Store ?
Autrement dit, la Xbox serait pour l’instant aussi complètement hackée que la PS Vita ?
En revanche, dommage pour ceux qui ont activé les mises à jour automatiques sur Xbox. Le dernier logiciel système semble inclure une version du noyau supérieure à celle prise en charge par l’exploit collateral-damage.
Ce serait bien de pouvoir aussi obtenir une licence permettant d’installer l’application Lego Boost for Windows 10, qui était encore dans le Windows Store jusqu’en 2020.
D’après ce que j’ai compris, si l’on possède une licence on peut encore la télécharger, mais elle n’est plus proposée aux nouveaux utilisateurs.
Si j’ai bien lu, Microsoft pourrait réduire la portée de la clé de signature des licences temporaires, donc la fenêtre pendant laquelle il sera possible de générer des licences permanentes risque de ne pas être très longue.
Est-ce que ça permet d’activer les extensions HEVC sans compte Microsoft ? C’est tellement frustrant qu’ils ne puissent pas gérer les brevets via une licence globale.
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
Ce genre de choses a été, pendant des décennies, le canal de distribution et de communication le plus efficace pour Windows.
Ironiquement, je pense que je vais réellement m’en servir sérieusement pour jouer sur du matériel d’origine à des jeux Guitar Hero dont je possède le disque physique. Le jeu est installé, mais si le disque n’est pas dans le lecteur DVD en panne, je n’ai pas la « licence » pour y jouer.
Encore plus ironique : même si cela fonctionne, la clé publique de la console figure peut-être sur une liste de révocation, ce qui l’empêcherait de lire mes sauvegardes. On peut contourner ça en resignant les fichiers CON avec la valeur par défaut 0.
Une troisième ironie pourrait bientôt arriver. Tout cela me semble vraiment familier. C’est extrêmement impressionnant.
Ce bug est, au fond, plutôt une plateforme de pivot rétroactive conçue pour le jour où des entrées non nettoyées et une sortie de contexte se combinent par hasard.
Vu de l’extérieur, cela ressemble à un simple échange d’autocollants numériques, mais comme Microsoft a surexploité son succès, et refusé les changements cassants à cause de la rétrocompatibilité et de sa propre dette technique, certaines erreurs, même minimes, deviennent très lourdes de conséquences et permanentes.
Si votre antivirus bloque la page, vous pouvez la consulter ici : https://archive.is/90XGW
Clip n’existait-il pas depuis avant la Xbox One ?
En lisant l’article, en particulier la partie disant que ce moteur a été copié-collé depuis le moteur DRM de la Xbox, est-ce que quelqu’un croit encore que Pluton sert à la sécurité des utilisateurs finaux, sachant qu’il vient lui aussi de la Xbox ? Au final, n’est-ce pas surtout pour que Microsoft dispose d’un DRM imposable sur PC ?
Pour mémoire, Pluton est aussi présent dans les puces récentes d’ordinateurs portables Intel, et il est chez AMD depuis un moment. Combien de temps avant que Windows ne l’exige ?
En tant qu’administrateur Microsoft, les gens de mon entreprise adorent les configurations de verrouillage maximal comme Win11 et Intune. Pour moi, l’essence de Windows, ce n’est pas ça, mais de bons outils d’administration et la rétrocompatibilité.
Pluton deviendra juste un autre TPM. Ils le déploieront, attendront cinq ans, puis le rendront obligatoire. Microsoft a le temps.
Pourtant, on peut toujours installer Linux sur un PC vendu avec Windows, installer sous Windows des logiciels tiers venant d’ailleurs que du Store, et regarder des films piratés téléchargés par torrent.
On peut même exécuter Windows sans l’enregistrer ni le payer, si l’on accepte de ne pas pouvoir changer l’image du bureau.
Microsoft pourrait-il potentiellement en tirer profit ? Bien sûr. Mais cela n’annule pas pour autant l’existence de véritables motivations de sécurité utilisateur ni les bénéfices pour les utilisateurs finaux.
« Les données situées après le bloc de signature ne sont absolument pas vérifiées, et peuvent même écraser des données précédentes. Quand des blocs du même type sont stockés ensemble, le dernier bloc écrase tous les blocs précédents. Donc si vous voulez modifier les données de licence, il suffit de créer le bloc correspondant et de le placer après le bloc de signature. »
Vraiment incroyable.