From 1623e5d14fd908397bbf69ad935c40f3fb948d66 Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Sat, 7 Sep 2024 07:35:27 +0530 Subject: [PATCH] Update blog --- .../assets/keyhole/keyhole_fix.png | Bin 0 -> 48709 bytes blog/2024-09-06-Keyhole/index.md | 19 ++++++++++++------ 2 files changed, 13 insertions(+), 6 deletions(-) create mode 100644 blog/2024-09-06-Keyhole/assets/keyhole/keyhole_fix.png diff --git a/blog/2024-09-06-Keyhole/assets/keyhole/keyhole_fix.png b/blog/2024-09-06-Keyhole/assets/keyhole/keyhole_fix.png new file mode 100644 index 0000000000000000000000000000000000000000..2e7ffa58588e6c15eaf32657a1c54e63f8e0cd48 GIT binary patch literal 48709 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 literal 0 HcmV?d00001 diff --git a/blog/2024-09-06-Keyhole/index.md b/blog/2024-09-06-Keyhole/index.md index 28d39ce..4fb0090 100644 --- a/blog/2024-09-06-Keyhole/index.md +++ b/blog/2024-09-06-Keyhole/index.md @@ -15,13 +15,13 @@ Edited by May, Lyssa, & SpCreatePackaedLicense ## Introduction -In our ongoing work to bypass Windows licensing checks, we occasionally stumble upon bugs that, rather than sharing details about publicly, we choose to keep under wraps. This decision allows us to preserve potential future activation methods by avoiding bug fixes being made by Microsoft, while also giving us valuable tools for testing or developing new methods. +In our ongoing work to bypass Windows licensing checks, we occasionally stumble upon bugs that we choose to keep secret. This decision allows us to preserve potential future activation methods by avoiding bug fixes, while also giving us valuable tools for testing or developing new methods. -One such discovery, which we’ve dubbed "Keyhole", turned out to be a highly effective DRM bypass. It gave users the ability to license any Microsoft Store app or any modern Windows edition with ease. +One such discovery, which we've name "Keyhole", turned out to be a highly effective DRM bypass. It gave users the ability to license any Microsoft Store app or any modern Windows edition with ease. -Following the disclosure of [CVE-2024-38184](https://msrc.microsoft.com/update-guide/vulnerability/CVE-2024-38184) by [Cisco TALOS](https://talosintelligence.com), we have decided to share our findings on Keyhole, which we independently uncovered around the same time it's existence became known to Microsoft. +Following the disclosure of [CVE-2024-38184](https://msrc.microsoft.com/update-guide/vulnerability/CVE-2024-38184) by [Cisco TALOS](https://talosintelligence.com), we have decided to share our findings on Keyhole, which we independently uncovered around the same time it was reported to Microsoft. ## CLiP @@ -54,7 +54,9 @@ So far, one binary failed to receive any mention: `clipup.exe`. This is because ![ecc key](./assets/keyhole/ecc_key.png) -Yes, literally. A valid ECDSA key to sign XML licenses is stored in unobfuscated form, allowing anyone to very easily sign or resign XML licenses. This allows us to bypass ClipSvc's gatekeeping and effectively send any license blocks we want straight to ClipSp. With this, we entirely bypass the usermode level of the chain-of-trust, and now all that's left is to try and trick ClipSp. +Yes, literally. A valid ECDSA key to sign XML licenses is stored in unobfuscated form, allowing anyone to very easily sign or resign XML licenses. This key is normally meant to sign temporary licenses sent to the Microsoft store to get digital licenses, but ClipSvc will happily accept it for app licenses as well. + +This allows us to bypass ClipSvc's gatekeeping and effectively send any license blocks we want straight to ClipSp. With this, we entirely bypass the usermode level of the chain-of-trust, and now all that's left is to try and trick ClipSp. ## Unpacking ClipSp @@ -138,6 +140,10 @@ For some reason beyond us, they reported it as a "privilege escalation", even th What did they get out of this? We have no idea, and seemingly it looks like they didn't get anything in return, aside from a minor credit in the [August 2024 update release notes](https://msrc.microsoft.com/update-guide/releaseNote/2024-Aug). So, to Philippe Laulheret who reported this bug, I hope you feel good about ruining our fun for a 4-months-late pat on the back. +As for the fix itself, it's rather straightforward. As shown below, the current license block parser code immediately exits after encountering a signature block. This prevents it from processing blocks after the signature, completely patching Keyhole. + +![keyhole fix](./assets/keyhole/keyhole_fix.png) + ## Giving Season After mourning the loss of our beloved exploit, we decided that it would only be fair to publicize our own discoveries on CLiP. So, we've released the code to [generate Keyhole licenses](https://github.com/massgravel/keyhole) and our [collection of CLiP binaries](https://archive.org/details/clipwinrt) with symbols for easier analysis. We invite you to go forth and discover more funny things in CLiP! (and [report them to us](https://massgrave.dev/contactus) instead of MS) @@ -163,8 +169,9 @@ So, to those with a console that's been [collaterally damaged](https://github.co The research covered in this blogpost was made possible by the following people/groups: - May - Initial discovery, testing, reverse engineering - - SpCreatePackaedLicense, asdcorp - Further testing, reverse engineering - - WitherOrNot - Tool development, testing, reverse engineering + - asdcorp - Testing, reverse engineering + - SpCreatePackaedLicense - Testing, reverse engineering, bugfix analysis + - WitherOrNot - Tool development, testing, reverse engineering, bugfix analysis - emoose, LukeFZ - License Block format documentation - KiFilterFiberContext - ClipSp unpacking - Phillippe Laulheret, Cisco TALOS - Inspiring this publication