<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Parag Mali - tag: secure-future-initiative</title><description>Posts tagged secure-future-initiative.</description><link>https://paragmali.com/</link><language>en-US</language><lastBuildDate>Sun, 07 Jun 2026 04:13:13 GMT</lastBuildDate><atom:link href="https://paragmali.com/tags/secure-future-initiative/rss.xml" rel="self" type="application/rss+xml"/><item><title>The Layer Above the OS: The Windows Security Wars Part 6 (2023-2026)</title><link>https://paragmali.com/blog/the-layer-above-the-os-the-windows-security-wars-part-6-2023/</link><guid isPermaLink="true">https://paragmali.com/blog/the-layer-above-the-os-the-windows-security-wars-part-6-2023/</guid><description>How Storm-0558, CrowdStrike, and the Recall saga forced Microsoft to admit the biggest attack surface on a modern Windows PC is no longer the OS itself.</description><pubDate>Sat, 30 May 2026 00:00:00 GMT</pubDate><content:encoded>
**Three failures. Three soft layers. One era.** Between 2023 and 2026, Microsoft publicly admitted that the largest attack surface on a modern Windows machine is no longer the OS itself -- it is the third-party kernel-mode security vendor, the institution&apos;s own identity-token custody, and the AI feature plane sitting on top of both.&lt;p&gt;Storm-0558 forged enterprise Exchange tokens with a 2016 consumer signing key. CrowdStrike&apos;s July 19, 2024 outage bricked roughly 8.5 million Windows hosts in ninety minutes -- no attacker, no exploit, just twenty bytes of bad data in a sanctioned kernel driver. The Recall saga proved that VBS, TPM, and DPAPI do not know how to enforce policy on what an AI agent decides to do next.&lt;/p&gt;
&lt;p&gt;Microsoft&apos;s reply is the Secure Future Initiative, the Windows Endpoint Security Platform, and the April 14, 2026 Cross-Signing trust deprecation -- the first sustained engineering re-architecture of all three soft spots in parallel. Whether the response lands before the 2026 ransomware wave is the open forward question.
&lt;/p&gt;&lt;p&gt;&lt;/p&gt;
&lt;h2&gt;1. Twenty Bytes at 04:09 UTC&lt;/h2&gt;
&lt;p&gt;At 04:09 UTC on July 19, 2024, a CrowdStrike Falcon sensor running on roughly 8.5 million Windows hosts pulled a routine Rapid Response Content update [@ms-weston-jul20-2024] -- Channel File 291, twenty-one input fields where the in-kernel Content Interpreter expected twenty, the twenty-first treated as an address the kernel was never meant to follow [@crowdstrike-rca-pdf] -- and the world&apos;s airline desks, hospital admissions systems, and emergency dispatch terminals began the bluest morning in the history of the NT kernel. No attacker was involved. No exploit ran. A non-malicious data-parsing defect inside a sanctioned, signed, kernel-mode third-party security driver took down a sovereign country&apos;s flight network in ninety minutes [@ms-jul27-2024-security-tools] because the operating system, twenty-five years earlier, had agreed to let security vendors run there [@theregister-2006-vista].&lt;/p&gt;
&lt;p&gt;Three months before that morning, the United States Cyber Safety Review Board had published a different verdict on a different vendor failure. Its review of the summer 2023 Microsoft Exchange Online intrusion -- the &lt;a href=&quot;https://paragmali.com/blog/forged-from-2016-how-storm-0558-turned-one-stolen-signing-ke/&quot; rel=&quot;noopener&quot;&gt;Storm-0558 episode&lt;/a&gt; in which a Chinese threat actor forged Outlook tokens against enterprise Exchange Online using a 2016 consumer-tier Microsoft Account signing key -- concluded that the breach was &quot;preventable and should never have occurred&quot; and that &quot;Microsoft&apos;s security culture was inadequate and requires an overhaul&quot; [@csrb-2024]. The CSRB had only reviewed two prior incidents [@dhs-press-2024]; the third reviewed company was the steward of the world&apos;s most widely deployed operating system.&lt;/p&gt;
&lt;p&gt;Ten weeks after the Storm-0558 verdict, on June 13, 2024, Microsoft&apos;s group product manager for Windows quietly added an in-place editor&apos;s note to a blog post he had published six days earlier. The note pulled the company&apos;s flagship Copilot+ PC AI feature, Recall, from a planned ship date of June 18, 2024 -- five days before launch -- and shifted it to the Windows Insider Program [@recall-davuluri-jun7-2024].&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; This is the sixth installment of The Windows Security Wars. Earlier parts walked BitLocker, Credential Guard, VBS, Pluton, and the Defender-and-WDAC arc that produced the modern Windows security baseline. This part picks up where &lt;a href=&quot;https://paragmali.com/blog/the-thirteen-months-that-made-zero-trust-unavoidable-the-win/&quot; rel=&quot;noopener&quot;&gt;Part 5&lt;/a&gt; left off and argues that the era&apos;s actual story is what happens &lt;em&gt;above&lt;/em&gt; that baseline.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Three failures, three soft layers, one era -- and the 2023-2026 chapter is the first in NT&apos;s history in which the layer above the OS (the institution&apos;s own identity-token custody, the third-party kernel-mode security vendor, and the AI feature application plane) became the load-bearing security boundary under public scrutiny while the OS layer itself kept hardening. David Weston&apos;s July 20, 2024 post framed the 8.5 million figure as &quot;less than one percent of all Windows machines&quot; [@ms-weston-jul20-2024]. The number itself is sourced from Windows Error Reporting crash dumps and customer telemetry, so machines stuck in a boot loop with no network or with WER disabled are not counted; treat it as a credible lower bound rather than a full census [@wiki-crowdstrike-outage]. The framing is correct and worth holding onto: this is a story about which 1% mattered, not about the platform&apos;s defect rate. To see why that is an architectural inflection rather than a coincidence of three bad years, we have to walk the prior arcs the three events belong to.&lt;/p&gt;
&lt;h2&gt;2. Three Lineages Converging&lt;/h2&gt;
&lt;p&gt;The era did not begin in June 2023. Three long-running arcs converged on the 2023-2026 chapter, and each event in the opening is the latest generation of one of them.&lt;/p&gt;
&lt;h3&gt;Lineage 1: Identity-authority forgery&lt;/h3&gt;
&lt;p&gt;The first lineage is the oldest. In 1997, a researcher known as Hobbit, distributing through the Avian Research mailing list, documented that Windows CIFS authentication could be replayed with the password hash rather than the password itself. Microsoft&apos;s own &lt;em&gt;Mitigating Pass-the-Hash and Other Credential Theft&lt;/em&gt; whitepaper, in its 2014 second edition, treats the Hobbit observation as the foundational primitive for the entire credential-theft family [@ms-pth-whitepaper]. In 2014, Benjamin Delpy stood up at Black Hat USA and demonstrated that the &lt;a href=&quot;https://paragmali.com/blog/krbtgt-the-account-that-owns-active-directory/&quot; rel=&quot;noopener&quot;&gt;Active Directory KRBTGT account&lt;/a&gt;&apos;s long-lived signing key, once stolen, let an attacker mint Kerberos tickets for any user, including domain administrators -- the &quot;Golden Ticket&quot; attack, packaged into the mimikatz toolchain [@delpy-bh-slides] [@mimikatz-github]. In 2017, CyberArk&apos;s Shaked Reiner extended the same idea to SAML identity providers: steal the IdP&apos;s signing certificate and mint cross-application tokens at will [@cyberark-golden-saml]. In December 2020, FireEye and Microsoft together disclosed that a sophisticated nation-state actor had compromised the upstream SolarWinds build process and minted trusted certificates with that compromise [@mandiant-fireeye] [@msrc-solarwinds-2020].&lt;/p&gt;
&lt;p&gt;In June 2023, Storm-0558 widened the trust domain again. The forged tokens were signed by a consumer-tier Microsoft Account key issued in April 2016 [@wiz-storm0558], but the tokens worked against enterprise Exchange Online inboxes [@mstic-storm0558-jul14-2023]. Each generation of this lineage widens the issuer domain by one level: from one user&apos;s hash, to one directory&apos;s ticket-signing key, to one IdP&apos;s SAML key, to one supply chain&apos;s signing certificate, to one cloud provider&apos;s &lt;em&gt;consumer&lt;/em&gt; signing key crossing into its &lt;em&gt;enterprise&lt;/em&gt; trust boundary.&lt;/p&gt;

flowchart LR
    A[&quot;1997: Pass-the-Hash, Hobbit&quot;] --&amp;gt; B[&quot;2014: Golden Ticket, Delpy&quot;]
    B --&amp;gt; C[&quot;2017: Golden SAML, Reiner&quot;]
    C --&amp;gt; D[&quot;2020: Sunburst supply chain, FireEye and Microsoft&quot;]
    D --&amp;gt; E[&quot;2023: Storm-0558 cross-tier MSA key&quot;]
&lt;h3&gt;Lineage 2: Third-party AV in the kernel&lt;/h3&gt;
&lt;p&gt;The second lineage runs in parallel. In the late 1990s, anti-virus drivers on Windows NT loaded unsigned and hooked the kernel directly through the System Service Descriptor Table. PatchGuard arrived first, shipping in April 2005 with Windows XP Professional x64 Edition and Windows Server 2003 SP1 x64; it policed the integrity of protected kernel structures so SSDT hooking could no longer survive [@patchguard-2005-history]. Eighteen months later, Vista x64 made &lt;a href=&quot;https://paragmali.com/blog/windows-kernel-code-integrity-2006-2026/&quot; rel=&quot;noopener&quot;&gt;Kernel-Mode Code Signing (KMCS)&lt;/a&gt; mandatory: every kernel driver now had to chain to a trusted Authenticode certificate [@kmcs-policy-docs] [@msrc-vista-2005-kernelmode]. The combined effect landed at scale with Vista x64, because that was the release in which unsigned x64 kernel code stopped loading by default.&lt;/p&gt;

The Windows policy, introduced with x64 editions of Vista, that requires every kernel-mode driver to be signed by a certificate chaining to a Microsoft-trusted root. The Cross-Signing Program let third-party certificate authorities issue compatible certificates; the Windows Hardware Compatibility Program (WHCP) is the modern submission path.
&lt;p&gt;The AV industry pushed back. McAfee, Symantec, and Kaspersky argued publicly through 2006-2009 that PatchGuard amounted to an antitrust violation, since Microsoft&apos;s own Defender ran where they were now locked out [@theregister-2006-vista] [@msnews-2006-collab]. The EU-mediated settlement that followed produced the substrate of what eventually became the Microsoft Virus Initiative (MVI) -- a sanctioned set of kernel-access patterns and APIs that third-party AV vendors could use [@mvi-criteria].&lt;/p&gt;

Microsoft&apos;s program for vetting third-party endpoint security vendors that ship code into Windows. Membership requires meeting Microsoft-defined product and testing criteria. MVI is the institutional residue of the 2006-2009 antitrust settlement that produced today&apos;s third-party-AV-in-kernel model.
&lt;p&gt;By the early 2020s, the visible failure mode of the kernel-resident AV class had become BYOVD (&quot;bring your own vulnerable driver&quot;) attacks, in which an attacker loaded a signed-but-buggy legitimate driver as a privilege-escalation primitive. Microsoft&apos;s response was the Vulnerable Driver Blocklist, default-on in Windows 11 22H2 [@driver-block-rules]. That settled the malicious-vendor case. It did not settle the failure mode CrowdStrike would demonstrate in 2024.&lt;/p&gt;
&lt;h3&gt;Lineage 3: AI as a security boundary&lt;/h3&gt;
&lt;p&gt;The third lineage is the youngest. &lt;a href=&quot;https://paragmali.com/blog/your-face-is-not-your-password-inside-windows-hellos-hardwar/&quot; rel=&quot;noopener&quot;&gt;Windows Hello&lt;/a&gt;, launched with Windows 10 in 2015, was the first widely deployed Windows feature whose security decisions depended on a statistical classifier -- the biometric matcher that decided whether the face in front of the camera matched the enrolled template [@hello-for-business]. Defender&apos;s machine-learning detection components and Edge&apos;s SmartScreen reputation engine extended the same pattern through 2017-2020: statistical scoring as one input to a security decision. Microsoft 365 Copilot, launched in 2023, moved the statistical surface deeper into the trust model by letting an LLM execute actions on a user&apos;s behalf inside the tenant.&lt;/p&gt;
&lt;p&gt;On May 20, 2024, the Copilot+ PC class moved the statistical surface onto the local device with a programmable NPU and a flagship feature, Recall, designed to take screenshots of everything on screen and index them for semantic search [@copilot-pcs-may-20]. Recall would force the question the prior generation had merely circled: is the AI agent&apos;s &lt;em&gt;judgment&lt;/em&gt; a security boundary, and if so, what enforces it?&lt;/p&gt;
&lt;p&gt;All three lineages reach their newest soft layer in the same three-year window. The next question is whether each soft layer was equally well defended on the morning of June 15, 2023 -- the morning the United States State Department&apos;s GCC-High security operations center pulled the audit-log query that flagged the Storm-0558 token misuse [@csrb-2024].&lt;/p&gt;
&lt;h2&gt;3. Pre-CSRB Posture and Storm-0558&lt;/h2&gt;
&lt;p&gt;On the morning of June 15, 2023, Microsoft&apos;s security posture looked complete. A decade of methodical work had pushed the platform&apos;s boundary primitives downward and outward: BitLocker, Credential Guard, VBS, HVCI, Pluton; Smart App Control; &lt;a href=&quot;https://paragmali.com/blog/who-decided-this-token-is-good-a-field-guide-to-conditional-/&quot; rel=&quot;noopener&quot;&gt;Continuous Access Evaluation&lt;/a&gt;; Defender for Endpoint as a managed cloud service. The operating assumption was that the &lt;em&gt;platform&lt;/em&gt; was the boundary worth defending and that the institution sat above the boundary as a trusted operator. By the close of business that day, the assumption was wrong, and the State Department&apos;s GCC-High SOC was about to be the first organization on the planet to find out. Per the CSRB report (page 11), Microsoft was notified on June 16, 2023 [@csrb-2024].&lt;/p&gt;
&lt;p&gt;The Storm-0558 forgery primitive worked because four independent decisions, each defensible in isolation, had aligned across six years.&lt;/p&gt;
&lt;h3&gt;The four pre-conditions&lt;/h3&gt;
&lt;p&gt;The first pre-condition was an &lt;strong&gt;unrotated 2016 MSA consumer signing key&lt;/strong&gt;. Wiz Research&apos;s reconstruction of the published JWKS history shows the certificate was issued April 5, 2016 and expired April 4, 2021; the key continued to be trusted by at least one Outlook Web Access validator after expiry [@wiz-storm0558].&lt;/p&gt;
&lt;p&gt;The second pre-condition was &lt;strong&gt;software-resident custody&lt;/strong&gt; at the moment of key acquisition. The MSA signing service was not in a hardware security module at the time; only after the April 2025 Secure Future Initiative progress report did Microsoft confirm that MSA and Entra ID signing keys had been moved to hardware-backed security modules with automatic rotation and that the MSA signing service itself had been migrated to &lt;a href=&quot;https://paragmali.com/blog/inside-azure-confidential-vms-sev-snp-intel-tdx-and-the-para/&quot; rel=&quot;noopener&quot;&gt;Azure Confidential VMs&lt;/a&gt; [@sfi-apr-2025].&lt;/p&gt;
&lt;p&gt;The third pre-condition was a &lt;strong&gt;converged OWA token validator&lt;/strong&gt; that accepted tokens signed by either MSA or Entra ID issuers. The September 2018 metadata-endpoint convergence had been a developer-experience decision that worked correctly; the failure was a later OWA migration onto that endpoint without adding the cross-tier guard.&lt;/p&gt;
&lt;p&gt;The fourth was &lt;strong&gt;a missing issuer and audience check&lt;/strong&gt; on the OWA validation path. Microsoft&apos;s September 6, 2023 root cause statement, later edited in place on March 12, 2024, is unambiguous: &quot;developers in the mail system incorrectly assumed libraries performed complete validation and did not add the required issuer/scope validation&quot; [@msrc-storm0558-key-acq].&lt;/p&gt;

flowchart TD
    A[&quot;2016 MSA signing certificate issued&quot;] --&amp;gt; E[&quot;Forgery primitive&quot;]
    B[&quot;Software-resident key custody&quot;] --&amp;gt; E
    C[&quot;Converged MSA plus Entra ID validator endpoint&quot;] --&amp;gt; E
    D[&quot;OWA path missing iss and aud validation&quot;] --&amp;gt; E
    E --&amp;gt; F[&quot;Forged tokens accepted by enterprise Exchange Online&quot;]
&lt;p&gt;The combination produced a forgery primitive that worked at nation-state scale. The CSRB tallied the victims: 22 enterprise organizations, approximately 503 personal accounts, and roughly 60,000 emails from 10 State Department accounts [@csrb-2024]. The CSRB&apos;s April 2, 2024 verdict, on page ii of the public report, is the load-bearing sentence of the era and is reproduced verbatim in the PullQuote below [@csrb-2024]. The report was the third the Board had completed since its February 2022 announcement [@dhs-press-2024]; the prior two had reviewed Log4j and Lapsus$, neither of which was a single-vendor failure of the same kind [@thehackernews-csrb] [@cybersecuritydive-csrb].&lt;/p&gt;

A United States public-private review board, modeled loosely on the National Transportation Safety Board, that conducts after-action reviews of consequential cybersecurity incidents. The CSRB has no enforcement authority; its product is a public report with recommendations.

The consumer-tier identity tenant that backs personal Outlook, OneDrive, Xbox, and similar consumer services. Its canonical tenant GUID at the OpenID Connect discovery endpoint is `9188040d-6c67-4c5b-b112-36a304b66dad` [@msa-oidc-discovery]. The Storm-0558 forgery primitive used an MSA-issued signing key against an enterprise Exchange Online validator that did not reject the consumer-tier issuer.
This intrusion was preventable and should never have occurred... Microsoft&apos;s security culture was inadequate and requires an overhaul. -- United States Cyber Safety Review Board, *Review of the Summer 2023 Microsoft Exchange Online Intrusion*, April 2, 2024 [@csrb-2024].
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; Microsoft&apos;s September 6, 2023 post initially hypothesized that the MSA key had been extracted from a 2021 crash dump. On March 12, 2024 Microsoft edited the post in place with a verbatim note: &quot;the actor access may have resulted from a crash dump in 2021, but we have not found a crash dump containing the impacted key material&quot; [@msrc-storm0558-key-acq]. The CSRB report (page 17) is equally explicit: &quot;Microsoft has been unable to determine how or when Storm-0558 obtained the MSA key&quot; [@csrb-2024]. Any account that asserts the crash-dump path as fact is reading a retracted hypothesis as confirmed history.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The validation step Microsoft says was missing on the OWA path is not exotic: RFC 8725, the IETF&apos;s JSON Web Token best current practices, treats issuer and audience checks as baseline obligations [@rfc-8725]. The browser-runnable snippet below shows the shape of the check the OWA validator skipped.&lt;/p&gt;
&lt;p&gt;{`
const consumerTenantGuid = &quot;9188040d-6c67-4c5b-b112-36a304b66dad&quot;;
const token = {
  iss: &quot;login.microsoftonline.com/&quot; + consumerTenantGuid + &quot;/v2.0&quot;,
  aud: &quot;outlook.office.com&quot;,
  sub: &quot;&lt;a href=&quot;mailto:victim@statedept.example&quot; rel=&quot;noopener&quot;&gt;victim@statedept.example&lt;/a&gt;&quot;,
};&lt;/p&gt;
&lt;p&gt;function validate(token, expectedIssuer, expectedAudience) {
  if (token.iss !== expectedIssuer) return &quot;reject: wrong issuer&quot;;
  if (token.aud !== expectedAudience) return &quot;reject: wrong audience&quot;;
  return &quot;accept&quot;;
}&lt;/p&gt;
&lt;p&gt;// What the OWA path should have done for enterprise mailboxes
const enterpriseTenantGuid = &quot;your-enterprise-tenant-guid&quot;;
const enterpriseIssuer = &quot;login.microsoftonline.com/&quot; + enterpriseTenantGuid + &quot;/v2.0&quot;;
console.log(validate(token, enterpriseIssuer, &quot;outlook.office.com&quot;));
`}&lt;/p&gt;
&lt;p&gt;Storm-0558 was the first half of the proof: the layer above the OS -- Microsoft&apos;s own identity-token custody -- is a soft layer. The second half arrived almost exactly one year later, on July 19, 2024. Before walking that morning, we have to walk the institutional response Microsoft launched in the four months between the two events, because the response is what the rest of the article evaluates.&lt;/p&gt;
&lt;h2&gt;4. Five Threads Across 2023-2026&lt;/h2&gt;
&lt;p&gt;The 2023-2026 era has five parallel storylines. They have to be walked as concurrent, not sequential, because the era&apos;s institutional fact is that all five moved at once and reinforced each other.&lt;/p&gt;
&lt;h3&gt;4.1 The CSRB and the Secure Future Initiative&lt;/h3&gt;
&lt;p&gt;Microsoft&apos;s response to Storm-0558 began five months before the CSRB ruled the breach preventable and continued for two years after. On November 2, 2023, Microsoft Vice Chair and President Brad Smith published a post on the company&apos;s On the Issues blog announcing the Secure Future Initiative (SFI). The original framing had three pillars: AI-based cyber defenses, advances in fundamental software engineering, and advocacy for international norms [@sfi-nov-2023].&lt;/p&gt;
&lt;p&gt;Two events between November 2023 and May 2024 forced a reframing. The first was the January 2024 Midnight Blizzard disclosure -- the Russian SVR-linked actor that compromised Microsoft corporate email through a legacy test tenant. The second was the April 2, 2024 CSRB verdict. On May 3, 2024, in an unusual move, Microsoft Chairman and CEO Satya Nadella wrote directly to employees and posted the memo publicly: &quot;I want to talk about something critical to our company&apos;s future: prioritizing security above all else... we will commit the entirety of our organization to SFI&quot; [@sfi-may3-2024-nadella]. The Microsoft Security blog technical companion the same day reframed SFI as three principles (Secure by Design, Secure by Default, Secure Operations) and six pillars (Protect Identities and Secrets, Protect Tenants and Isolate Production Systems, Protect Networks, Protect Engineering Systems, Monitor and Detect Threats, Accelerate Response and Remediation) [@sfi-may3-2024-secblog].&lt;/p&gt;
&lt;p&gt;On June 13, 2024, in front of the House Committee on Homeland Security, Brad Smith said the sentence that anchors Microsoft&apos;s post-CSRB posture: &quot;Microsoft accepts responsibility for each and every one of the issues cited in the CSRB&apos;s report. Without equivocation or hesitation. And without any sense of defensiveness&quot; [@smith-house-testimony-jun-2024] [@ms-on-issues-jun-2024].&lt;/p&gt;

Microsoft accepts responsibility for each and every one of the issues cited in the CSRB&apos;s report. Without equivocation or hesitation. And without any sense of defensiveness. -- Brad Smith, June 13, 2024, before the House Committee on Homeland Security [@smith-house-testimony-jun-2024].
&lt;p&gt;The progress reports that followed quantified the institutional commitment. The September 23, 2024 update is the first to use Microsoft&apos;s signature phrase: &quot;we have dedicated the equivalent of 34,000 full-time engineers to SFI -- making it the largest cybersecurity engineering effort in history&quot; [@sfi-sept-2024]. The same post is the first to link senior leadership compensation to security outcomes and to formalize the Cybersecurity Governance Council and Deputy CISO structure. The April 21, 2025 progress report reports that MSA signing keys had been moved to hardware-backed security modules with automatic rotation, the MSA signing service had been migrated to Azure Confidential VMs, and identity-SDK validation for Microsoft&apos;s own apps had moved from 73% to 90% [@sfi-apr-2025]. The November 10, 2025 Windows-and-Surface-specific SFI report introduced the &lt;a href=&quot;https://paragmali.com/blog/from-hotpatch-to-150-a-core-the-live-patch-pipeline-microsof/&quot; rel=&quot;noopener&quot;&gt;Hotpatch metric&lt;/a&gt; -- 81% of enrolled devices compliant within 24 hours of Patch Tuesday -- and announced the &lt;a href=&quot;https://paragmali.com/blog/rust-in-the-windows-kernel-a-field-guide-to-the-2024-2026-me/&quot; rel=&quot;noopener&quot;&gt;Rust rewrite of Surface UEFI firmware and Windows drivers&lt;/a&gt;, paired with the Open Device Partnership opening those Rust drivers to OEM partners [@sfi-nov-2025-windows].&lt;/p&gt;
&lt;p&gt;Microsoft&apos;s &quot;34,000 full-time engineers&quot; wording is an FTE-equivalent calculation, not a literal headcount [@sfi-sept-2024]. The April 2025 report rephrases it as &quot;34,000 engineers working full-time for 11 months&quot; [@sfi-apr-2025], which is the same arithmetic in a more honest grammar.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;SFI report&lt;/th&gt;
&lt;th&gt;Identity-SDK validation&lt;/th&gt;
&lt;th&gt;Signing-key custody&lt;/th&gt;
&lt;th&gt;Audit-log retention&lt;/th&gt;
&lt;th&gt;Hardware and firmware&lt;/th&gt;
&lt;th&gt;Employee and exec ties&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td&gt;Nov 2, 2023 [@sfi-nov-2023]&lt;/td&gt;
&lt;td&gt;Not yet reported&lt;/td&gt;
&lt;td&gt;Pre-Storm-0558 baseline&lt;/td&gt;
&lt;td&gt;Pre-incident baseline&lt;/td&gt;
&lt;td&gt;Not in scope&lt;/td&gt;
&lt;td&gt;Three pillars framing only&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Sept 23, 2024 [@sfi-sept-2024]&lt;/td&gt;
&lt;td&gt;Reported, no number&lt;/td&gt;
&lt;td&gt;Azure Managed HSM with automatic rotation&lt;/td&gt;
&lt;td&gt;2-year retention committed&lt;/td&gt;
&lt;td&gt;Pluton firmware over OS channel&lt;/td&gt;
&lt;td&gt;Senior leadership compensation tied; Cybersecurity Governance Council&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Apr 21, 2025 [@sfi-apr-2025]&lt;/td&gt;
&lt;td&gt;90% (up from 73%)&lt;/td&gt;
&lt;td&gt;MSA service in Azure Confidential VMs; Entra ID migration in progress&lt;/td&gt;
&lt;td&gt;2-year retention live&lt;/td&gt;
&lt;td&gt;Pluton across all three x86 vendors&lt;/td&gt;
&lt;td&gt;Continuing&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Nov 10, 2025 [@sfi-nov-2025-windows]&lt;/td&gt;
&lt;td&gt;Continuing&lt;/td&gt;
&lt;td&gt;Continuing&lt;/td&gt;
&lt;td&gt;Continuing&lt;/td&gt;
&lt;td&gt;Surface UEFI and Windows drivers in Rust; Open Device Partnership&lt;/td&gt;
&lt;td&gt;95% of employees completing AI-attack training&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;SFI is the first time a platform vendor has publicly tied executive compensation, two years of audit-log retention, the equivalent of 34,000 full-time engineers, a Rust rewrite of UEFI firmware and Windows drivers, and a sustained cross-progress-report measurement program to the explicit premise that &lt;em&gt;the vendor&apos;s own security culture is part of the platform&apos;s attack surface&lt;/em&gt;. That is the institutional half of the thesis.&lt;/p&gt;
&lt;p&gt;On the very day Brad Smith&apos;s House testimony committed Microsoft to the SFI roadmap, an entirely different soft layer -- one that had nothing to do with identity-token custody -- had already failed quietly. That morning&apos;s failure is the second thread.&lt;/p&gt;
&lt;h3&gt;4.2 Recall as the AI-feature security-review worked example&lt;/h3&gt;
&lt;p&gt;The second thread arrived from an unexpected direction. On the same June 13, 2024 that Brad Smith committed Microsoft to the SFI roadmap, Microsoft pulled its flagship Copilot+ PC AI feature five days before launch over a structural problem in its own threat model. The feature was &lt;a href=&quot;https://paragmali.com/blog/microsoft-recall-2024-2026-re-architecture/&quot; rel=&quot;noopener&quot;&gt;Recall&lt;/a&gt;. The timeline that followed is the worked example of what post-SFI AI-feature security review looks like under sustained adversarial pressure.&lt;/p&gt;
&lt;p&gt;On May 20, 2024, Yusuf Mehdi announced Copilot+ PCs with a 40+ TOPS NPU minimum and Recall as the flagship feature [@copilot-pcs-may-20]. Recall&apos;s Generation-1 design was simple: take a screenshot of the user&apos;s screen at intervals, extract text and entities with on-device AI, and store the result in an SQLite database protected by AES-128-XTS volume encryption plus filesystem ACLs scoped to the user. The &quot;Recall is not shared with anyone&quot; framing implied a clean trust boundary. It was wrong.&lt;/p&gt;
&lt;p&gt;On May 28, 2024, the Swiss researcher Alexander Hagenah (&lt;code&gt;@xaitax&lt;/code&gt;) released &lt;code&gt;TotalRecall&lt;/code&gt;, a proof-of-concept extractor that walked the SQLite store with the user&apos;s own privileges and dumped every snapshot [@totalrecall-github]. Two days later, Kevin Beaumont&apos;s DoublePulsar post amplified the threat model into the community&apos;s consciousness with the line that defined the news cycle: &quot;Recall enables threat actors to automate scraping everything you have ever looked at within seconds&quot; [@beaumont-doublepulsar] [@helpnetsecurity-totalrecall]. On June 3, 2024, Google Project Zero&apos;s James Forshaw published the structural-bound observation that the rest of the Recall story would have to live with: &quot;Spoiler, it is only protected through being ACL&apos;ed to SYSTEM and so any privilege escalation (or non-security boundary &lt;em&gt;cough&lt;/em&gt;) is sufficient to leak the information&quot; [@forshaw-acl-jun3-2024]. The parenthetical pointed at Microsoft&apos;s own Security Servicing Criteria for Windows, which treats same-user post-authentication as not a security boundary [@msrc-servicing-criteria].&lt;/p&gt;

Spoiler, it is only protected through being ACL&apos;ed to SYSTEM and so any privilege escalation (or non-security boundary *cough*) is sufficient to leak the information. -- James Forshaw, Google Project Zero, June 3, 2024 [@forshaw-acl-jun3-2024].
&lt;p&gt;On June 7, 2024, Pavan Davuluri posted a Generation-2 commitment: Recall would be default-off, gated by Windows Hello Enhanced Sign-in Security, and would use just-in-time decryption [@recall-davuluri-jun7-2024]. On June 13, 2024, in an in-place edit to the same post, Davuluri pulled Recall from the planned June 18, 2024 Copilot+ PC ship date and moved it into the Windows Insider Program [@recall-davuluri-jun7-2024]. On September 27, 2024, Davuluri posted the Generation-3 architecture: &quot;Encryption keys are protected via the Trusted Platform Module (TPM), tied to a user&apos;s Windows Hello Enhanced Sign-in Security identity, and can only be used by operations within a secure environment called a Virtualization-based Security Enclave (VBS Enclave)&quot; [@recall-davuluri-sept27-2024]. Recall returned to Insiders on November 22, 2024, expanded to AMD and Intel Copilot+ silicon in spring 2025, and reached general availability on May 13, 2025 [@recall-manage-docs].&lt;/p&gt;

A user-mode trustlet that runs inside Virtual Trust Level 1 -- the same isolated environment used by Credential Guard and the Secure Kernel -- with an attested code identity, so that code outside the enclave (including a compromised normal-world kernel) cannot read enclave memory [@vbs-enclaves-docs]. Recall&apos;s Generation-3 design uses a VBS Enclave to perform decryption with TPM-bound keys gated by Windows Hello ESS [@recall-davuluri-sept27-2024] [@hello-ess-docs].

flowchart LR
    subgraph G1 [&quot;Generation 1 (May 20, 2024)&quot;]
        A1[&quot;Screenshots&quot;] --&amp;gt; B1[&quot;Plaintext SQLite&quot;]
        B1 --&amp;gt; C1[&quot;Filesystem ACL to user&quot;]
        C1 --&amp;gt; D1[&quot;Any user-mode process reads&quot;]
    end
    subgraph G3 [&quot;Generation 3 (Sept 27, 2024)&quot;]
        A3[&quot;Screenshots&quot;] --&amp;gt; B3[&quot;AES-encrypted snapshot&quot;]
        B3 --&amp;gt; C3[&quot;VBS Enclave decrypts in VTL1&quot;]
        C3 --&amp;gt; D3[&quot;TPM key release&quot;]
        D3 --&amp;gt; E3[&quot;Windows Hello ESS gate&quot;]
        E3 --&amp;gt; F3[&quot;UI plane render&quot;]
    end
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Generation&lt;/th&gt;
&lt;th&gt;Key storage&lt;/th&gt;
&lt;th&gt;Decrypt gate&lt;/th&gt;
&lt;th&gt;Trust boundary&lt;/th&gt;
&lt;th&gt;Known public attack&lt;/th&gt;
&lt;th&gt;Status&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td&gt;Gen 1 (May 20, 2024)&lt;/td&gt;
&lt;td&gt;Software, filesystem ACL&lt;/td&gt;
&lt;td&gt;Logon&lt;/td&gt;
&lt;td&gt;Same user account&lt;/td&gt;
&lt;td&gt;TotalRecall, May 28, 2024 [@totalrecall-github]&lt;/td&gt;
&lt;td&gt;Withdrawn&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Gen 2 (Jun 7, 2024)&lt;/td&gt;
&lt;td&gt;Default-off, just-in-time decrypt&lt;/td&gt;
&lt;td&gt;Hello ESS&lt;/td&gt;
&lt;td&gt;Same user account&lt;/td&gt;
&lt;td&gt;Not shipped&lt;/td&gt;
&lt;td&gt;Withdrawn before June 18 [@recall-davuluri-jun7-2024]&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Gen 3 (Sept 27, 2024)&lt;/td&gt;
&lt;td&gt;TPM-bound, VBS Enclave [@recall-davuluri-sept27-2024]&lt;/td&gt;
&lt;td&gt;Hello ESS plus enclave attestation&lt;/td&gt;
&lt;td&gt;Enclave with attested identity&lt;/td&gt;
&lt;td&gt;TotalRecall Reloaded, April 2026 -- standard-user COM and DLL injection against AIXHost.exe [@itnews-totalrecall-reloaded]&lt;/td&gt;
&lt;td&gt;GA May 13, 2025 [@recall-manage-docs]&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;

Recall is *not* the first Microsoft product to ship on VBS Enclaves. SQL Server 2019 Always Encrypted with secure enclaves, generally available November 4, 2019, is the substrate precedent and used the same VTL1 trustlet pattern Recall inherits [@sql-always-encrypted-enclaves]. The correct narrow claim is that Recall is the first VBS-Enclave deployment in the *Windows desktop shell* to face sustained adversarial review by named external researchers.
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; Both the June 18, 2024 Copilot+ PC ship date and the October 1, 2024 broad-SKU 24H2 RTM date passed without Recall. Recall reached general availability on May 13, 2025 [@recall-manage-docs]. The &quot;24H2 launched with Recall&quot; framing repeated in secondary press is a marketing-cycle compression error; primary sources rule it out.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The April 2026 TotalRecall Reloaded disclosure closed the loop. Hagenah did not attack Recall&apos;s encryption, which he described as sound, or the VBS enclave, which he called &quot;rock solid.&quot; He attacked the &lt;code&gt;AIXHost.exe&lt;/code&gt; process that decrypts and renders the timeline for the user, using a standard-user COM and DLL injection chain. Microsoft determined that the technique &quot;operates within the current, documented security design of Recall&quot; [@itnews-totalrecall-reloaded]. The vault is solid; the delivery truck is, by design, not.&lt;/p&gt;
&lt;p&gt;Recall demonstrated that the AI-feature application plane is a third soft layer, distinct from both identity-token custody and third-party kernel drivers. But the most measurable failure of the era did not involve an AI feature, an attacker, or an exploit. It involved twenty bytes.&lt;/p&gt;
&lt;h3&gt;4.3 CrowdStrike and the road to WESP&lt;/h3&gt;
&lt;p&gt;The third thread is the load-bearing one. A non-malicious data-parsing bug in a third-party kernel driver -- no attacker involved -- bricked roughly &lt;a href=&quot;https://paragmali.com/blog/the-day-85-million-devices-couldnt-boot----and-how-microsoft/&quot; rel=&quot;noopener&quot;&gt;8.5 million Windows hosts&lt;/a&gt; because the OS layer had given that third-party vendor kernel privilege. This is the failure mode the 2006-2009 EU-engagement settlement never stress-tested.&lt;/p&gt;
&lt;p&gt;CrowdStrike&apos;s August 6, 2024 External Technical Root Cause Analysis names the mechanism precisely. Falcon ships two kinds of detection updates: signed Sensor Content shipped infrequently with the sensor itself, and Rapid Response Content shipped multiple times per day as data files interpreted by an in-kernel Content Interpreter. On July 19, 2024 at 04:09 UTC, CrowdStrike pushed Channel File 291, an IPC Template Instance file used by the Inter-Process Communication template type. The Content Interpreter expected 20 input parameters; the file provided 21. The mismatch produced an out-of-bounds memory read in &lt;code&gt;csagent.sys&lt;/code&gt;. The kernel page fault that followed was logged by Microsoft&apos;s own incident analysis at &lt;code&gt;nt!KiPageFault+0x369&lt;/code&gt; with a &lt;code&gt;csagent+0xe14ed&lt;/code&gt; faulting instruction address [@crowdstrike-rca-pdf] [@crowdstrike-exec-summary] [@ms-jul27-2024-security-tools].&lt;/p&gt;

CrowdStrike&apos;s term for the Rapid Response Content delivery unit -- a data file interpreted at runtime by the in-kernel Content Interpreter inside the Falcon sensor. Channel files are not driver binaries and do not go through KMCS; they configure the behavior of a driver that is already loaded [@crowdstrike-rca-pdf].

sequenceDiagram
    participant Cloud as CrowdStrike cloud
    participant Sensor as Falcon sensor (csagent.sys)
    participant CI as In-kernel Content Interpreter
    participant Kernel as NT kernel
    Cloud-&amp;gt;&amp;gt;Sensor: Push Channel File 291 (IPC Template Instance)
    Sensor-&amp;gt;&amp;gt;CI: Load 21 input parameters
    Note over CI: Expected 20 parameters, got 21
    CI-&amp;gt;&amp;gt;CI: Index past array bound
    CI-&amp;gt;&amp;gt;Kernel: OOB read at csagent+0xe14ed
    Kernel-&amp;gt;&amp;gt;Kernel: nt!KiPageFault+0x369
    Kernel-&amp;gt;&amp;gt;Sensor: BSOD across 8.5M hosts
&lt;p&gt;The scale was unambiguous. David Weston&apos;s July 20, 2024 post put the number at &quot;8.5 million Windows devices, or less than one percent of all Windows machines,&quot; and noted that the &quot;broad economic and societal impacts reflect the use of CrowdStrike by enterprises that run many critical services&quot; [@ms-weston-jul20-2024]. Delta Air Lines cancelled approximately 7,000 flights between July 19 and July 25 -- a figure the carrier&apos;s May 2025 lawsuit filings and contemporaneous reporting both anchor to [@wiki-crowdstrike-outage]. Parametrix estimated the direct losses to US Fortune 500 companies alone at roughly 5.4 billion dollars [@cso-hints-kernel].&lt;/p&gt;
&lt;p&gt;Microsoft&apos;s response over the next nineteen months was a paced institutional walk away from the 2006-2009 settlement, framed publicly as resilience rather than retreat. On September 10, 2024, Microsoft hosted the Windows Endpoint Security Summit at Redmond with eight MVI vendors in attendance [@ms-securityweek-wesp]. David Weston&apos;s September 12, 2024 post captured the framing: &quot;endpoint security vendors and government officials from the U.S. and Europe... strategies for improving resiliency and protecting our mutual customers&apos; critical infrastructure&quot; [@weston-sept12-2024-wess]. On November 19, 2024 at Ignite, Microsoft publicly named the Windows Resiliency Initiative [@thehackernews-crowdstrike-rca] [@ms-securityweek-wesp].&lt;/p&gt;
&lt;p&gt;On June 26, 2025, the Windows Experience blog made the load-bearing commitment that re-opened the kernel-residency question: &quot;Next month, we will deliver a private preview of the Windows endpoint security platform to a set of MVI partners. The new Windows capabilities will allow them to start building their solutions to run outside the Windows kernel. This means security products like anti-virus and endpoint protection solutions can run in user mode just as apps do&quot; [@wri-jun26-2025]. The private preview opened in July 2025 to Bitdefender, CrowdStrike, ESET, SentinelOne, Sophos, Trellix, Trend Micro, and WithSecure [@ms-securityweek-wesp] [@heise-resilient-windows].&lt;/p&gt;

The Windows-supplied user-mode API surface for endpoint security vendors announced at Microsoft Build 2025 and opened to MVI 3.0 partners in private preview in July 2025 [@wri-jun26-2025]. WESP separates kernel-resident event collection (owned by Windows) from vendor-owned policy evaluation (run in a tamper-protected user-mode service). It is the architectural answer to the failure mode CrowdStrike demonstrated -- a vendor data-parsing bug can no longer take the kernel down with it.
&lt;p&gt;In parallel, Microsoft began closing the legacy escape hatch. On March 26, 2026, Microsoft IT Pro group program manager Peter Waxman posted &quot;Advancing Windows driver security: Removing trust for the cross-signed driver program,&quot; announcing that the April 14, 2026 Windows security update would remove trust for the cross-signed driver program in evaluation mode on Windows 11 24H2, 25H2, 26H1, and Server 2025 [@techcommunity-cross-signing]. The April 14, 2026 driver-protection KB followed, blocking the &lt;code&gt;psmounterex.sys&lt;/code&gt; family as the first named exemplar [@april-2026-driver-kb]. Industry coverage framed the move as &quot;closing a 20-year-old critical security hole&quot; [@computerworld-cross-signing] [@techpowerup-cross-signing] [@cybersecuritynews-cross-signing]; the Custom Kernel Signers feature in Application Control for Business is the escape hatch Microsoft preserved for organizations that legitimately need to sign internal kernel drivers, with the Windows Hardware Compatibility Program as the canonical path [@custom-kernel-signers].&lt;/p&gt;

The legacy KMCS trust path, introduced in the early 2000s, that let third-party certificate authorities issue Windows-trusted code-signing certificates for kernel drivers. Because developers managed their own private keys, the program became a frequent target for credential theft and rootkit deployment [@cybersecuritynews-cross-signing]. The April 14, 2026 Windows update removes trust for cross-signed drivers in evaluation mode, leaving WHCP as the canonical submission path.
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; Microsoft has not publicly committed to a hard &quot;AV kernel-driver ban&quot; date. The April 2026 update is a driver-loading-policy change with a Code Integrity-anchored evaluation window (100 runtime hours plus 2 or 3 restarts before policy activates) [@techcommunity-cross-signing], not a categorical AV kernel-driver eviction. WHCP-certified kernel drivers continue to load. Conflating WESP with the Cross-Signing trust deprecation is a recurring citation-audit failure: they are separate primitives that are part of the same multi-year transition.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;If the OS layer kept hardening while the layer above became the soft spot, the AI agent layer is the youngest version of the same pattern -- and the era is producing its first CVE-grade exemplars in real time.&lt;/p&gt;
&lt;h3&gt;4.4 AI threat-model arrivals&lt;/h3&gt;
&lt;p&gt;The fourth thread is the youngest. By mid-2024 the &lt;a href=&quot;https://paragmali.com/blog/agentic-identity-on-windows-when-the-process-acting-on-your-/&quot; rel=&quot;noopener&quot;&gt;agentic-AI persistence catalog&lt;/a&gt; was beginning to populate in the CVE database, and Microsoft, Apple, Google, and Anthropic were converging on a structural admission: no existing operating-system primitive knows how to enforce policy on an AI agent&apos;s &lt;em&gt;judgment&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;The substrate arrived in pieces. May 20, 2024 brought the Copilot+ PC announcement and the NPU as a programmable local surface [@copilot-pcs-may-20]. June 10, 2024 brought Apple&apos;s Private Cloud Compute design paper, whose five core requirements -- stateless computation, enforceable guarantees, no privileged runtime access, non-targetability, and verifiable transparency -- now anchor every &quot;what would attested AI infrastructure look like&quot; conversation in the industry [@apple-pcc]. June 26, 2024 brought Microsoft&apos;s first public write-up of a multi-turn jailbreak class -- Skeleton Key, originally demonstrated by Mark Russinovich at Microsoft Build 2024Russinovich&apos;s stage demo called the technique &quot;Master Key&quot;; the MSRC blog renamed it &quot;Skeleton Key&quot; for public disclosure on June 26, 2024 [@ms-skeleton-key]. -- and the corresponding Prompt Shields mitigation in Azure AI Content Safety [@ms-skeleton-key] [@jailbreak-detection-shields]. August 8, 2024 brought Michael Bargury&apos;s Black Hat USA sessions &quot;15 Ways to Break Your Copilot&quot; and &quot;Living off Microsoft Copilot,&quot; where Bargury demonstrated SharePoint-RAG-grounded exfiltration chains and the LOLCopilot tool that used a victim&apos;s own Copilot to write spear-phishing email in the victim&apos;s writing style [@mbgsec-bargury-pdf] [@thurrott-bargury] [@theregister-bargury].&lt;/p&gt;
&lt;p&gt;The CVE catalog populated through 2025-2026. The single most consequential entry is &lt;strong&gt;EchoLeak (CVE-2025-32711)&lt;/strong&gt; -- a single-email, zero-click data-exfiltration chain against Microsoft 365 Copilot disclosed by Aim Labs in June 2025 [@aim-labs-echoleak] [@nvd-cve-32711]. SecurityWeek&apos;s reporting captures the structural achievement: &quot;In order to execute an EchoLeak attack, the attacker has to bypass several security mechanisms, including cross-prompt injection attack (XPIA) classifiers&quot; [@securityweek-echoleak]. Sentra&apos;s reconstruction enumerates the four bypasses: the XPIA classifier was evaded by phrasing the malicious instructions as if addressed to the human recipient; Copilot&apos;s link-redaction was circumvented with reference-style Markdown; the email client&apos;s automatic image pre-fetch was used to trigger an exfiltration request; and Microsoft Teams&apos; asynchronous preview API -- an allowed domain under Copilot&apos;s Content Security Policy -- was used to proxy the exfiltrated data to the attacker [@sentra-echoleak]. Microsoft classified the vulnerability &quot;critical&quot; with CVSS 9.3 and patched it server-side with no customer action required [@checkmarx-echoleak] [@securityweek-echoleak].&lt;/p&gt;

flowchart TD
    A[&quot;Attacker email lands in user inbox&quot;] --&amp;gt; B[&quot;XPIA classifier bypass via direct-to-user phrasing&quot;]
    B --&amp;gt; C[&quot;RAG retrieval pulls email into Copilot context&quot;]
    C --&amp;gt; D[&quot;Markdown reference-style link bypass of redaction&quot;]
    D --&amp;gt; E[&quot;Automatic image pre-fetch triggers exfiltration request&quot;]
    E --&amp;gt; F[&quot;Teams preview API as allowed CSP domain proxies data&quot;]
    F --&amp;gt; G[&quot;Attacker receives sensitive M365 content&quot;]

Per OWASP LLM01, the class of attacks in which adversary-controlled text fed into a large language model causes the model to take an action the system designer did not intend [@owasp-llm-top10]. Indirect prompt injection is the subclass in which the malicious text reaches the model through retrieved context (RAG, web fetch, email body) rather than the user&apos;s prompt directly. EchoLeak is the canonical indirect-prompt-injection chain against an LLM-application-layer agent.
&lt;p&gt;The catalog around EchoLeak is now substantial. &lt;strong&gt;PromptJacking&lt;/strong&gt; is Koi Security&apos;s collective name for three Anthropic Claude Desktop extension RCE vulnerabilities (Chrome, iMessage, and Apple Notes connectors) -- AppleScript injection from a maliciously crafted URL, rated CVSS 8.9 by Anthropic, fixed in version 0.1.9 in September 2025 [@koi-promptjacking] [@infosec-magazine-promptjacking]. &lt;strong&gt;ShadowPrompt&lt;/strong&gt;, disclosed by Koi Security on March 26, 2026, chained a wildcard origin allowlist (&lt;code&gt;*.claude.ai&lt;/code&gt;) in the Claude Chrome extension with a DOM-based XSS in an Arkose Labs CAPTCHA hosted on &lt;code&gt;a-cdn.claude.ai&lt;/code&gt; to let any website silently inject prompts; the extension had over 3 million users at the time of disclosure [@koi-shadowprompt]. &lt;strong&gt;CVE-2025-53773&lt;/strong&gt; -- &quot;ZombAIs&quot; -- is a GitHub Copilot RCE via prompt-injection-controlled writes to &lt;code&gt;.vscode/settings.json&lt;/code&gt; that enable &lt;code&gt;chat.tools.autoApprove&lt;/code&gt; (&quot;YOLO mode&quot;) and grant the agent unrestricted shell access [@nvd-cve-53773] [@cybersecuritynews-copilot-rce].&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;CVE or named class&lt;/th&gt;
&lt;th&gt;Affected agent&lt;/th&gt;
&lt;th&gt;Structural bound exploited&lt;/th&gt;
&lt;th&gt;Mitigation status&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td&gt;EchoLeak (CVE-2025-32711) [@nvd-cve-32711]&lt;/td&gt;
&lt;td&gt;Microsoft 365 Copilot&lt;/td&gt;
&lt;td&gt;LLM Scope Violation -- agent treats retrieved context as trusted&lt;/td&gt;
&lt;td&gt;Server-side patch June 2025 [@securityweek-echoleak]&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PromptJacking (CVSS 8.9) [@koi-promptjacking]&lt;/td&gt;
&lt;td&gt;Claude Desktop extensions&lt;/td&gt;
&lt;td&gt;Unsanitized AppleScript template interpolation&lt;/td&gt;
&lt;td&gt;Fixed in version 0.1.9 [@infosec-magazine-promptjacking]&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ShadowPrompt [@koi-shadowprompt]&lt;/td&gt;
&lt;td&gt;Claude Chrome extension&lt;/td&gt;
&lt;td&gt;Wildcard origin allowlist plus third-party CAPTCHA XSS&lt;/td&gt;
&lt;td&gt;Origin checks tightened in 1.0.41&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CVE-2025-53773 (ZombAIs) [@nvd-cve-53773]&lt;/td&gt;
&lt;td&gt;GitHub Copilot agent&lt;/td&gt;
&lt;td&gt;Agent writes own configuration; YOLO-mode toggle&lt;/td&gt;
&lt;td&gt;Patched [@cybersecuritynews-copilot-rce]&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Skeleton Key / Master Key [@ms-skeleton-key]&lt;/td&gt;
&lt;td&gt;Azure-managed LLMs&lt;/td&gt;
&lt;td&gt;Multi-turn safety-policy override&lt;/td&gt;
&lt;td&gt;Prompt Shields mitigation [@jailbreak-detection-shields]&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Living off Microsoft Copilot [@mbgsec-bargury-pdf]&lt;/td&gt;
&lt;td&gt;Microsoft 365 Copilot tenant&lt;/td&gt;
&lt;td&gt;RAG-grounded post-compromise abuse&lt;/td&gt;
&lt;td&gt;Phillip Misner: &quot;similar to other post-compromise techniques&quot; [@thurrott-bargury]&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;Aim Labs coined the phrase &quot;LLM Scope Violation&quot; for the EchoLeak chain. The vocabulary matters: the bug is not that the model failed a safety filter; it is that the model treated retrieved content as instruction. Anthropic&apos;s mid-2025 research note frames the structural caveat in similar terms: &quot;prompt injection is far from a solved problem, particularly as models take more real-world actions... every webpage an agent visits is a potential vector for attack&quot; [@anthropic-prompt-injection].&lt;/p&gt;

The taxonomies these CVEs are graded against are themselves new. OWASP published its Top 10 for Large Language Model Applications in 2023 and refreshed it in 2025 [@owasp-llm-top10]; NIST released the AI Risk Management Framework in January 2023 and the GenAI-specific Profile (AI 600-1) in July 2024 [@nist-ai-rmf] [@nist-ai-600-1]. Both treat prompt injection as a first-class class. Neither is a normative standard the way RFC 8725 is for JWTs.
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; The structural bound EchoLeak demonstrates is general: any LLM agent that reads adversary-controllable text and can take an action -- write, send, fetch, execute -- has the structural template. Composition (cage plus input filter plus output filter) reduces blast radius; it does not eliminate the class.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;If the AI agent&apos;s judgment is now a trust principal, the defensive arrivals across the era are the OS-layer hardening that the layer-above-the-OS soft spots are &lt;em&gt;contrasted against&lt;/em&gt;. The next subsection inventories them so the state-of-the-art section can evaluate the whole stack.&lt;/p&gt;
&lt;h3&gt;4.5 Defensive arrivals across the era&lt;/h3&gt;
&lt;p&gt;The fifth thread runs underneath the other four. While the layer above the OS was failing publicly, the OS layer itself kept hardening -- across hardware roots of trust, on-device confidentiality, identity-side enforcement, and the cryptographic substrate.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://paragmali.com/blog/pluton-a-tpm-on-silicon-microsoft-can-patch/&quot; rel=&quot;noopener&quot;&gt;Pluton&lt;/a&gt; expanded. The November 2020 Microsoft-AMD-Intel-Qualcomm joint announcement is the prior context, AMD Ryzen 6000 in 2022 was the first PC-class shipment, and Intel Core Ultra Series 2 (Lunar Lake, GA September 24, 2024) brought Pluton-as-Partner-Security-Engine to mainstream Intel mobile silicon [@pluton-docs]. Microsoft moved Pluton firmware servicing to the OS update channel, decoupling security-critical TPM-and-RoT updates from OEM BIOS-release cadences. &lt;a href=&quot;https://paragmali.com/blog/beyond-bitlocker-the-three-file-level-encryption-layers-micr/&quot; rel=&quot;noopener&quot;&gt;Personal Data Encryption&lt;/a&gt; -- the per-user, per-file successor to EFS that uses Windows Hello to derive the file-encryption key -- shipped as a default-on option on Windows 11 24H2. Continuous Access Evaluation became the default revocation primitive for Microsoft 365 services, providing roughly 3-minute token-revocation latency in place of the prior cache-bound model [@cae-docs] [@openid-sse].&lt;/p&gt;
&lt;p&gt;The cryptographic substrate finalized. On August 13, 2024, NIST published FIPS 203 (&lt;a href=&quot;https://paragmali.com/blog/post-quantum-cryptography-on-windows-the-thirty-year-migrati/&quot; rel=&quot;noopener&quot;&gt;ML-KEM&lt;/a&gt;, the Module-Lattice-Based Key Encapsulation Mechanism standard) [@fips-203], FIPS 204 (ML-DSA, the Module-Lattice-Based Digital Signature standard) [@fips-204], and FIPS 205 (SLH-DSA, the Stateless Hash-Based Digital Signature standard) [@fips-205], with the Federal Register notice following on August 14, 2024 [@federal-register-pq].&lt;/p&gt;

The three NIST-standardized post-quantum primitives finalized August 13, 2024. ML-KEM (FIPS 203) is the lattice-based key encapsulation mechanism; ML-DSA (FIPS 204) is the lattice-based digital signature standard; SLH-DSA (FIPS 205) is the hash-based signature standard that hedges against future lattice-attack discoveries [@fips-203] [@fips-204] [@fips-205]. NIST chose three families precisely because no single family has both the security-margin and the performance properties needed for every Windows surface.
&lt;p&gt;Microsoft&apos;s SymCrypt cryptographic library shipped ML-KEM and ML-DSA implementations; SChannel began previewing TLS 1.3 with ML-KEM hybrid key exchange; DPAPI-NG envelope-key migration to ML-KEM is in research; Kerberos post-quantum migration is named in the SFI April 2025 progress report as a multi-year program [@sfi-apr-2025]. The eight Windows AI updates published in coordination on April 25, 2025 captured the parallel: responsible AI commitments, Phi Silica multimodal, and Copilot+ PC AI features shipped together as a single coordinated public moment [@blogs-windows-apr25-2025].&lt;/p&gt;
&lt;p&gt;FIPS 206 -- the FN-DSA standard derived from FALCON -- remains in draft as of May 2026; the URL &lt;code&gt;csrc.nist.gov/pubs/fips/206/ipd&lt;/code&gt; returns HTTP 404 because NIST has not published an Initial Public Draft. Anyone needing a current status should look at the NIST Post-Quantum Cryptography project page rather than the per-FIPS page.&lt;/p&gt;
&lt;p&gt;The defensive arrivals are real and substantial. They do not change the article&apos;s thesis -- they harden the OS layer (Pluton, VBS, PDE, Driver Block List) and the cryptographic substrate (PQC). The thesis is about what happens &lt;em&gt;above&lt;/em&gt; the OS layer.&lt;/p&gt;
&lt;p&gt;Five threads. One inflection. The question the next section must answer: what architectural insight ties them together?&lt;/p&gt;
&lt;h2&gt;5. The Insight&lt;/h2&gt;
&lt;p&gt;Three insights define the era. The article&apos;s thesis is the first; the other two are the context that makes the first ring true. All three must be named because the era&apos;s actual insight is that all three are true simultaneously and reinforce each other.&lt;/p&gt;
&lt;h3&gt;The third-party kernel privilege insight&lt;/h3&gt;
&lt;p&gt;The first insight is the article&apos;s thesis. The CrowdStrike outage refuted the 2006-2009 EU-engagement assumption that AV and EDR vendors &lt;em&gt;needed&lt;/em&gt; kernel access to be effective by demonstrating a failure mode the argument did not address: a non-malicious data-parsing bug inside a privileged third-party kernel driver, no attacker involved, 8.5 million hosts offline, roughly 5.4 billion dollars in Parametrix-estimated direct losses to US Fortune 500 [@ms-weston-jul20-2024] [@cso-hints-kernel] [@crowdstrike-rca-pdf]. The Windows Endpoint Security Platform is the architectural answer: a sanctioned user-mode EDR API surface (tamper-protected, performance-equivalent target, MVI-3.0-gated) co-engineered with the major AV vendors [@wri-jun26-2025]. The April 14, 2026 Cross-Signing Program trust deprecation closes the legacy escape hatch [@techcommunity-cross-signing]. Together, they are a quiet admission that the 25-year settlement was a compromise the era&apos;s evidence has now made unsustainable.&lt;/p&gt;

flowchart TD
    subgraph Kernel [&quot;Kernel (OS-owned)&quot;]
        K1[&quot;ETW providers&quot;] --&amp;gt; K2[&quot;Event broker&quot;]
        K3[&quot;Process and file telemetry&quot;] --&amp;gt; K2
    end
    K2 --&amp;gt; U1[&quot;Tamper-protected user-mode service&quot;]
    subgraph User [&quot;User mode (vendor-owned)&quot;]
        U1 --&amp;gt; U2[&quot;Vendor detection logic&quot;]
        U2 --&amp;gt; U3[&quot;Vendor action API call&quot;]
    end
    U3 --&amp;gt; Kernel
    L[&quot;Vendor channel-file or model update&quot;] --&amp;gt; U2
&lt;h3&gt;The institution-is-the-boundary insight&lt;/h3&gt;
&lt;p&gt;The second insight is what Storm-0558 plus the CSRB verdict prove together: the &lt;em&gt;vendor&apos;s internal security culture&lt;/em&gt; is part of the platform&apos;s attack surface for every downstream customer. The unrotated 2016 MSA signing key was not a bug; it was a decision (or a default) made inside Microsoft about how long signing keys lived and how they were stored. The missing OWA issuer-validation check was not a bug; it was an architectural assumption developers made about which libraries handled which validation steps. The Secure Future Initiative is the first time a platform vendor has publicly bet executive compensation and the cross-progress-report engineering commitments enumerated in §4.1 on this insight at the corporate level [@sfi-sept-2024] [@sfi-apr-2025] [@sfi-nov-2025-windows].&lt;/p&gt;
&lt;h3&gt;The AI agent is a new trust principal insight&lt;/h3&gt;
&lt;p&gt;The third insight is what the Recall saga is the first widely public worked example of. An AI feature whose threat model is &lt;em&gt;not&lt;/em&gt; covered by AppContainer, VBS, TPM, or DPAPI alone forced Microsoft to invent a new pattern: VBS Enclave plus Windows Hello ESS gating plus TPM-rooted device key plus in-enclave content filtering, with explicit acknowledgement that the UI plane that decrypts content for display is, by Microsoft&apos;s own Security Servicing Criteria, not a security boundary [@recall-davuluri-sept27-2024] [@msrc-servicing-criteria] [@hello-ess-docs] [@vbs-enclaves-docs]. The April 2026 TotalRecall Reloaded disclosure proves the boundary holds at the vault and breaks at the delivery truck, exactly as the September 2024 design predicted it would [@itnews-totalrecall-reloaded]. The agentic-AI CVE catalog -- EchoLeak, PromptJacking, ShadowPrompt, ZombAIs -- shows the broader version of the same pattern: existing primitives can sandbox the agent&apos;s &lt;em&gt;process&lt;/em&gt; and protect its &lt;em&gt;data&lt;/em&gt;; none of them knows how to enforce policy on the agent&apos;s &lt;em&gt;decisions&lt;/em&gt;.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Key idea:&lt;/strong&gt; The three insights are not separable. The institutional failure (Storm-0558), the kernel-architectural failure (CrowdStrike), and the AI-trust-model failure (Recall and the EchoLeak class) are one architectural inflection seen from three angles: the layer above the OS has become the soft layer, and the OS-layer primitives Microsoft spent 25 years building do not extend upward into it. WESP, SFI, and the Recall Generation-3 architecture are Microsoft&apos;s first sustained engineering re-architecture of all three soft spots in parallel.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The thesis foregrounds the third-party kernel privilege insight because CrowdStrike is the single most measurable evidence -- the §4.3 numbers above, plus the Delta cancellations and the April 14, 2026 Cross-Signing trust deprecation. The other two are the context that explains &lt;em&gt;why&lt;/em&gt; the layer above the OS is now the soft layer in multiple different ways.&lt;/p&gt;
&lt;p&gt;If those three insights are right, what does the actual production deployment picture look like in May 2026? Six surfaces. The next section walks each one.&lt;/p&gt;
&lt;h2&gt;6. State of the Art, May 2026&lt;/h2&gt;
&lt;p&gt;May 2026 is the first calendar window in which all three soft-layer responses are simultaneously visible in production deployment, sanctioned private preview, or public roadmap. Six surfaces have to be evaluated together.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Identity.&lt;/strong&gt; MSA and Entra ID signing keys live in hardware-backed security modules with automatic rotation [@azure-managed-hsm]; the MSA signing service runs in Azure Confidential VMs and Entra ID signing service migration is in progress [@sfi-apr-2025] [@azure-confidential-vm]. Microsoft&apos;s April 2025 progress report states that 90% of Entra ID tokens for Microsoft&apos;s own apps validate through the hardened identity SDK [@sfi-apr-2025]. Continuous Access Evaluation is the default revocation primitive for Microsoft 365 [@cae-docs]. Kerberos and SChannel post-quantum migration roadmaps are public; ML-DSA code-signing is in research.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Endpoint.&lt;/strong&gt; Windows 11 24H2 RTM&apos;d on October 1, 2024 for broad SKUs (Copilot+ PCs reached the same RTM on June 18, 2024, without Recall) [@copilot-pcs-may-20]. Windows 11 25H2 is in market. Windows 10 went end-of-life on October 14, 2025 [@ms-windows10-lifecycle]. Smart App Control ships default-on for new installs; Personal Data Encryption is generally available; Application Security Reduction rules cover AI-feature exclusions; Recall is GA on Snapdragon, AMD, and Intel Copilot+ silicon [@recall-manage-docs].&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Antivirus and EDR.&lt;/strong&gt; The Windows Endpoint Security Platform is in MVI 3.0 private preview as of July 2025 with Bitdefender, CrowdStrike, ESET, SentinelOne, Sophos, Trellix, Trend Micro, and WithSecure participating [@ms-securityweek-wesp] [@wri-jun26-2025]. Defender is already user-mode-capable. The April 14, 2026 Windows security update has begun the Cross-Signing Program trust deprecation in evaluation mode with the 100-runtime-hour and 2-or-3-restart criteria; WHCP-only enforcement is opt-in [@techcommunity-cross-signing] [@april-2026-driver-kb].&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;On-device AI.&lt;/strong&gt; Recall Generation-3 is the worked example of the VBS Enclave plus TPM-rooted plus Windows Hello ESS gating pattern [@recall-davuluri-sept27-2024]. Copilot Vision and the on-device agent surface inherit the same template. Azure AI Content Safety Prompt Shields are the input-filter substrate for prompt-injection mitigation [@jailbreak-detection-shields]. OWASP LLM Top 10 [@owasp-llm-top10] and NIST AI RMF [@nist-ai-rmf] [@nist-ai-600-1] are the threat-class taxonomies.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Hardware.&lt;/strong&gt; Pluton is across all three major x86 vendors plus Snapdragon: AMD Ryzen 6000+; Intel Core Ultra Series 2 and Series 3 with Partner Security Engine; Qualcomm Snapdragon 8cx Gen 3 and X Series [@pluton-docs]. Pluton firmware on 2024+ AMD and Intel ships through the OS update servicing channel. Per the November 2025 SFI report, Surface UEFI firmware and Windows drivers are being rewritten in Rust [@sfi-nov-2025-windows].&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Cryptography.&lt;/strong&gt; SymCrypt-OpenSSL ships with ML-KEM and ML-DSA. TLS 1.3 with ML-KEM hybrid key exchange is in SChannel preview. DPAPI-NG envelope-key migration to ML-KEM is in research [@sfi-apr-2025] [@fips-203] [@fips-204].&lt;/p&gt;
&lt;h3&gt;Cross-platform comparison&lt;/h3&gt;
&lt;p&gt;The state of the art is plural. Apple has shipped a user-mode Endpoint Security Framework since macOS 10.15 in October 2019 [@apple-esf-docs]; the Windows transition is catching up to an existing platform precedent rather than inventing the architecture. For cloud-attested AI confidentiality, Apple Private Cloud Compute is the published reference design [@apple-pcc]. For kernel-resident EDR with constrained programmability, the Linux eBPF route -- Falco and Tetragon -- is a credible third option [@falco-docs] [@tetragon-docs]. Microsoft maintains an &lt;code&gt;eBPF for Windows&lt;/code&gt; project that targets networking-class use cases, not EDR-class collection, so eBPF is not a third Windows option as of May 2026 [@ms-ebpf-for-windows].&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Surface&lt;/th&gt;
&lt;th&gt;Microsoft 2026 position&lt;/th&gt;
&lt;th&gt;Apple peer&lt;/th&gt;
&lt;th&gt;Linux peer&lt;/th&gt;
&lt;th&gt;Status&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td&gt;Identity-token custody&lt;/td&gt;
&lt;td&gt;Managed HSM + Confidential VMs [@azure-managed-hsm]&lt;/td&gt;
&lt;td&gt;iCloud Keychain, ADP&lt;/td&gt;
&lt;td&gt;AWS CloudHSM [@aws-cloud-hsm]&lt;/td&gt;
&lt;td&gt;Live, post-Storm-0558&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;EDR architecture&lt;/td&gt;
&lt;td&gt;WESP user-mode, MVI 3.0 private preview [@wri-jun26-2025]&lt;/td&gt;
&lt;td&gt;ESF, GA since macOS 10.15 [@apple-esf-docs]&lt;/td&gt;
&lt;td&gt;eBPF: Falco, Tetragon [@falco-docs] [@tetragon-docs]&lt;/td&gt;
&lt;td&gt;Private preview&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;On-device AI confidentiality&lt;/td&gt;
&lt;td&gt;Recall: VBS Enclave + TPM + Hello ESS [@recall-davuluri-sept27-2024]&lt;/td&gt;
&lt;td&gt;On-device Apple Intelligence&lt;/td&gt;
&lt;td&gt;None equivalent&lt;/td&gt;
&lt;td&gt;GA May 2025&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cloud-attested AI&lt;/td&gt;
&lt;td&gt;M365 Copilot tenant boundary; Confidential Inferencing roadmap&lt;/td&gt;
&lt;td&gt;Private Cloud Compute [@apple-pcc]&lt;/td&gt;
&lt;td&gt;None equivalent&lt;/td&gt;
&lt;td&gt;Apple ahead&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Hardware RoT&lt;/td&gt;
&lt;td&gt;Pluton (AMD, Intel, Qualcomm) [@pluton-docs]&lt;/td&gt;
&lt;td&gt;Secure Enclave Processor&lt;/td&gt;
&lt;td&gt;Various (Google Titan, AWS Nitro)&lt;/td&gt;
&lt;td&gt;Pluton ahead on PC&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Post-quantum&lt;/td&gt;
&lt;td&gt;SymCrypt ML-KEM, ML-DSA; TLS preview [@fips-203] [@fips-204]&lt;/td&gt;
&lt;td&gt;CryptoKit ML-KEM, iMessage PQ3&lt;/td&gt;
&lt;td&gt;Liboqs, OpenSSL providers&lt;/td&gt;
&lt;td&gt;Industry parity&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;Falco&apos;s &lt;em&gt;ADOPTERS.md&lt;/em&gt; lists Booz Allen Hamilton, Frame.io, GitLab, MathWorks, Secureworks, Skyscanner, Sumo Logic, and Shopify as production adopters as of May 2026 [@falco-adopters]. Earlier write-ups frequently named Google, Netflix, and Pinterest; that list is incorrect against the current file.&lt;/p&gt;
&lt;p&gt;Microsoft&apos;s distinctive bet is the institution-plus-kernel-architecture-plus-AI-trust-model triple. No peer matches at all three layers simultaneously. Apple has the cleanest user-mode EDR story and the cleanest cloud-attested AI story; it does not have a public equivalent to SFI&apos;s institutional commitments at the corporate-governance level. Linux has the most flexible kernel-residency-with-constrained-programmability story for EDR; it has no equivalent to the Recall-style on-device AI feature plane because no Linux desktop ships such a feature at scale.&lt;/p&gt;
&lt;p&gt;The state of the art is plural. Three real and live disagreements remain unresolved as of May 2026, and they sit at the heart of where the field goes next.&lt;/p&gt;
&lt;h2&gt;7. Competing Approaches&lt;/h2&gt;
&lt;p&gt;Three real and live disagreements as of May 2026. The article&apos;s thesis takes a position on the first; the other two are honestly named as open.&lt;/p&gt;
&lt;h3&gt;Inside the kernel or outside&lt;/h3&gt;
&lt;p&gt;The first disagreement sits at the heart of the article&apos;s thesis. Microsoft and Apple converge on outside-the-kernel as the strategic answer -- WESP on the Windows side [@wri-jun26-2025], the Endpoint Security Framework on the macOS side, generally available since October 2019 [@apple-esf-docs]. Linux&apos;s eBPF-based EDR architectures are a third option that combines kernel-residency with constrained programmability -- the eBPF verifier rejects programs that can crash the kernel before they load [@falco-docs] [@tetragon-docs]. CrowdStrike, SentinelOne, and Sophos all have public commitments to the WESP user-mode path while continuing to ship kernel components during the transition [@ms-securityweek-wesp].&lt;/p&gt;
&lt;p&gt;The trade-offs are honest. In-kernel sees more, runs faster on the hot paths, and can intervene at lower latency. User-mode cannot crash the OS, can be sandboxed, and trades blast radius for visibility. eBPF tries to take both: kernel-residency speed plus a static verifier that bounds what the program can do.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Architecture&lt;/th&gt;
&lt;th&gt;Visibility&lt;/th&gt;
&lt;th&gt;Blast radius&lt;/th&gt;
&lt;th&gt;Latency&lt;/th&gt;
&lt;th&gt;Attestation&lt;/th&gt;
&lt;th&gt;Deployment status&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td&gt;Legacy in-kernel third-party&lt;/td&gt;
&lt;td&gt;Highest&lt;/td&gt;
&lt;td&gt;Whole OS BSOD risk (CrowdStrike-class)&lt;/td&gt;
&lt;td&gt;Lowest&lt;/td&gt;
&lt;td&gt;KMCS + WHCP&lt;/td&gt;
&lt;td&gt;Default through April 2026; cross-signing trust deprecated [@techcommunity-cross-signing]&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;WESP user-mode (Windows)&lt;/td&gt;
&lt;td&gt;High via OS-provided ETW + brokers [@wri-jun26-2025]&lt;/td&gt;
&lt;td&gt;User-mode service restart&lt;/td&gt;
&lt;td&gt;Higher than kernel-mode&lt;/td&gt;
&lt;td&gt;OS-attested user-mode service&lt;/td&gt;
&lt;td&gt;MVI 3.0 private preview [@ms-securityweek-wesp]&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Apple ESF (macOS)&lt;/td&gt;
&lt;td&gt;High via system extensions [@apple-esf-docs]&lt;/td&gt;
&lt;td&gt;User-mode extension only&lt;/td&gt;
&lt;td&gt;Higher than kernel-mode&lt;/td&gt;
&lt;td&gt;macOS notarization&lt;/td&gt;
&lt;td&gt;GA since 10.15&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;eBPF (Linux: Falco, Tetragon) [@falco-docs] [@tetragon-docs]&lt;/td&gt;
&lt;td&gt;High; in-kernel programs&lt;/td&gt;
&lt;td&gt;Verifier-bounded; cannot crash kernel&lt;/td&gt;
&lt;td&gt;Near kernel-mode&lt;/td&gt;
&lt;td&gt;None standardized&lt;/td&gt;
&lt;td&gt;Production at Booz Allen, GitLab, MathWorks [@falco-adopters]&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;The article&apos;s thesis takes the position that the CrowdStrike proof case has settled the trade-off in favor of out-of-kernel for the general AV and EDR class. The lingering question is whether eBPF-style constrained programmability is a viable third option in the Windows lineage. Microsoft&apos;s &lt;code&gt;eBPF for Windows&lt;/code&gt; repository targets networking, not EDR collection [@ms-ebpf-for-windows]; nothing in the public roadmap suggests that changes before Part 7.&lt;/p&gt;
&lt;h3&gt;Hardware-rooted on-device or cloud-attested&lt;/h3&gt;
&lt;p&gt;The second disagreement sits at the boundary of confidential computing and AI inference. Apple&apos;s Private Cloud Compute bets that the heavy AI inference belongs in attested confidential-VM cloud nodes -- five core requirements (stateless computation, enforceable guarantees, no privileged runtime access, non-targetability, verifiable transparency) [@apple-pcc]. Microsoft (Recall, Copilot+ on-device inference) and Google bet on hardware-rooted on-device enclaves; the Recall Generation-3 architecture is the worked Windows example [@recall-davuluri-sept27-2024]. The trade-offs are latency, privacy-by-non-transmission, the hardware-attestation surface, and the harder question of what happens when the model itself becomes sensitive intellectual property the device must protect from the device&apos;s own owner.&lt;/p&gt;
&lt;h3&gt;Whether the AI trust boundary can be formalized at all&lt;/h3&gt;
&lt;p&gt;The third disagreement is the hardest. Anthropic&apos;s published prompt-injection research note acknowledges directly that prompt injection is &quot;far from a solved problem&quot; and that &quot;every webpage an agent visits is a potential vector for attack&quot; [@anthropic-prompt-injection] [@anthropic-claude-chrome]. The structural question is whether the AI-agent-as-trust-principal model can be made architecturally safe at all, or whether the only durable answer is to keep the agent in a strict permission cage along the lines of the iOS App Sandbox model or Win32 App Isolation [@app-isolation]. The article must name this disagreement as live, not pretend it is resolved.&lt;/p&gt;
&lt;p&gt;Microsoft&apos;s &lt;code&gt;eBPF for Windows&lt;/code&gt; repository describes itself as a work in progress to bring existing eBPF toolchains and APIs from the Linux community to Windows [@ms-ebpf-for-windows]. As of May 2026 the project targets networking use cases. It is not yet a Windows-side answer to Falco or Tetragon.&lt;/p&gt;
&lt;p&gt;Some bounds in the era are honest disagreements; others are mathematical. The next section walks the limits that &lt;em&gt;cannot&lt;/em&gt; be argued away.&lt;/p&gt;
&lt;h2&gt;8. Theoretical Limits&lt;/h2&gt;
&lt;p&gt;Some of the era&apos;s bounds are not engineering deficits. They are mathematical, physical, or structural -- and naming them honestly is the only way to evaluate the era&apos;s architecture without sliding into apologist framing.&lt;/p&gt;
&lt;h3&gt;The Forshaw bound on Recall&lt;/h3&gt;
&lt;p&gt;James Forshaw&apos;s June 3, 2024 post named a bound that the April 2026 TotalRecall Reloaded disclosure confirmed empirically: any privilege escalation, or any non-security boundary, is sufficient to leak Recall&apos;s data because the user account that owns the data is also the principal that runs the AI feature that decrypts it [@forshaw-acl-jun3-2024]. The Generation-3 architecture pushes the &lt;em&gt;key&lt;/em&gt; into a VBS Enclave bound to a TPM-released device key gated by Windows Hello ESS [@recall-davuluri-sept27-2024]; what it cannot do is hide the &lt;em&gt;decrypted plaintext&lt;/em&gt; from the AI host process that has to render it. Microsoft&apos;s own Security Servicing Criteria treats same-user post-authentication as not a security boundary [@msrc-servicing-criteria]. TotalRecall Reloaded attacked exactly that delivery-truck process -- the &lt;code&gt;AIXHost.exe&lt;/code&gt; renderer -- and Microsoft determined the technique &quot;operates within the current, documented security design of Recall&quot; [@itnews-totalrecall-reloaded]. The §4.2 vault-and-delivery-truck framing is the empirical anchor for the Forshaw bound&apos;s general form.&lt;/p&gt;
&lt;h3&gt;The trusted-insider-with-physical-access bound on hardware enclaves&lt;/h3&gt;
&lt;p&gt;No hardware-rooted on-device confidentiality survives the device-physically-compromised attacker over a long enough adversarial window. Pluton, Hello ESS, and VBS Enclaves all raise the cost of attack; they do not eliminate it. The architectural goal is to make the attack expensive enough that mass-scale attacks become uneconomical, not to prove that no attack exists.&lt;/p&gt;
&lt;h3&gt;The 4096-byte problem in post-quantum signatures&lt;/h3&gt;
&lt;p&gt;NIST standardized three post-quantum signature families precisely because no single family has both the security-margin and the performance properties needed for every Windows surface. ML-KEM (FIPS 203) is fast but lattice-only [@fips-203]. SLH-DSA (FIPS 205) is hash-based and hedges against future lattice attacks at the cost of signatures large enough to be impractical for many surfaces [@fips-205]. ML-DSA (FIPS 204) is the workhorse but inherits the lattice-attack-class uncertainty SLH-DSA is meant to hedge against [@fips-204].&lt;/p&gt;
&lt;p&gt;The hardware bound is concrete. Per FIPS 204 final, ML-DSA-44 produces 2,420-byte signatures, ML-DSA-65 produces 3,309-byte signatures, and ML-DSA-87 produces 4,627-byte signatures [@fips-204-pdf] [@encryptionconsulting-fips204]. The TPM 2.0 Library Specification sets the default command and response buffer at 4,096 bytes (&lt;code&gt;TPM2_MAX_COMMAND_SIZE&lt;/code&gt; and &lt;code&gt;TPM2_MAX_RESPONSE_SIZE&lt;/code&gt; in the Implementation-Dependent Constants table) [@tcg-tpm2-spec] [@tpm2-tss-types]. The arithmetic is unforgiving: $$2{,}420 &amp;lt; 3{,}309 &amp;lt; 4{,}096 &amp;lt; 4{,}627$$ ML-DSA-44 and ML-DSA-65 fit in a default TPM 2.0 buffer; ML-DSA-87 does not. Any Windows surface that wants TPM-resident ML-DSA-87 signing has to either negotiate larger buffer sizes (vendor-specific) or settle for the smaller parameter set and accept a lower classical-security margin.&lt;/p&gt;
&lt;p&gt;The previous iteration of this article reported ML-DSA byte sizes as 2,420 (correctly for ML-DSA-44 but mis-labeled for ML-DSA-65) and 4,595 (incorrectly for ML-DSA-87). The corrected sizes from FIPS 204 Appendix B and the EncryptionConsulting cross-attestation are 2,420 / 3,309 / 4,627 [@fips-204-pdf] [@encryptionconsulting-fips204]. The load-bearing inequality -- ML-DSA-65 fits, ML-DSA-87 does not -- survives the correction.&lt;/p&gt;
&lt;h3&gt;The AI-agent-judgment bound&lt;/h3&gt;
&lt;p&gt;No existing formal-verification framework knows how to prove safety properties about an AI agent&apos;s decision process. The boundary is, by construction, statistical -- and statistical security boundaries are a new thing in the Windows lineage. The composition Microsoft uses today (Win32 App Isolation as the cage [@app-isolation], Prompt Shields as the input filter [@jailbreak-detection-shields], Groundedness Detection and Task Adherence as the output filter, OS-attested enclaves where confidentiality matters) reduces blast radius. It does not eliminate the class. This is the era&apos;s defining open theoretical question.&lt;/p&gt;
&lt;h3&gt;The Rice&apos;s Theorem bound on driver validation&lt;/h3&gt;
&lt;p&gt;Even WESP cannot guarantee that no future user-mode EDR component will introduce a Channel-File-291-class failure. Rice&apos;s Theorem says that no general decision procedure exists for non-trivial semantic properties of arbitrary programs; the WESP architectural fix is blast-radius reduction (kernel-mode crash becomes user-mode service restart), not defect elimination. Naming this honestly avoids the apologist failure mode in which WESP gets framed as a solution rather than a mitigation.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; WESP changes the &lt;em&gt;consequence&lt;/em&gt; of a vendor data-parsing bug from a kernel BSOD into a user-mode service restart. It does not prevent the bug. The right comparison is not &quot;the bug never happens&quot; but &quot;when the bug happens, what is the blast radius.&quot; The CrowdStrike Channel File 291 defect in a WESP-architected world is a vendor process that exits and restarts -- the host stays up.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Some of these limits will be relaxed by future engineering; others will not. The next section asks which are live research and which are accepted physical bounds.&lt;/p&gt;
&lt;h2&gt;9. Open Problems&lt;/h2&gt;
&lt;p&gt;Where active research and engineering is happening as of May 2026 -- and where the thesis&apos;s open forward questions live.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Whether the user-mode EDR API surface is empirically sufficient for the AV and EDR class.&lt;/strong&gt; WESP is in private preview as of May 2026 [@wri-jun26-2025]. Whether it can match in-kernel EDR for the BYOVD and rootkit attack class is not yet empirically settled. This is the load-bearing open question for the article&apos;s thesis. If WESP cannot deliver visibility-equivalent-to-kernel for the rootkit class, the third-party-AV-in-kernel model has not actually ended -- it has only been administratively constrained. The MVI 3.0 private preview cohort is the empirical test bed; the first public benchmark write-ups should arrive in 2026-2027.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Production deployment of post-quantum identity-token signing.&lt;/strong&gt; Kerberos PKINIT, OAuth-token JWS, SAML XMLDSig -- Apple, Google, and Microsoft all have public roadmaps; none has shipped at production scale to consumer endpoints as of May 2026. Microsoft&apos;s SFI April 2025 progress report names Kerberos PQ migration as a multi-year program [@sfi-apr-2025]; the FIPS 203/204/205 finals from August 13, 2024 are the gating standards [@fips-203] [@fips-204] [@fips-205] [@federal-register-pq].&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The agentic-AI persistence attack class.&lt;/strong&gt; The CVE catalog is beginning to populate (EchoLeak [@nvd-cve-32711], PromptJacking [@koi-promptjacking], ShadowPrompt [@koi-shadowprompt], ZombAIs [@nvd-cve-53773], the Bargury chain [@mbgsec-bargury-pdf]). Microsoft&apos;s response surface is Win32 App Isolation expansion plus Edge AI Browser sandboxing plus Prompt Shields plus Distinct Agent Accounts (announced in the November 18, 2025 roadmap post) [@nov18-2025-preparing-next] [@app-isolation] [@jailbreak-detection-shields]. An OS-level &quot;policy on AI agent judgment&quot; primitive is not yet visible in production.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Whether SFI&apos;s cultural change compounds.&lt;/strong&gt; The April 2025 and November 2025 progress reports quantify improvement on the identity-token and signing-key axes [@sfi-apr-2025] [@sfi-nov-2025-windows]. Whether the same compounding occurs on the supply-chain, third-party-dependency, and human-OPSEC axes is the next progress report&apos;s load-bearing claim. The Hotpatch metric (81% of enrolled devices compliant within 24 hours of Patch Tuesday) [@sfi-nov-2025-windows] is the most measurable single indicator.&lt;/p&gt;
&lt;p&gt;The OpenID Foundation Shared Signals Framework is the cross-vendor standardization vehicle for Continuous Access Evaluation equivalents [@openid-sse]; production-grade CAE-equivalent deployments outside the Microsoft 365 boundary are a 2026-2027 open problem.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Whether the Pluton-vs-discrete-TPM bifurcation gets settled.&lt;/strong&gt; As of May 2026, Dell, Lenovo, and HP still have public reservations about Pluton-as-TPM on enterprise SKUs; the Pluton-as-TPM configurability flag is the live compromise [@pluton-docs]. The default behavior varies by OEM and SKU.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The forward question.&lt;/strong&gt; Does the WESP rollout land in time for the 2026 ransomware wave? If WESP private preview hardens into GA before the next CrowdStrike-class incident -- malicious or not -- then the institutional response has matched the threat timeline. If it does not, the era&apos;s open question becomes the opening question of Part 7.&lt;/p&gt;
&lt;p&gt;If those are the open problems, the question for a working practitioner is: what should you actually do today? The next section answers per surface.&lt;/p&gt;
&lt;h2&gt;10. Practical Guide&lt;/h2&gt;
&lt;p&gt;What a Windows platform security practitioner should be doing today, per surface. The thesis is the architectural diagnosis; this section is the operational prescription.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Identity.&lt;/strong&gt; Move your workloads to the hardened identity SDK; require Continuous Access Evaluation on Conditional Access policies; rotate any unrotated long-lived signing keys; verify your tenant&apos;s Entra ID and MSA flow is on the post-SFI signing-key infrastructure [@sfi-apr-2025] [@cae-docs].&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Endpoint.&lt;/strong&gt; Default-on Smart App Control on new builds; enable Personal Data Encryption for user-folder protection; deploy Application Security Reduction rules including the AI-feature exclusions; track WESP private-preview availability if you ship an antivirus or EDR product [@wri-jun26-2025].&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;AV and EDR.&lt;/strong&gt; If you operate a Windows fleet, audit your kernel-driver dependency surface against the April 2026 vulnerable-driver-blocking list (the &lt;code&gt;psmounterex.sys&lt;/code&gt; family is the named exemplar) [@april-2026-driver-kb] [@driver-block-rules]; verify your AV or EDR vendor has a WESP transition roadmap and an MVI 3.0 commitment [@ms-securityweek-wesp]; budget for a 12-to-24-month transition from kernel-mode to user-mode EDR; instrument Event ID 3077 in the Code Integrity log for blocked-driver visibility [@techcommunity-cross-signing].&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;AI features.&lt;/strong&gt; Default-off the AI features that store user content (Recall, Copilot Vision history) until you have an enterprise policy; use the Intune Settings Catalog policies for Recall (&lt;code&gt;AllowRecallEnablement&lt;/code&gt;, &lt;code&gt;DisableAIDataAnalysis&lt;/code&gt;) [@recall-manage-docs]; evaluate prompt-injection exposure for every browser-integrated and Office-integrated AI agent [@anthropic-prompt-injection]; treat the AI agent&apos;s network reach as a Conditional Access surface.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Post-quantum.&lt;/strong&gt; Audit your TLS, IPsec, code-signing, and key-management surfaces for PQ-migration readiness; track Microsoft&apos;s published PQ-migration timelines per surface [@sfi-apr-2025]; do not deploy custom ML-KEM or ML-DSA outside NIST-validated libraries [@fips-203] [@fips-204].&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Pluton.&lt;/strong&gt; Verify your hardware-refresh cycle moves to Pluton-capable silicon (AMD Ryzen 6000+; Intel Core Ultra Series 2 and later; Snapdragon 8cx Gen 3 and X Series) [@pluton-docs]; decide your Pluton-as-TPM configuration policy for new procurement; remember &quot;Pluton present&quot; is not &quot;Pluton enabled&quot; -- confirm OEM-exposed TPM type via &lt;code&gt;Get-Tpm&lt;/code&gt; plus BIOS toggle inspection.&lt;/p&gt;
&lt;p&gt;Two of those operational steps -- the Pluton-as-TPM status check and the Event ID 3077 monitoring -- are concrete enough to demonstrate. The runnable code blocks below are the verifiable form.&lt;/p&gt;
&lt;p&gt;{`
// PowerShell on Windows: Get-Tpm | Select-Object ManufacturerIdTxt, ManufacturerVersion, ManagedAuthLevel
// The JSON below is a representative shape returned by a Pluton-as-TPM machine.
const tpm = {
  ManufacturerIdTxt: &quot;MSFT&quot;,
  ManufacturerVersion: &quot;1.0.0.0&quot;,
  ManagedAuthLevel: &quot;Full&quot;,
  TpmPresent: true,
  TpmReady: true,
};&lt;/p&gt;
&lt;p&gt;function classifyTpm(tpm) {
  if (!tpm.TpmPresent) return &quot;no TPM detected&quot;;
  if (!tpm.TpmReady)   return &quot;TPM present but not ready (clear/initialize via tpm.msc)&quot;;
  if (tpm.ManufacturerIdTxt === &quot;MSFT&quot;) return &quot;Pluton-as-TPM (Microsoft firmware TPM)&quot;;
  if (tpm.ManufacturerIdTxt === &quot;AMD&quot; || tpm.ManufacturerIdTxt === &quot;INTC&quot;)
    return tpm.ManufacturerIdTxt + &quot; firmware TPM (fTPM); Pluton may be present but not the TPM&quot;;
  return &quot;discrete TPM by manufacturer &quot; + tpm.ManufacturerIdTxt;
}&lt;/p&gt;
&lt;p&gt;console.log(classifyTpm(tpm));
`}&lt;/p&gt;
&lt;p&gt;{`
// PowerShell: Get-WinEvent -LogName &apos;Microsoft-Windows-CodeIntegrity/Operational&apos; -FilterXPath &quot;*[System[EventID=3077]]&quot;
// Event ID 3077 = a driver was blocked from loading.
// Representative subset of fields shown below.
const events = [
  { Id: 3077, FileName: &quot;psmounterex.sys&quot;, PublisherName: &quot;Cross-Signed Legacy CA&quot;,  Action: &quot;Blocked&quot; },
  { Id: 3077, FileName: &quot;vulndrv.sys&quot;,     PublisherName: &quot;WHCP&quot;,                    Action: &quot;Blocked-Driver-Blocklist&quot; },
  { Id: 3076, FileName: &quot;okaydriver.sys&quot;,  PublisherName: &quot;WHCP&quot;,                    Action: &quot;AuditOnly&quot; },
];&lt;/p&gt;
&lt;p&gt;const blockedLoads = events.filter(e =&amp;gt; e.Id === 3077 &amp;amp;&amp;amp; e.Action.startsWith(&quot;Blocked&quot;));
for (const e of blockedLoads) {
  console.log(&quot;BLOCKED:&quot;, e.FileName, &quot;(&quot; + e.PublisherName + &quot;)&quot;);
}
`}&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; The April 2026 vulnerable-driver-blocking list names &lt;code&gt;psmounterex.sys&lt;/code&gt; as the first exemplar [@april-2026-driver-kb]. Any third-party tool that depends on it for backup or storage management will fail until the vendor ships a WHCP-signed replacement. Inventory your driver dependency graph before the April 14, 2026 Patch Tuesday lands across your fleet.&lt;/p&gt;
&lt;/blockquote&gt;

The April 2025 SFI progress report states that Entra ID and MSA access-token signing keys are in hardware-backed security modules with automatic rotation, and that the MSA signing service runs in Azure Confidential VMs [@sfi-apr-2025]. This is a Microsoft-side fact about *Microsoft&apos;s own tenants and signing services*, not a customer-tunable setting. For your own tenant, the things you can actually verify are: that Conditional Access policies enable CAE (Entra admin center: Conditional Access &amp;gt; Sessions); that your applications validate the `iss`, `aud`, `kid`, and `tid` claims per RFC 8725 [@rfc-8725]; and that any long-lived application secrets you manage are stored in Azure Key Vault Managed HSM with rotation enabled [@azure-managed-hsm]. There is no customer-visible knob for &quot;use the post-SFI signing service&quot; -- the signing service is upstream of your tenant and is managed by Microsoft.
&lt;h2&gt;11. Frequently Asked Questions&lt;/h2&gt;
&lt;p&gt;Seven load-bearing misconceptions of the era. Each gets a short answer with a back-reference to the relevant section.&lt;/p&gt;

No. Microsoft&apos;s September 6, 2023 post initially hypothesized that path, then retracted it in an in-place edit on March 12, 2024 with the verbatim sentence: &quot;we have not found a crash dump containing the impacted key material&quot; [@msrc-storm0558-key-acq]. The CSRB report (April 2, 2024, page 17) is equally explicit: &quot;Microsoft has been unable to determine how or when Storm-0558 obtained the MSA key&quot; [@csrb-2024]. The acquisition mechanism is, as of May 2026, unknown. See section 3.

No. Windows 11 24H2 reached Copilot+ PC RTM on June 18, 2024 and broad-SKU RTM on October 1, 2024; neither shipped Recall. Recall was pulled from the planned June 18, 2024 Copilot+ PC ship date via an in-place editor&apos;s note on the June 7, 2024 Davuluri post -- a five-day pull, not &quot;weeks before launch&quot; [@recall-davuluri-jun7-2024]. Recall returned to the Windows Insider Program on November 22, 2024 and reached general availability on May 13, 2025 [@recall-manage-docs]. See section 4.2.

No. Microsoft is *transitioning* AV and EDR to user mode via WESP, which opened in MVI 3.0 private preview in July 2025 [@wri-jun26-2025] [@ms-securityweek-wesp]. Microsoft is *separately* deprecating the legacy Cross-Signing Program in the April 14, 2026 Windows security update, beginning in evaluation mode with a 100-runtime-hour and 2-or-3-restart criterion [@techcommunity-cross-signing]. No public document names a hard categorical ban date. WHCP-certified kernel drivers continue to load. See section 4.3.

No. PatchGuard prevents in-kernel patching of protected kernel structures by other in-kernel code. It does nothing about a signed, KMCS-trusted, third-party driver loading malformed configuration data into a kernel-resident process -- the CrowdStrike Channel File 291 pattern [@crowdstrike-rca-pdf]. The vendor&apos;s own data pipeline is the failure surface PatchGuard was never designed to cover. See section 4.3.

The honest answer: SFI has produced measurable deliverables on identity and signing-key custody. The April 2025 report quantifies the identity-SDK validation lift from 73% to 90%, the MSA signing-key move to hardware-backed security modules with automatic rotation, and the MSA signing service migration to Azure Confidential VMs [@sfi-apr-2025]. The September 2024 report formalizes the executive-compensation tie-in [@sfi-sept-2024]. Whether the same compounding occurs on the supply-chain and human-OPSEC axes is the open empirical question. The institutional change is real; whether it durably shifts the security culture is still being measured. See sections 4.1 and 9.

No. Pluton can be used *as* a TPM or *with* a discrete TPM. The configuration is OEM-determined and per-SKU [@pluton-docs]. &quot;Pluton present&quot; is not the same as &quot;Pluton acting as TPM&quot;; confirm via `Get-Tpm` and BIOS toggle inspection. See section 4.5.

No. SQL Server 2019 Always Encrypted with secure enclaves, generally available November 4, 2019, is the substrate precedent [@sql-always-encrypted-enclaves]. The correct narrower claim is that Recall is the first VBS-Enclave deployment in the Windows desktop shell to face sustained adversarial review by named external researchers. See section 4.2.
&lt;p&gt;&amp;lt;StudyGuide slug=&quot;windows-security-wars-part-6&quot; keyTerms={[
  { term: &quot;CSRB&quot;, definition: &quot;Cyber Safety Review Board -- the United States public-private review board that ruled the Storm-0558 breach preventable on April 2, 2024.&quot; },
  { term: &quot;MSA&quot;, definition: &quot;Microsoft Account -- the consumer-tier identity tenant whose 2016 signing key was used in the Storm-0558 token-forgery primitive against enterprise Exchange Online.&quot; },
  { term: &quot;KMCS&quot;, definition: &quot;Kernel-Mode Code Signing -- the Windows policy that requires every kernel driver to be signed by a certificate chaining to a Microsoft-trusted root.&quot; },
  { term: &quot;MVI&quot;, definition: &quot;Microsoft Virus Initiative -- the program for vetting third-party endpoint security vendors that ship code into Windows.&quot; },
  { term: &quot;VBS Enclave&quot;, definition: &quot;Virtualization-based Security Enclave -- a user-mode trustlet inside Virtual Trust Level 1 with attested code identity; the substrate for Recall Generation 3.&quot; },
  { term: &quot;Channel File&quot;, definition: &quot;CrowdStrike&apos;s term for the Rapid Response Content delivery unit interpreted at runtime by the in-kernel Content Interpreter inside the Falcon sensor.&quot; },
  { term: &quot;WESP&quot;, definition: &quot;Windows Endpoint Security Platform -- the user-mode API surface for endpoint security vendors announced at Build 2025 and opened to MVI 3.0 partners in July 2025.&quot; },
  { term: &quot;Cross-Signing Program&quot;, definition: &quot;The legacy KMCS trust path whose deprecation begins April 14, 2026 in evaluation mode on Windows 11 24H2, 25H2, 26H1, and Server 2025.&quot; },
  { term: &quot;Prompt Injection&quot;, definition: &quot;Per OWASP LLM01, the class of attacks in which adversary-controlled text causes a large language model to take an unintended action; indirect prompt injection is the EchoLeak template.&quot; },
  { term: &quot;ML-KEM / ML-DSA / SLH-DSA&quot;, definition: &quot;The three NIST post-quantum primitives finalized August 13, 2024 (FIPS 203, 204, 205).&quot; }
]} /&amp;gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Key idea:&lt;/strong&gt; The 2023-2026 era is the first in NT&apos;s history in which the layer above the OS -- the institution&apos;s own identity-token custody, the third-party kernel-mode security vendor, and the AI feature application plane -- became the load-bearing security boundary under public scrutiny while the OS layer kept hardening. SFI, WESP, the Recall Generation-3 architecture, and the April 14, 2026 Cross-Signing trust deprecation are Microsoft&apos;s first sustained engineering re-architecture of all three soft spots in parallel. Whether the response lands in time for the 2026 ransomware wave is the open forward question of Part 7.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The 2006-2009 EU-engagement settlement was an honest engineering compromise of its time -- the AV industry needed a sanctioned kernel path; Microsoft needed PatchGuard not to be antitrust-actionable; customers needed both. The compromise survived eighteen years because the failure mode the era worried about was the &lt;em&gt;malicious&lt;/em&gt; kernel-resident driver, and KMCS plus the Vulnerable Driver Blocklist eventually contained that mode. What it never tested was a non-malicious data-parsing bug in a sanctioned, signed driver at fleet scale. The morning of July 19, 2024 ran that test once. The verdict came in twenty bytes.&lt;/p&gt;
</content:encoded><category>windows-security</category><category>crowdstrike</category><category>storm-0558</category><category>secure-future-initiative</category><category>wesp</category><category>recall</category><category>ai-security</category><author>noreply@paragmali.com (Parag Mali)</author></item><item><title>Forged from 2016: How Storm-0558 Turned One Stolen Signing Key into U.S. Government Email Access</title><link>https://paragmali.com/blog/forged-from-2016-how-storm-0558-turned-one-stolen-signing-ke/</link><guid isPermaLink="true">https://paragmali.com/blog/forged-from-2016-how-storm-0558-turned-one-stolen-signing-ke/</guid><description>A 2016 consumer Microsoft signing key, never rotated, forged tokens that read U.S. government email for six weeks before a paying customer noticed. A technical reconstruction.</description><pubDate>Thu, 28 May 2026 00:00:00 GMT</pubDate><content:encoded>
**In summer 2023, a stolen Microsoft consumer signing key from 2016 was used to forge cryptographically valid tokens that read the email of U.S. Commerce Secretary Gina Raimondo, U.S. Ambassador to China Nicholas Burns, Congressman Don Bacon (R-NE), and approximately 60,000 messages from 10 State Department accounts.** The cloud provider did not detect the breach -- the State Department did, on June 15, 2023, by spotting an unfamiliar `ClientAppID` in Microsoft 365 Purview audit logs. Three years on, Microsoft cannot publicly explain how the key was stolen. The Cyber Safety Review Board called the intrusion &quot;preventable&quot; and Microsoft&apos;s security culture &quot;inadequate&quot;; Microsoft&apos;s Secure Future Initiative now custodies signing keys in hardware security modules and Azure Confidential VMs and validates 90% of Entra ID tokens for Microsoft apps with a hardened SDK -- a four-for-four mapping to the four ways the pre-incident architecture failed at once.
&lt;h2&gt;1. A 2016 Key That Forged 2023 Government Email&lt;/h2&gt;
&lt;p&gt;On June 15, 2023, an analyst at the U.S. State Department&apos;s Security Operations Center was sifting through &lt;code&gt;MailItemsAccessed&lt;/code&gt; events in Microsoft 365 Purview audit logs when something did not fit. A &lt;code&gt;ClientAppID&lt;/code&gt; was reading mailboxes that did not match any application the State Department ran. The tokens that ClientAppID had presented to Exchange Online were cryptographically valid. They had been signed by a key Microsoft itself had published. Just not in 2023.&lt;/p&gt;
&lt;p&gt;The certificate for that key was issued April 5, 2016. It had expired April 4, 2021 [@wiz-storm0558]. And per Microsoft&apos;s own admission to the Cyber Safety Review Board nine months later, nobody at Microsoft can publicly tell you how Storm-0558 got hold of it [@csrb-report-2024; @msrc-key-acquisition].&lt;/p&gt;
&lt;p&gt;The State Department notified Microsoft on June 16, 2023 [@csrb-report-2024]. The Cybersecurity and Infrastructure Security Agency was looped in within days. On July 11, 2023, Microsoft published its first public mitigation post, attributing the campaign to a China-based actor it called Storm-0558 and reporting that approximately 25 organizations were affected [@msrc-storm0558-jul11]. Three days later, the Microsoft Threat Intelligence team published a longer technical analysis confirming the same actor had used &quot;forged authentication tokens&quot; beginning May 15, 2023 [@ms-security-jul14].&lt;/p&gt;

The Board finds that this intrusion was preventable and should never have occurred. The Board also concludes that Microsoft&apos;s security culture was inadequate and requires an overhaul. -- Cyber Safety Review Board, April 2, 2024 [@csrb-report-2024]
&lt;p&gt;The plain English of what happened is this. Storm-0558 had stolen one private signing key. By the construction of Microsoft&apos;s identity infrastructure, that key was authoritative for the consumer-grade Microsoft Account (MSA) issuer -- the same issuer that signs tokens for &lt;code&gt;@outlook.com&lt;/code&gt;, &lt;code&gt;@live.com&lt;/code&gt;, Xbox accounts, and personal applications. The actor used the key to mint OpenID Connect access tokens that named enterprise mailboxes as their target. Those tokens should not have been accepted by Exchange Online, because Exchange Online is an enterprise resource and the signing key was a consumer issuer&apos;s. But they were accepted.&lt;/p&gt;
&lt;p&gt;Once accepted, they granted read access to the named mailboxes. For six weeks, that access was active and uninterrupted. The Cyber Safety Review Board&apos;s final tally puts the harvest at approximately 60,000 emails from 10 State Department accounts and a total of 22 enterprise organizations along with approximately 503 related personal accounts [@csrb-report-2024]. Identified individual victims include U.S. Commerce Secretary Gina Raimondo, U.S. Ambassador to China Nicholas Burns, and U.S. House of Representatives accounts that publicly include Congressman Don Bacon (R-NE) [@csrb-report-2024].&lt;/p&gt;

A class of attacks in which an adversary obtains an identity authority&apos;s private signing key and uses it to mint cryptographically valid credentials (tokens, tickets, or assertions) that no downstream defender can distinguish from those issued by the legitimate authority. MITRE catalogs the technique family as T1606, &quot;Forge Web Credentials,&quot; with sub-techniques for web cookies (T1606.001) and SAML tokens (T1606.002) [@mitre-t1606; @mitre-t1606-002].
&lt;p&gt;Four facts about this incident are what make it architecturally important, and each is a separate failure with its own remediation path. The first is that the stolen key was seven years old. It was issued in 2016 and had not been rotated since [@csrb-report-2024]. The second is that the validator on the enterprise side accepted a token signed by the wrong issuer for an enterprise resource. The third is that the cloud provider did not detect the breach -- a paying customer did, on routine threat-hunting against an audit log the customer had to pay extra to collect. The fourth, perhaps most uncomfortable, is that the cloud provider does not know how its own root signing secret was stolen.&lt;/p&gt;
&lt;p&gt;Microsoft published a hypothesis in September 2023 (a crash dump exfiltrated through a compromised engineering account) [@msrc-key-acquisition], partially walked it back in March 2024 (&quot;we have not found a crash dump containing the impacted key material&quot;) [@msrc-key-acquisition], and three weeks later the CSRB concluded definitively: Microsoft &quot;has been unable to determine how or when Storm-0558 obtained the MSA key&quot; [@csrb-report-2024].&lt;/p&gt;
&lt;p&gt;The &quot;Storm-0558&quot; name is Microsoft&apos;s. Microsoft adopted a weather-themed taxonomy on April 18, 2023, in which &lt;code&gt;Storm-NNNN&lt;/code&gt; denotes a developing actor pending attribution and family names like &quot;Typhoon&quot; indicate origin -- in this case, China [@ms-learn-actor-naming]. After attribution work matured, Microsoft renamed the group &quot;Antique Typhoon&quot; in August 2024 [@ms-security-jul14].&lt;/p&gt;
&lt;p&gt;Each of those four facts is the closure of a separate architectural failure, and each is fixable in isolation. So how did all four fail at once? That answer begins with where the attack class came from, and why it had been written about for six years before it caught the State Department&apos;s attention.&lt;/p&gt;
&lt;h2&gt;2. The Lineage of Signing-Key Forgery&lt;/h2&gt;
&lt;p&gt;Storm-0558 is not a novel attack class. The primitive it instantiates -- steal an identity authority&apos;s signing secret, mint cryptographically valid tokens that no downstream defense can distinguish from legitimate ones -- has a six-year published lineage and an even longer informal one. The most important word in the previous sentence is &quot;lineage.&quot; Each generation widened the &lt;em&gt;trust domain&lt;/em&gt; the forgery primitive defeats.&lt;/p&gt;
&lt;p&gt;Storm-0558 is the cloud-provider generalization of a technique whose first formal name dates to November 2017, when Shaked Reiner of CyberArk Labs published a CyberArk Threat Research post titled &lt;em&gt;Golden SAML: Newly Discovered Attack Technique Forges Authentication to Cloud Apps&lt;/em&gt; [@reiner-golden-saml]. Reiner named the technique deliberately, riffing on Benjamin Delpy&apos;s earlier &quot;Golden Ticket&quot; name for the Kerberos analog.&lt;/p&gt;
&lt;p&gt;Walking the lineage forward in order from oldest primitive to Storm-0558 is the cleanest way to see what is genuinely new in 2023.&lt;/p&gt;

timeline
    title Lineage of Identity-Authority Forgery
    1997 : Pass-the-Hash : User credential reuse, host scope
    2014 : Golden Ticket (Mimikatz) : krbtgt theft, AD forest scope
    2017 : Golden SAML (Reiner / CyberArk) : AD FS Token-Signing key, federation scope
    2020 : Sunburst SAML token forgery : Customer federations via supply chain
    2023 : Storm-0558 : Cloud provider&apos;s own MSA signing key
&lt;p&gt;Generation one is &lt;strong&gt;&lt;a href=&quot;https://paragmali.com/blog/who-is-allowed-to-log-in-where-the-kdc-side-answer-to-creden/&quot; rel=&quot;noopener&quot;&gt;Pass-the-Hash&lt;/a&gt;&lt;/strong&gt;, first published as working exploit code by Paul Ashton on NTBugtraq in April 1997 (a modified Samba SMB client whose &lt;code&gt;orig_client.c&lt;/code&gt; diff is dated &lt;code&gt;Tue Apr 8 17:27:29 1997&lt;/code&gt;) [@ashton-pth-1997] and described in Microsoft&apos;s own canonical whitepaper as the user-level baseline that all later generations replaced [@ms-pth-paper; @mitre-t1550-002]. The attacker captures the NTLM hash from a host they have already compromised and re-presents it to other Windows hosts. No password is recovered, no signing infrastructure is touched.The CIFS/SMB authentication exchange that PtH abuses passes the NTLM hash as a &lt;em&gt;cryptographic proof of knowledge&lt;/em&gt; without ever needing the plaintext password -- which is why hashing the password did not reduce the attacker&apos;s working set. The blast radius is a single Windows host or, when paired with lateral movement, a constellation of hosts that share a credential. The trust authority being attacked is the user account, and the prerequisite is local code execution.&lt;/p&gt;
&lt;p&gt;Generation two is &lt;strong&gt;&lt;a href=&quot;https://paragmali.com/blog/krbtgt-the-account-that-owns-active-directory/&quot; rel=&quot;noopener&quot;&gt;Golden Ticket&lt;/a&gt;&lt;/strong&gt;, attributed to Benjamin Delpy&apos;s mimikatz tool from approximately 2014 [@mitre-t1558-001; @mimikatz-kerberos; @crowdstrike-golden-ticket]. Where Pass-the-Hash forges &lt;em&gt;user&lt;/em&gt; credentials, Golden Ticket forges &lt;em&gt;Kerberos Ticket-Granting Tickets&lt;/em&gt; by signing them with the stolen &lt;code&gt;krbtgt&lt;/code&gt; account&apos;s password hash from a domain controller. A forged TGT carries arbitrary &lt;code&gt;PrivAttrCert&lt;/code&gt; SIDs, so the attacker can claim membership in any AD group, including Domain Admins. The blast radius widens from a host to an entire Active Directory forest. The trust authority being attacked is the forest&apos;s Key Distribution Center, and the prerequisite is extracting the &lt;code&gt;krbtgt&lt;/code&gt; hash from a domain controller -- a one-time theft that, until &lt;code&gt;krbtgt&lt;/code&gt; is rotated, lets the attacker mint TGTs indefinitely.&lt;/p&gt;
&lt;p&gt;Generation three is &lt;strong&gt;Golden SAML&lt;/strong&gt;, the technique Reiner named in 2017 [@reiner-golden-saml]. The vector is the same shape: steal the AD FS Token-Signing private key, forge SAML assertions, present them to any cloud Service Provider federated to that AD FS. Quoting Reiner verbatim, the technique &quot;enables an attacker to create a golden SAML, which is basically a forged SAML &apos;authentication object,&apos; and authenticate across every service that uses SAML 2.0 protocol as an SSO mechanism.&quot; The blast radius widens again: from a single forest to every cloud Service Provider configured to trust that customer&apos;s AD FS -- Azure, AWS, vSphere, and any SaaS in the customer&apos;s SSO catalog. CyberArk published a proof-of-concept tool, &lt;code&gt;shimit&lt;/code&gt;, the same year [@shimit].&lt;/p&gt;
&lt;p&gt;The naming lineage is deliberate. Delpy&apos;s &quot;Golden Ticket&quot; was an explicit reference to the visual of unlimited, never-expiring access; Reiner&apos;s &quot;Golden SAML&quot; was equally explicit homage to Delpy. Reiner notes the connection openly in the original CyberArk post: &quot;the golden SAML name may remind you of another notorious attack known as golden ticket, which was introduced by Benjamin Delpy who is known for his famous attack tool called Mimikatz&quot; [@reiner-golden-saml]. Storm-0558 is the unnamed fifth generation.&lt;/p&gt;
&lt;p&gt;Generation four is &lt;strong&gt;Sunburst&lt;/strong&gt;, December 2020. The Russian Foreign Intelligence Service (SVR) compromised the &lt;a href=&quot;https://paragmali.com/blog/the-thirteen-months-that-made-zero-trust-unavoidable-the-win/&quot; rel=&quot;noopener&quot;&gt;SolarWinds Orion build pipeline&lt;/a&gt;, planted a backdoor in Orion updates, and from that initial-access foothold used Golden SAML against the federations of victim organizations to mint forged SAML tokens for Microsoft 365 and other federated SaaS [@aa20-352a; @cyberark-golden-saml-revisited]. Microsoft itself was among the victims. The company&apos;s February 2021 final update acknowledged that SVR had accessed source code for &quot;small subsets&quot; of Azure, Intune, and Exchange components but found &quot;no evidence of access to production services or customer data,&quot; and reported that the actor was not able to gain access to privileged credentials or apply the SAML forgery techniques against Microsoft&apos;s own corporate domains [@msrc-solorigate-final].&lt;/p&gt;
&lt;p&gt;The blast radius pattern of Sunburst was: one supply-chain compromise on the way in, then Golden SAML in each federation once inside. CISA attributed the SAML-token forgery technique explicitly in AA20-352A and named the SVR as the responsible actor in an April 2021 update to the advisory [@aa20-352a].&lt;/p&gt;

A 2017 attack technique by which an adversary who possesses the AD FS Token-Signing private key forges SAML 2.0 assertions and authenticates as any user to any cloud Service Provider that federates with that AD FS. Cataloged by MITRE as T1606.002 (&quot;Forge Web Credentials: SAML Tokens&quot;) and named by Shaked Reiner of CyberArk Labs in deliberate homage to Mimikatz&apos;s &quot;Golden Ticket&quot; [@mitre-t1606-002; @reiner-golden-saml].
&lt;p&gt;Generation five -- the one this article is about -- is &lt;strong&gt;Storm-0558&lt;/strong&gt;. The earlier four generations had one structural property in common: the trust authority being forged was the &lt;em&gt;customer&apos;s&lt;/em&gt; identity infrastructure. The customer&apos;s NT account database, the customer&apos;s domain controller, the customer&apos;s AD FS Token-Signing certificate, the customer&apos;s Orion-installed SolarWinds environment that fed those things. Sunburst, when it reached Microsoft, attacked Microsoft as a customer of its own corporate AD FS infrastructure. Storm-0558 attacked something different: the &lt;em&gt;cloud provider&apos;s own&lt;/em&gt; consumer identity-provider signing key. The trust authority being forged was Microsoft&apos;s MSA issuer -- the consumer-tier signing infrastructure that Microsoft itself operates as a service.&lt;/p&gt;
&lt;p&gt;The blast radius of an attack of this shape is bounded only by where the relying-party validation libraries accept the cloud provider&apos;s issuer. In Storm-0558&apos;s case, as Wiz Research showed in independent analysis, the key could in principle have signed tokens accepted by Outlook.com, SharePoint, Teams, OneDrive, and any third-party multi-tenant application using Microsoft&apos;s converged v2.0 endpoint that accepts &quot;Sign in with Microsoft&quot; for personal accounts [@wiz-storm0558]. The publicly documented exploitation was scoped to Exchange Online and Outlook Web Access, but, as Wiz&apos;s authors put it, &quot;the compromised signing key was more powerful than it may have seemed&quot; [@wiz-storm0558].&lt;/p&gt;
&lt;p&gt;So Storm-0558 is generation five in a chain whose earlier four generations had been documented, named, simulated, and operationalized for the better part of a decade. Sunburst still required compromising one customer&apos;s federation at a time. Storm-0558 compromised something different: Microsoft&apos;s own consumer identity provider. To understand how a &lt;em&gt;consumer&lt;/em&gt; signing key could authenticate against an &lt;em&gt;enterprise&lt;/em&gt; mailbox, we have to look at three architectural decisions Microsoft made between 2016 and 2022 -- and how they layered on top of an unrotated 2016 key.&lt;/p&gt;
&lt;h2&gt;3. The Architecture Before Storm-0558&lt;/h2&gt;
&lt;p&gt;Two parallel Microsoft identity providers operate under one corporate roof. The first is the consumer &lt;strong&gt;Microsoft Account (MSA) issuer&lt;/strong&gt;, which signs tokens for &lt;code&gt;@outlook.com&lt;/code&gt;, &lt;code&gt;@live.com&lt;/code&gt;, Xbox accounts, and the personal-account flavor of &quot;Sign in with Microsoft.&quot; The second is the enterprise &lt;strong&gt;Microsoft Entra ID issuer&lt;/strong&gt; (formerly Azure AD), which signs tokens for &lt;code&gt;@contoso.com&lt;/code&gt;-style workforce identities under a per-tenant issuer URL. Each issuer has its own signing keys and its own JWKS endpoint -- the public-key distribution endpoint that relying parties fetch to validate signatures.&lt;/p&gt;
&lt;p&gt;These are separate systems with separate signing infrastructure, but the cross-tier distinction is finer than &quot;different domains.&quot; Both the MSA and Entra ID issuers publish their v2.0 OpenID Connect tokens under the same &lt;code&gt;login.microsoftonline.com&lt;/code&gt; host. What distinguishes them is the tenant GUID inside the issuer URL. The MSA &quot;consumers&quot; tenant has the well-known GUID &lt;code&gt;9188040d-6c67-4c5b-b112-36a304b66dad&lt;/code&gt;, so its v2.0 OIDC issuer is &lt;code&gt;https://login.microsoftonline.com/9188040d-6c67-4c5b-b112-36a304b66dad/v2.0&lt;/code&gt; (verifiable live from the MSA OpenID Connect discovery document) [@msa-oidc-discovery]. Every Entra ID enterprise tenant has its own tenant GUID, so its issuer is &lt;code&gt;https://login.microsoftonline.com/{enterprise-tenant-GUID}/v2.0&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Microsoft&apos;s own July 11, 2023 disclosure put it plainly: &quot;MSA (consumer) keys and Azure AD (enterprise) keys are issued and managed from separate systems and should only be valid for their respective systems. The actor exploited a token validation issue to impersonate Azure AD users and gain access to enterprise mail&quot; [@msrc-storm0558-jul11]. The architectural sentence to hold on to from that paragraph is &lt;em&gt;should only be valid for their respective systems&lt;/em&gt;. The next 1,500 words are an explanation of how that &quot;should&quot; became &quot;did not.&quot;&lt;/p&gt;

A compact, URL-safe token format consisting of three Base64URL-encoded parts: a header (algorithm and key identifier), a payload (claims like `iss` (issuer), `sub` (subject), `aud` (audience), `exp` (expiration), `nbf` (not-before), and application-specific claims), and a signature over the header and payload. JSON Web Token Best Current Practices are codified in IETF RFC 8725 [@rfc-8725].

JWKS is the *JSON Web Key Set* a token issuer publishes at a well-known URL. Each key in the set carries a `kid` (Key ID). The JWT header names a `kid`, and the relying party uses it to locate the matching public key from the issuer&apos;s JWKS for signature verification. RFC 8725 specifies that &quot;validators MUST be able to handle JWTs signed with different algorithms&quot; and that the `kid` lookup is bound to a specific issuer&apos;s keys, never to a global key namespace [@rfc-8725].
&lt;p&gt;To understand the cross-tier flaw, walk a standard JWT validation flow in order. Step one: the relying party parses the JWT header to read the &lt;code&gt;alg&lt;/code&gt; and &lt;code&gt;kid&lt;/code&gt;. Step two: it looks up the issuer&apos;s JWKS using the &lt;code&gt;iss&lt;/code&gt; claim from the payload (or a hard-coded issuer URL it trusts). Step three: it locates the public key whose &lt;code&gt;kid&lt;/code&gt; matches the one in the header. Step four: it verifies the signature using that key.&lt;/p&gt;
&lt;p&gt;Step five is the one that matters. The validator checks the payload claims: &lt;code&gt;iss&lt;/code&gt; must match the trusted issuer for this resource, &lt;code&gt;aud&lt;/code&gt; must match this resource&apos;s identifier, &lt;code&gt;exp&lt;/code&gt; and &lt;code&gt;nbf&lt;/code&gt; must bracket the current time, and any application-specific tenant or scope claims must be enforced [@rfc-8725]. RFC 8725 (the IETF JWT Best Current Practices, published February 2020) makes step five mandatory: &quot;the issuer of the JWT MUST be validated to ensure that it is from a trusted source.&quot; When step five does not happen, the entire validation reduces to &quot;the signature is valid for &lt;em&gt;some&lt;/em&gt; key the issuer signed &lt;em&gt;something&lt;/em&gt; with,&quot; which is not the same as &quot;the token authorizes the bearer for this resource.&quot;&lt;/p&gt;

flowchart LR
    A[&quot;JWT arrives at relying party&quot;] --&amp;gt; B[&quot;Parse header: alg, kid&quot;]
    B --&amp;gt; C[&quot;Fetch issuer JWKS by iss claim&quot;]
    C --&amp;gt; D[&quot;Find key by kid&quot;]
    D --&amp;gt; E[&quot;Verify signature with public key&quot;]
    E --&amp;gt; F[&quot;Check iss, aud, tenant, scope, exp, nbf&quot;]
    F --&amp;gt; G[&quot;Allow request&quot;]
    F -.-&amp;gt;|&quot;omitted in OWA path before 2023&quot;| G

Microsoft Account is the consumer identity provider for `@outlook.com`, `@live.com`, Xbox, and personal-account &quot;Sign in with Microsoft&quot; flows. Its v2.0 OpenID Connect issuer is `https://login.microsoftonline.com/9188040d-6c67-4c5b-b112-36a304b66dad/v2.0` -- the MSA &quot;consumers&quot; tenant on the shared `login.microsoftonline.com` host [@msa-oidc-discovery].&lt;p&gt;Microsoft Entra ID (formerly Azure Active Directory) is the enterprise identity provider for tenant-scoped workforce identities like &lt;code&gt;user@contoso.com&lt;/code&gt;, with per-tenant issuers of the form &lt;code&gt;https://login.microsoftonline.com/{enterprise-tenant-GUID}/v2.0&lt;/code&gt; on the same host. The cross-tier distinction is therefore tenant-GUID-vs-tenant-GUID inside the same v2.0 URL template, not domain-vs-domain. The two systems are operationally separate with separate signing keys, separate JWKS endpoints, and separate intended audiences [@msrc-storm0558-jul11; @msa-oidc-discovery].
&lt;/p&gt;&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Now bring in the three architectural decisions that lined up to create Storm-0558&apos;s window.&lt;/p&gt;
&lt;p&gt;The &lt;strong&gt;first decision&lt;/strong&gt;, in September 2018, was that Microsoft published a converged metadata endpoint. Microsoft&apos;s own September 6, 2023 retrospective is explicit about the motivation: &quot;To meet growing customer demand to support applications which work with both consumer and enterprise applications, Microsoft introduced a common key metadata publishing endpoint in September 2018&quot; [@msrc-key-acquisition].&lt;/p&gt;
&lt;p&gt;The point of the converged endpoint was developer ergonomics. Build one app, use one validation library, accept users from &lt;code&gt;@outlook.com&lt;/code&gt; and &lt;code&gt;@contoso.com&lt;/code&gt; alike. Internally, the shared validation library would verify signatures against either issuer&apos;s keys, and was documented to expect that callers would add their own issuer and scope checks for resource-side authorization decisions.&lt;/p&gt;
&lt;p&gt;The September 2018 decision was a developer-experience choice, not a security choice. Microsoft was responding to demand for unified consumer/enterprise app flows. The validation library it shipped &lt;em&gt;could&lt;/em&gt; check &lt;code&gt;iss&lt;/code&gt;, but the design left that decision to the caller -- under the (reasonable, at the time) assumption that each caller best understood which issuers should be acceptable for its resource. The flaw Storm-0558 exploited was not a bug in the library; it was a missing line in a caller five years later.&lt;/p&gt;
&lt;p&gt;The &lt;strong&gt;second decision&lt;/strong&gt;, in 2022, was that Microsoft&apos;s mail platform team migrated Outlook Web Access (OWA) and Exchange Online&apos;s token-validation code to consume that converged endpoint without adding the issuer and scope check the library expected callers to add.&lt;/p&gt;
&lt;p&gt;The exact verbatim language from Microsoft&apos;s September 6, 2023 retrospective is worth quoting: &quot;Developers in the mail system incorrectly assumed libraries performed complete validation and did not add the required issuer/scope validation. Thus, the mail system would accept a request for enterprise email using a security token signed with the consumer key&quot; [@msrc-key-acquisition]. Two systems, both built by Microsoft, with a shared interface contract that was undocumented at the precise boundary that mattered.&lt;/p&gt;
&lt;p&gt;The &lt;strong&gt;third precondition&lt;/strong&gt;, which is not strictly a 2018-or-2022 decision but rather a non-decision running through both, is that the 2016 MSA consumer signing key had never been rotated. The CSRB report is direct about why: &quot;Microsoft automated the key rotation process in the enterprise system with the intent for the consumer MSA system to follow and use the same technology, but it had not done so in the consumer MSA system before the intrusion&quot; [@csrb-report-2024].&lt;/p&gt;
&lt;p&gt;The MSA system had previously rotated keys manually. In 2021, the CSRB notes, Microsoft paused manual MSA rotation after a manual-rotation-related cloud outage, and the automated replacement never arrived. The 2016 key stayed live for seven years. Its certificate, per Wiz Research&apos;s recovery from public JWKS history, was issued April 5, 2016, and expired April 4, 2021 -- which means even after the certificate&apos;s nominal expiry, the underlying signing key was still accepted by the converged validator [@wiz-storm0558].&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Key idea:&lt;/strong&gt; By 2022, the four preconditions for Storm-0558 were all in place. (1) An unrotated 2016 MSA consumer signing key. (2) Software-resident key custody (no HSM) for that key. (3) A 2018 converged metadata endpoint whose validation library left issuer/scope enforcement to callers. (4) A 2022 mail-platform migration onto that endpoint with the issuer/scope check missing. All that was needed was the attacker holding the key.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;These three (or four, counting the implicit software custody) factors did not align by accident. Each was an independent decision, made for an independent reason, by people working in good faith on different timelines. Developer ergonomics in 2018, mail-platform consolidation in 2022, a paused rotation process in 2021. None of them was a security decision. None of them was a vulnerability when shipped in isolation.&lt;/p&gt;
&lt;p&gt;The 2018 library would happily check &lt;code&gt;iss&lt;/code&gt; if the caller asked it to. The 2022 mail platform would happily reject a consumer-key-signed token if the integrator had added the check. The unrotated key would not have mattered if either of the validation layers had enforced separation. Storm-0558 required &lt;em&gt;all four&lt;/em&gt; to be wrong at once. They were.&lt;/p&gt;
&lt;h2&gt;4. The Attack Chain, Step by Step&lt;/h2&gt;
&lt;p&gt;The attack itself happened in five operational stages. The forged-token activity began May 15, 2023 and continued until Microsoft remediated on July 5, 2023, after the State Department&apos;s notification on June 16 [@ms-security-jul14; @csrb-report-2024]. Forty-one days.&lt;/p&gt;
&lt;p&gt;By the time the campaign was contained, Storm-0558 had been inside the cloud&apos;s identity infrastructure long enough to harvest tens of thousands of emails. What the attacker did is now mostly understood. What is not understood is &lt;em&gt;how&lt;/em&gt; the attacker got the key in the first place.&lt;/p&gt;

sequenceDiagram
    participant Atk as Storm-0558
    participant Key as 2016 MSA signing key
    participant MSA as MSA issuer infra
    participant OWA as OWA, Exchange Online
    participant Mbx as Target mailboxes
    Note over Atk,MSA: Mechanism unknown. Microsoft cannot determine how the key was obtained.
    MSA--&amp;gt;&amp;gt;Atk: 2016 MSA signing key, by May 2023
    Atk-&amp;gt;&amp;gt;Key: Forge OIDC JWT, kid for 2016 key
    Key-&amp;gt;&amp;gt;OWA: Token signed by MSA issuer, claims target enterprise user
    OWA-&amp;gt;&amp;gt;OWA: Verify signature, omit iss and aud check
    OWA-&amp;gt;&amp;gt;Mbx: Authorize as enterprise user
    Mbx--&amp;gt;&amp;gt;Atk: MailItemsAccessed events, 60,000 emails over 6 weeks
&lt;h3&gt;4.1 Key acquisition (mechanism unknown)&lt;/h3&gt;
&lt;p&gt;What is known is that by May 15, 2023, Storm-0558 held a valid 2016 MSA signing key. What is unknown -- and this is the most important sentence in the entire article -- is how the actor obtained it.&lt;/p&gt;
&lt;p&gt;Microsoft&apos;s September 6, 2023 retrospective offered a four-step hypothesis. A signing system crashed in April 2021. The crash generated a memory dump. The signing key was supposed to be redacted from such dumps, but a race condition allowed it through. The dump was supposed to remain inside an air-gapped production-isolated network but was migrated to the corporate debugging network. There, the credentials of a Microsoft engineer&apos;s account were compromised by an actor consistent with Storm-0558&apos;s tradecraft, and the dump was exfiltrated.&lt;/p&gt;
&lt;p&gt;That was the September 2023 story.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; Microsoft updated its September 6, 2023 retrospective on March 12, 2024 to add the following: &quot;The blog below states that the actor access may have resulted from a crash dump in 2021, but we have not found a crash dump containing the impacted key material&quot; [@msrc-key-acquisition; @msrc-key-acquisition-archive]. The artifact (crash dump containing the key) was not found. The general shape of the hypothesis -- operational error plus compromised engineering account -- is retained as the &lt;em&gt;leading&lt;/em&gt; hypothesis (see the immediately-following PullQuote for Microsoft&apos;s verbatim framing of what survives the retraction), not as a confirmed mechanism.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Three weeks after that retraction, the Cyber Safety Review Board published its report. The CSRB&apos;s finality on the question is uncompromising: Microsoft &quot;has been unable to determine how or when Storm-0558 obtained the MSA key&quot; [@csrb-report-2024]. The Board&apos;s investigation, which ran for seven months and drew on interviews with Microsoft engineers, the State Department, CISA, and independent reviewers, did not yield a confirmed mechanism. It identified candidate paths -- crash-dump migration, debugging-environment access, a compromised engineering account -- but found no artifact that closed any of them.&lt;/p&gt;
&lt;p&gt;The epistemic shape of this finding deserves naming. Three years on, the cloud provider responsible for authenticating billions of users cannot publicly tell its customers how the most security-critical secret in its consumer identity stack was stolen.&lt;/p&gt;
&lt;p&gt;That is not a minor footnote. As we will see in Section 7, it shapes Microsoft&apos;s entire architectural response: every Secure Future Initiative commitment about hardware-backed key custody, automatic rotation, and confidential signing has to defeat &lt;em&gt;plausible&lt;/em&gt; mechanisms because the actual one cannot be enumerated.&lt;/p&gt;

Our leading hypothesis remains that operational errors resulted in key material leaving the secure token signing environment that was subsequently accessed in a debugging environment via a compromised engineering account. -- Microsoft Security Response Center, March 12, 2024 update to the September 6, 2023 Storm-0558 retrospective [@msrc-key-acquisition]
&lt;h3&gt;4.2 Token forgery&lt;/h3&gt;
&lt;p&gt;With the private key in hand, forging an OpenID Connect access token is mechanical. The header names the algorithm Microsoft uses (RS256, RSA signature with SHA-256 padding, in this case) and the &lt;code&gt;kid&lt;/code&gt; of the 2016 key. The payload claims identify the target user (&lt;code&gt;sub&lt;/code&gt;), the target tenant where applicable, the requested audience (Exchange Online&apos;s resource URI), and validity timestamps.&lt;/p&gt;
&lt;p&gt;The actor signs the header-and-payload with the stolen private key, Base64URL-encodes the three parts, and joins them with periods. The result is a valid JWT, indistinguishable from one Microsoft itself would mint. Why? Because the cryptographic verification any relying party performs is, by construction, &quot;does this signature decrypt with the public key whose &lt;code&gt;kid&lt;/code&gt; is named in the header?&quot;&lt;/p&gt;
&lt;p&gt;Storm-0558 forged tokens against both the legitimate MSA scope (Outlook.com mailboxes belonging to consumer accounts -- the &lt;em&gt;intended&lt;/em&gt; use of the 2016 key) and the illegitimate cross-tier scope (enterprise Exchange Online mailboxes belonging to organizations like the U.S. State Department, which were never the intended audience for an MSA-signed token). The legitimacy of the signature did not change between the two. The difference was on the relying-party side.&lt;/p&gt;
&lt;h3&gt;4.3 The cross-tier validation flaw&lt;/h3&gt;
&lt;p&gt;This is the bug. The OWA and Exchange Online code path that received an incoming token, parsed the header, fetched the public key from the converged metadata endpoint, and verified the signature did not, after a successful signature verification, separately enforce that the token&apos;s &lt;code&gt;iss&lt;/code&gt; claim matched an issuer authorized for enterprise email.&lt;/p&gt;
&lt;p&gt;The shared validation library was perfectly capable of performing the issuer check, but only if asked. The OWA/Exchange Online caller did not ask.&lt;/p&gt;

A v2.0 MSA token&apos;s `iss` claim is `https://login.microsoftonline.com/9188040d-6c67-4c5b-b112-36a304b66dad/v2.0` -- the MSA &quot;consumers&quot; tenant on the shared `login.microsoftonline.com` host, with the well-known consumers tenant GUID [@msa-oidc-discovery]. A v2.0 Entra ID token&apos;s `iss` claim is `https://login.microsoftonline.com/{enterprise-tenant-GUID}/v2.0`, with the enterprise customer&apos;s own tenant GUID. The cross-tier distinction is tenant-GUID-vs-tenant-GUID *inside the same URL template*, not domain-vs-domain.&lt;p&gt;These are different issuers, with different signing keys and intended audiences. An enterprise resource like a State Department mailbox should accept only the second form, scoped to the State Department&apos;s tenant. Storm-0558&apos;s forged tokens presented the first form (the MSA &quot;consumers&quot; &lt;code&gt;iss&lt;/code&gt;) for resources that should have accepted only the second. The validator did not notice the mismatch because it never read past the signature verification step.&lt;/p&gt;
&lt;p&gt;The fix is one explicit &lt;code&gt;iss&lt;/code&gt;/&lt;code&gt;aud&lt;/code&gt; check on the relying-party side -- the joint mandate RFC 8725 Sections 3.8 and 3.9 have made mandatory since February 2020 (Section 3.8 covers &lt;code&gt;iss&lt;/code&gt; and &lt;code&gt;sub&lt;/code&gt;; Section 3.9 covers &lt;code&gt;aud&lt;/code&gt;) [@rfc-8725; @rfc-8725-html].
&lt;/p&gt;&lt;p&gt;&lt;/p&gt;
&lt;p&gt;The fix Microsoft eventually shipped is described in its own September 6, 2023 retrospective with the verbatim line &quot;this issue has been corrected using the updated libraries&quot; [@msrc-key-acquisition].&lt;/p&gt;
&lt;p&gt;Wiz Research, looking at the same flaw from outside, framed the architectural consequence. The actor&apos;s compromised key &quot;could have theoretically used the private key it acquired to forge tokens to authenticate as any user to any affected application that trusts Microsoft OpenID v2.0 mixed audience and personal-accounts certificates&quot; [@wiz-storm0558]. The actual exploitation was scoped to email, but the addressable scope was larger.&lt;/p&gt;

The private key an identity provider uses to sign authentication tokens it issues. Whoever holds the signing key can mint tokens cryptographically indistinguishable from those issued by the legitimate provider. The security of the identity system, in the absence of independent issuer/scope/tenant validation on the relying-party side, depends entirely on the custody of this key. The CSRB report describes its compromise as the central enabler of Storm-0558 [@csrb-report-2024].

The check, performed by a JWT relying party after signature verification, that the token&apos;s `iss` claim matches a permitted issuer for the requested resource and the `aud` claim matches the resource&apos;s identifier. RFC 8725 codifies the combined obligation across two adjacent sub-sections: Section 3.8 (&quot;Validate Issuer and Subject&quot;) makes `iss` and `sub` validation mandatory, and Section 3.9 (&quot;Use and Validate Audience&quot;) makes `aud` validation mandatory [@rfc-8725; @rfc-8725-html]. Skipping either -- as the OWA/Exchange Online path did before mid-2023 -- collapses the security model to &quot;any signature from any issuer the validator knows about is acceptable for any resource.&quot;
&lt;p&gt;The function name &lt;code&gt;GetAccessTokenForResource&lt;/code&gt; has been widely repeated across secondary coverage of Storm-0558 as the locus of the validation flaw. The name does not appear in any of the four primary sources: Microsoft&apos;s July 14, 2023 analysis, the September 6, 2023 retrospective, the CSRB report PDF, or the Wiz Research post. This article therefore describes the flaw functionally, as Microsoft itself did, without naming the function symbol [@msrc-key-acquisition; @csrb-report-2024; @wiz-storm0558].&lt;/p&gt;
&lt;p&gt;The single missing check the OWA path needed to make -- and now does -- is mechanical. In pseudocode, the difference is exactly one if-statement:&lt;/p&gt;
&lt;p&gt;{`
// Pseudocode. Pre-2023 OWA path did the first two steps and skipped the third.&lt;/p&gt;
&lt;p&gt;function verifyEnterpriseToken(jwt, tenantId, resource) {
  const header = parseJwtHeader(jwt);
  const payload = parseJwtPayload(jwt);&lt;/p&gt;
&lt;p&gt;  const issuerJwks = fetchJwks(payload.iss);
  const key = issuerJwks.find(k =&amp;gt; k.kid === header.kid);
  if (!key) throw new Error(&apos;unknown kid&apos;);&lt;/p&gt;
&lt;p&gt;  if (!verifySignature(jwt, key)) throw new Error(&apos;bad signature&apos;);&lt;/p&gt;
&lt;p&gt;  // The missing steps. RFC 8725 Sections 3.8 and 3.9 require both.
  const allowedIssuer = &apos;https:&apos; + &apos;//login.microsoftonline.com/&apos; + tenantId + &apos;/v2.0&apos;;
  if (payload.iss !== allowedIssuer) {
    throw new Error(&apos;issuer not authorized for this enterprise tenant&apos;);
  }
  if (payload.aud !== resource) {
    throw new Error(&apos;audience does not match resource&apos;);
  }&lt;/p&gt;
&lt;p&gt;  return payload;
}&lt;/p&gt;
&lt;p&gt;// Storm-0558&apos;s forged token carried payload.iss = &apos;https:&apos; + &apos;//login.microsoftonline.com/9188040d-6c67-4c5b-b112-36a304b66dad/v2.0&apos;
// (the MSA consumers tenant). kid: a 2016 MSA key. Signature: valid. Issuer match: never checked.
`}&lt;/p&gt;
&lt;h3&gt;4.4 Mailbox access and exfiltration&lt;/h3&gt;
&lt;p&gt;With validated tokens, the actor authenticated to Outlook Web Access and to Exchange Web Services as the target enterprise users. Once authenticated, the activity looked like any other authenticated user session: enumerate folders, fetch messages, read attachments.&lt;/p&gt;
&lt;p&gt;Storm-0558 selected high-value targets. The CSRB final tally is, again, approximately 60,000 emails from 10 State Department accounts; 22 enterprise organizations in total; approximately 503 related personal accounts [@csrb-report-2024]. Named individual victims publicly include U.S. Commerce Secretary Gina Raimondo, U.S. Ambassador to China Nicholas Burns, and U.S. House of Representatives accounts including Congressman Don Bacon (R-NE), who confirmed in August 2023 that the FBI had notified him his personal and campaign email accounts were among those compromised [@csrb-report-2024].&lt;/p&gt;
&lt;p&gt;The campaign ran during what Microsoft characterized as China Standard Time business hours, with a working-hours heat-map pattern visible in the telemetry [@ms-security-jul14]. The duration was at least six weeks of active access: May 15, 2023 to June 16, 2023 from the attacker&apos;s earliest documented activity to the State Department&apos;s notification, plus an additional ~20 days until Microsoft&apos;s July 5 remediation date.&lt;/p&gt;
&lt;h3&gt;4.5 The broader blast radius (potential, not exploited)&lt;/h3&gt;
&lt;p&gt;Wiz Research&apos;s independent analysis published in mid-2023 made an argument the world had not yet absorbed. The &lt;em&gt;same&lt;/em&gt; 2016 MSA signing key could in principle have signed OpenID v2.0 tokens for many more Microsoft services than just email. The Wiz authors enumerated SharePoint, Teams, OneDrive, and any third-party multi-tenant application supporting &quot;Sign in with Microsoft&quot; with mixed-audience personal-account acceptance [@wiz-storm0558].&lt;/p&gt;
&lt;p&gt;The framing they wrote -- &quot;if a signing key for Google, Facebook, Okta or any other major identity provider leaks, the implications are hard to comprehend&quot; -- is the right framing [@wiz-storm0558].&lt;/p&gt;
&lt;p&gt;There is no public evidence that Storm-0558 exploited the broader scope. The breach the world saw is the breach Microsoft and CISA found by enumerating one specific service&apos;s logs. Whether the broader scope was exploited and not detected is, as we will note in Section 10, an unanswered question.&lt;/p&gt;
&lt;p&gt;Six weeks of access. Approximately 60,000 State Department emails. The cloud provider did not notice. So who &lt;em&gt;did&lt;/em&gt; notice, and how?&lt;/p&gt;
&lt;h2&gt;5. Why a Paying Customer, Not Microsoft, Caught It&lt;/h2&gt;
&lt;p&gt;On June 15, 2023, the State Department SOC analyst who first noticed Storm-0558 was performing routine threat-hunting against Microsoft 365 Purview audit logs. The specific event type that surfaced the anomaly was &lt;code&gt;MailItemsAccessed&lt;/code&gt;, an audit record that fires whenever a mailbox item is read or fetched. It captures who read it (&lt;code&gt;UserId&lt;/code&gt;), from where (&lt;code&gt;ClientIPAddress&lt;/code&gt;), with what application (&lt;code&gt;ClientAppID&lt;/code&gt;, &lt;code&gt;AppID&lt;/code&gt;), and against which item (&lt;code&gt;InternetMessageId&lt;/code&gt; and folder).&lt;/p&gt;
&lt;p&gt;The detection technique was a baseline-deviation check. The State Department maintained a list of legitimate &lt;code&gt;(ClientAppID, AppID)&lt;/code&gt; pairs that historically read mailboxes belonging to its employees. Storm-0558&apos;s forged-token sessions presented &lt;code&gt;AppID&lt;/code&gt; values that were not on the list.&lt;/p&gt;
&lt;p&gt;Two days later, CISA and the FBI published joint advisory AA23-193A formalizing what the State Department had done into a recommended detection methodology. The verbatim language in the advisory: &quot;In Mid-June 2023, an FCEB agency observed &lt;code&gt;MailItemsAccessed&lt;/code&gt; events with an unexpected &lt;code&gt;ClientAppID&lt;/code&gt; and &lt;code&gt;AppID&lt;/code&gt; in M365 Audit Logs. ... The affected FCEB agency identified suspicious activity by leveraging enhanced logging -- specifically of &lt;code&gt;MailItemsAccessed&lt;/code&gt; events -- and an established baseline of normal Outlook activity (e.g., expected &lt;code&gt;AppID&lt;/code&gt;). The &lt;code&gt;MailItemsAccessed&lt;/code&gt; event enables detection of otherwise difficult to detect adversarial activity&quot; [@aa23-193a; @aa23-193a-pdf].&lt;/p&gt;

A Microsoft 365 audit event that records every read or fetch operation against a mailbox item. The event captures the user, source IP, client and application IDs, and the message identifier accessed. Because forged-token sessions necessarily use an `AppID` outside an organization&apos;s normal application inventory, `MailItemsAccessed` is the highest-signal event class for detecting mailbox-token abuse [@aa23-193a].

A Microsoft 365 audit-log tier that, pre-July 2023, gated several high-value security event classes (including `MailItemsAccessed`) behind a paid add-on. Most federal civilian agencies and many commercial tenants were on Purview Audit (Standard) and did not collect these events. The State Department had paid for Premium and was therefore in a position to detect Storm-0558 from its own telemetry [@aa23-193a; @ms-blog-jul19-recovered].

flowchart TD
    A[&quot;June 15, 2023: State Department SOC analyst&lt;br /&gt;notices unfamiliar ClientAppID in MailItemsAccessed events&quot;] --&amp;gt; B[&quot;June 16, 2023: State Department notifies Microsoft&quot;]
    B --&amp;gt; C[&quot;Microsoft compares kid against published MSA&lt;br /&gt;key rotation history, identifies 2016 key&quot;]
    C --&amp;gt; D[&quot;July 11, 2023: Microsoft public disclosure post&quot;]
    D --&amp;gt; E[&quot;July 12, 2023: CISA and FBI publish AA23-193A&quot;]
    E --&amp;gt; F[&quot;July 19, 2023: Microsoft expands free Purview Audit features&quot;]
    E --&amp;gt; G[&quot;July 27, 2023: Wyden letter to DOJ, FTC, CISA&quot;]
    G --&amp;gt; H[&quot;August 11, 2023: DHS announces CSRB cloud review&quot;]
&lt;p&gt;Microsoft&apos;s &lt;em&gt;confirmation&lt;/em&gt; step came after the State Department&apos;s notification, not before. Once notified, Microsoft compared the &lt;code&gt;kid&lt;/code&gt; on the suspicious tokens against its own published MSA key rotation history and found that the &lt;code&gt;kid&lt;/code&gt; corresponded to a 2016 key whose certificate had expired April 4, 2021 [@wiz-storm0558; @ms-security-jul14]. The signature was cryptographically valid for the 2016 key. The 2016 key should never have signed an enterprise-tier token. Both halves of that statement were true at the same time, and the second half is what told Microsoft this was a key compromise rather than a stolen-credential issue.&lt;/p&gt;
&lt;p&gt;The structural fact about this detection -- the one that puts every other event in this article in its proper context -- is that &lt;code&gt;MailItemsAccessed&lt;/code&gt; was, pre-incident, a Purview Audit (Premium) tier feature [@aa23-193a]. The State Department had paid for Premium. Most federal civilian agencies and many commercial tenants had not. If the State Department had been on Purview Audit (Standard), the event class that surfaced Storm-0558 would not have been collected at all, and the breach would have run longer and gone wider before anyone noticed. The CSRB report makes this connection explicit: the structural critique that follows in Section 6 is not about one bug or one missing check. It is about the commercial logging-tier structure of cloud identity, and about who is in a position to detect a CSP-level compromise when the CSP itself is not [@csrb-report-2024].&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; The cloud provider did not catch the breach. A paying customer did, on routine threat-hunting against an audit log the customer had to pay extra to collect. This is the CSRB&apos;s harshest single critique, and it is what motivated Microsoft&apos;s policy response on July 19, 2023 -- making key Purview Audit (Premium) features, including &lt;code&gt;MailItemsAccessed&lt;/code&gt;, free for FCEB customers and most commercial customers [@ms-blog-jul19-recovered; @cisa-statement-free-logs-fixed; @csrb-report-2024].&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The detection methodology the State Department used is reproducible in pseudocode. The logic, after audit-log ingestion into a SIEM, is small.&lt;/p&gt;
&lt;p&gt;{`
// Pseudocode. Assumes MailItemsAccessed events ingested from M365 Purview audit log.
// The State Department&apos;s pattern: maintain a small allowlist of legitimate AppIDs.&lt;/p&gt;
&lt;p&gt;const allowlistedAppIds = new Set([
  // populated from your tenant&apos;s historical baseline of legitimate mail clients,
  // approved third-party connectors, M365 services, and authorized integrations
  &apos;00000003-0000-0000-c000-000000000000&apos;, // Microsoft Graph
  // ... extend with your tenant&apos;s specific approved AppIDs
]);&lt;/p&gt;
&lt;p&gt;function analyzeEvent(evt) {
  if (evt.Operation !== &apos;MailItemsAccessed&apos;) return;
  if (allowlistedAppIds.has(evt.AppId)) return;&lt;/p&gt;
&lt;p&gt;  // Forged-token sessions necessarily present an AppID outside the baseline.
  alert({
    severity: &apos;high&apos;,
    reason: &apos;MailItemsAccessed from unallowlisted AppID&apos;,
    user: evt.UserId,
    appId: evt.AppId,
    clientAppId: evt.ClientAppId,
    sourceIp: evt.ClientIPAddress,
    messageId: evt.InternetMessageId
  });
}
`}&lt;/p&gt;
&lt;p&gt;The State Department SOC analyst who first identified Storm-0558 has not been publicly named in any primary source. The CSRB report describes the detection at the level of the agency. There is good reason for the anonymity, given the operational profile of someone who is, by chance and skill, the first known human to detect a Chinese state-affiliated forgery of a Microsoft signing key.&lt;/p&gt;
&lt;p&gt;Microsoft&apos;s policy response was rapid and substantive. On July 19, 2023, the Microsoft Security blog announced the expansion. Purview Audit (Standard) customers would get &quot;more than 30 other types of log data previously only available at the Microsoft Purview Audit (Premium) subscription level,&quot; with default retention extended from 90 to 180 days, rolling out beginning September 2023 [@ms-blog-jul19-recovered]. CISA&apos;s same-day press release confirmed: &quot;Microsoft customers will now have access to expanded cloud logging capabilities at no additional charge ... these additional logging capabilities will now be available at no extra cost to federal government customers and Microsoft commercial customers beginning in September&quot; [@cisa-statement-free-logs-fixed].&lt;/p&gt;
&lt;p&gt;The pricing structure that had made the State Department&apos;s detection possible only because the State Department paid extra was, eight days after the joint advisory, made part of the baseline.&lt;/p&gt;
&lt;p&gt;That is the operational story. But the political story was just starting. On July 27, 2023, Senator Ron Wyden (D-OR) wrote a four-page letter to three federal agencies asking them to investigate Microsoft. Fifteen days later, the Cyber Safety Review Board announced its third-ever review.&lt;/p&gt;
&lt;h2&gt;6. The Public Reckoning -- CSRB, Retracted Hypothesis, Congressional Testimony&lt;/h2&gt;
&lt;p&gt;Senator Wyden&apos;s letter, addressed to Attorney General Merrick Garland, FTC Chair Lina Khan, and CISA Director Jen Easterly, opened with a comparison: &quot;Microsoft never took responsibility for its role in the SolarWinds hacking campaign&quot; [@wyden-senate-pr; @wyden-senate-letter-pdf]. The letter then enumerated four specific cybersecurity failures it attributed to Microsoft in the Storm-0558 incident.&lt;/p&gt;
&lt;p&gt;Quoting Wyden&apos;s own characterization from the Senate press release: &quot;Employing a single encryption key that could be used to forge access to consumer, commercial and government customers&apos; private communications; Microsoft&apos;s blog post about the hack suggests it did not store high-value encryption keys in a Hardware Security Module ...; Using an encryption key that was valid for 5 years, and was still accepted by Microsoft&apos;s software, even though it had expired in 2021, two years before the hack ...; Neither internal nor external security audits detected the security weaknesses that enabled the hack&quot; [@wyden-senate-pr].&lt;/p&gt;

The (d) to (e) jump in the political chronology -- from Wyden&apos;s July 27 letter to the August 11 DHS announcement -- is, in Wyden&apos;s own words, causal. His August 11 statement reads: &quot;I applaud President Biden and CISA Director Easterly for acting on my request for the board to review this recent espionage campaign, including cybersecurity negligence by Microsoft that enabled it ... Had the board studied the 2020 SolarWinds hack, as President Biden originally directed, its findings might have been able to shore up federal cybersecurity in time to stop hackers from exploiting a similar vulnerability in the most recent incident&quot; [@wyden-senate-statement-aug11]. The Senate office&apos;s published causal-chain framing matters because it provides the public-record bridge from a single senator&apos;s letter to a federal advisory-board review.
&lt;h3&gt;6.1 The CSRB&apos;s authority and process&lt;/h3&gt;
&lt;p&gt;The Cyber Safety Review Board exists because President Biden&apos;s Executive Order 14028 of May 12, 2021, &quot;Improving the Nation&apos;s Cybersecurity,&quot; directed DHS to establish a standing board to conduct after-action reviews of significant cyber incidents [@eo-14028]. Storm-0558 was the Board&apos;s third review, after Log4j and Lapsus$ [@csrb-program].&lt;/p&gt;
&lt;p&gt;On August 11, 2023, DHS Secretary Alejandro Mayorkas announced the Board would conduct a review of &quot;the malicious targeting of cloud computing environments,&quot; with the recent Microsoft Exchange Online intrusion as the central case study and a broader scope covering &quot;issues relating to cloud-based identity and authentication infrastructure affecting applicable CSPs and their customers&quot; [@dhs-csrb-announce-archive]. Robert Silvers, DHS Under Secretary for Policy, chaired. Dmitri Alperovitch served as Acting Deputy Chair for this review [@dhs-csrb-report-release].&lt;/p&gt;

A public-private federal advisory board established by Executive Order 14028 (May 12, 2021) and standing up in February 2022 to conduct after-action reviews of significant cyber incidents and recommend improvements. The Board&apos;s Storm-0558 review, its third (after Log4j and Lapsus$), was announced August 11, 2023 and reported April 2, 2024 [@eo-14028; @csrb-program; @csrb-report-2024].
&lt;h3&gt;6.2 The September 2023 hypothesis and the March 2024 retraction&lt;/h3&gt;
&lt;p&gt;The chronology that matters here is short and worth pinning down precisely. Microsoft published the crash-dump hypothesis on September 6, 2023 [@msrc-key-acquisition]. Microsoft &lt;em&gt;itself&lt;/em&gt; updated that post on March 12, 2024 with the retraction-of-the-artifact paragraph quoted earlier in Section 4.1 [@msrc-key-acquisition]. The CSRB report published April 2, 2024 -- three weeks after Microsoft retracted the artifact -- then documented the resulting state of knowledge (verdict quoted in Section 4.1; CSRB page 17) [@csrb-report-2024].&lt;/p&gt;
&lt;p&gt;The order matters. Microsoft retracted the artifact first. The CSRB did not force the retraction; it documented the resulting state of knowledge. That sequence is meaningful because it suggests Microsoft&apos;s own forensic work, not external pressure, drove the walking-back of the artifact claim.&lt;/p&gt;
&lt;h3&gt;6.3 The CSRB&apos;s findings&lt;/h3&gt;
&lt;p&gt;The Board&apos;s findings, in its own verbatim language, are direct. The Board&apos;s page-ii verbatim -- the preventable / inadequate / requires-an-overhaul language quoted in Section 1&apos;s opening PullQuote -- sets the frame; page 17 sharpens it: &quot;the cascade of Microsoft&apos;s avoidable errors that allowed this intrusion to succeed&quot; [@csrb-report-2024].&lt;/p&gt;
&lt;p&gt;The DHS press release surfaced these findings on the day of publication: &quot;the intrusion by Storm-0558, a hacking group assessed to be affiliated with the People&apos;s Republic of China, was preventable. It identified a series of Microsoft operational and strategic decisions that collectively pointed to a corporate culture that deprioritized enterprise security investments and rigorous risk management&quot; [@dhs-csrb-report-release].&lt;/p&gt;
&lt;p&gt;The report makes 25 recommendations. Of those, 16 apply to Microsoft (4 specific to Microsoft and 12 to all cloud service providers but accepted by Microsoft per Brad Smith&apos;s June 2024 testimony) [@brad-smith-2024-06-13]. The structural critique embedded in the recommendations is that the &lt;em&gt;commercial logging-tier structure&lt;/em&gt; of cloud identity is itself a security problem, because it delays detection asymmetrically: richly-resourced customers detect compromise; less-resourced customers do not. The free-Purview-Audit shift Microsoft had announced on July 19, 2023 is, in the CSRB&apos;s framing, a necessary but not sufficient condition for cloud-identity log access to stop being a per-customer commercial decision.&lt;/p&gt;
&lt;h3&gt;6.4 Brad Smith&apos;s June 13, 2024 testimony&lt;/h3&gt;
&lt;p&gt;The House Committee on Homeland Security titled its June 13, 2024 hearing &quot;A Cascade of Security Failures: Assessing Microsoft Corporation&apos;s Cybersecurity Shortfalls and the Implications for Homeland Security&quot; [@homeland-hearing]. The plural &quot;Failures&quot; was a deliberate framing choice. By the time of the hearing, Microsoft had also publicly disclosed a separate January 2024 intrusion by Midnight Blizzard (the Russian SVR; the same actor as SolarWinds), and the hearing&apos;s scope spanned both incidents. Brad Smith, Microsoft&apos;s Vice Chair and President, was the witness.&lt;/p&gt;
&lt;p&gt;Smith&apos;s written and oral testimony opened with the soundbite that defined the hearing&apos;s coverage (quoted in the PullQuote below). Smith confirmed Microsoft&apos;s acceptance of all 16 applicable CSRB recommendations, identified 18 additional internal objectives beyond the CSRB&apos;s scope, and announced that Senior Leadership Team compensation would be tied in part to progress on the Secure Future Initiative [@brad-smith-2024-06-13; @sfi-may-2024].&lt;/p&gt;

Microsoft accepts responsibility for each and every one of the issues cited in the CSRB&apos;s report. Without equivocation or hesitation. And without any sense of defensiveness. -- Brad Smith, Vice Chair and President of Microsoft, written testimony to the House Committee on Homeland Security, June 13, 2024 [@brad-smith-2024-06-13; @smith-testimony-pdf]
&lt;p&gt;The hearing&apos;s plural framing -- &quot;Failures&quot; -- mattered. On January 19, 2024, Microsoft disclosed a separate Midnight Blizzard intrusion that had begun in late November 2023 (approximately four weeks after the November 2, 2023 launch of the Secure Future Initiative) via a password spray against a legacy non-production test tenant, and that exfiltrated email from members of Microsoft&apos;s senior leadership team [@msrc-midnight-blizzard-jan-archive]. The March 8, 2024 update added that Midnight Blizzard had reached Microsoft source code repositories and ramped February password sprays to ten times the January volume [@msrc-midnight-blizzard-mar-archive]. By the June hearing, Microsoft was carrying both incidents into the same line of questioning.&lt;/p&gt;
&lt;p&gt;Microsoft accepted responsibility. The CSRB asked for an architectural overhaul. The next question is what Microsoft actually built.&lt;/p&gt;
&lt;h2&gt;7. The Architectural Response -- SFI and the Identity-Plane Re-Architecture&lt;/h2&gt;
&lt;p&gt;The Secure Future Initiative (SFI) is the corporate vehicle through which Microsoft&apos;s post-Storm-0558 architectural changes are reported. The remarkable property of the SFI commitments, viewed against the pre-incident architecture described in Section 3, is that they are surgically targeted: each of the four ways the pre-incident MSA system failed maps to one explicit commitment.&lt;/p&gt;
&lt;h3&gt;7.1 SFI: launch, expansion, motivation arc&lt;/h3&gt;
&lt;p&gt;Brad Smith launched SFI on November 2, 2023, with three pillars focused on AI-based cyber defenses, fundamental software engineering advances, and stronger international cyber norms [@sfi-launch-nov-2023]. Charlie Bell expanded it on May 3, 2024 into six pillars: protect identities and secrets; protect tenants and isolate production systems; protect networks; protect engineering systems; monitor and detect threats; accelerate response and remediation [@sfi-may-2024].&lt;/p&gt;
&lt;p&gt;Pillar 1&apos;s verbatim commitment is the one that maps onto Storm-0558 most directly: &quot;Protect identity infrastructure signing and platform keys with rapid and automatic rotation with hardware storage and protection (for example, hardware security module (HSM) and confidential compute)&quot; and &quot;Adopt more fine-grained partitioning of identity signing keys and platform keys&quot; [@sfi-may-2024].&lt;/p&gt;
&lt;p&gt;The motivation arc Smith described in his June 13, 2024 testimony connects the dots. Storm-0558 led to the November 2023 launch. The January 2024 Midnight Blizzard intrusion led to the May 2024 six-pillar expansion. The April 2024 CSRB report led to the integration of CSRB recommendations into SFI. The June 2024 hearing led to SLT compensation being tied to SFI progress [@brad-smith-2024-06-13; @sfi-may-2024].&lt;/p&gt;

A multi-year Microsoft corporate program announced November 2, 2023 by Brad Smith, expanded May 3, 2024 by Charlie Bell into six pillars, and reported on quarterly. SFI is the explicit corporate vehicle through which Microsoft commits to and reports progress on the architectural changes recommended by the CSRB after Storm-0558. Its identity-and-secrets pillar names HSM custody, automatic rotation, fine-grained key partitioning, and confidential-compute hosting of signing operations as concrete deliverables [@sfi-launch-nov-2023; @sfi-may-2024].
&lt;h3&gt;7.2 HSM-bound key custody plus automatic rotation&lt;/h3&gt;
&lt;p&gt;This closes the first two ways the pre-incident architecture failed: the software-stored key and the unrotated seven-year-old key. Microsoft&apos;s September 2024 SFI progress report&apos;s verbatim claim: &quot;We completed updates to Microsoft Entra ID and Microsoft Account (MSA) for our public and United States government clouds to generate, store, and automatically rotate access token signing keys using the Azure Managed Hardware Security Module (HSM) service&quot; [@sfi-sept-2024].&lt;/p&gt;
&lt;p&gt;Azure Managed HSM is FIPS 140-3 Level 3, built on the Marvell LiquidSecurity platform, with a multi-partition topology that allows per-tenant key isolation [@azure-managed-hsm].&lt;/p&gt;

A tamper-resistant cryptographic device that generates and stores private keys inside a hardware boundary and exposes only signing or decryption operations to its caller. Keys generated inside an HSM cannot be exported -- the device performs the signature itself, returning only the signed output. NIST FIPS 140-3 (published March 22, 2019) defines the certification regime; Level 3 adds tamper-detection and identity-based authentication requirements [@fips-140-3; @azure-managed-hsm].
&lt;p&gt;A separate Microsoft on-server primitive, Azure Integrated HSM, is explicitly framed as a Storm-0558 mitigation. Its overview page reads: &quot;Reduce network round-trips to Azure Key Vault or Managed HSM by performing cryptographic operations locally on the same node as the Virtual Machine ... Protect against memory and crash-dump attacks&quot; within &quot;a FIPS 140-3 Level 3 HSM boundary&quot; on AMD D Series v7 and AMD E Series v7 servers [@azure-integrated-hsm].&lt;/p&gt;
&lt;p&gt;The phrase &quot;memory and crash-dump attacks&quot; in the same paragraph as &quot;FIPS 140-3 Level 3&quot; is, in context, an explicit acknowledgement of the threat model Storm-0558 spent eighteen months making famous.&lt;/p&gt;
&lt;h3&gt;7.3 Signing operations inside Confidential Computing TEEs&lt;/h3&gt;
&lt;p&gt;This closes the residual that HSM custody alone leaves open: in-use observation by a privileged host operator or administrator. The HSM keeps the key from being extracted at rest. But the signing service that asks the HSM to produce a signature still runs somewhere, in some virtual machine, on a host with operators. &lt;a href=&quot;https://paragmali.com/blog/inside-azure-confidential-vms-sev-snp-intel-tdx-and-the-para/&quot; rel=&quot;noopener&quot;&gt;Confidential Computing&lt;/a&gt; closes that gap by running the signing service inside a Trusted Execution Environment whose memory and CPU state are encrypted with hardware-derived keys that not even the host operator can inspect.&lt;/p&gt;
&lt;p&gt;Microsoft&apos;s April 2025 SFI report is direct about the change: &quot;we&apos;ve applied new defense-in-depth protections in response to our Red Team research and assessments, migrated the MSA signing service to Azure confidential VMs, and are migrating Entra ID signing service to the same. Each of these improvements help mitigate the attack vectors that we suspect the actor used in the 2023 Storm-0558 attack on Microsoft&quot; [@sfi-april-2025]. The underlying TEE primitives are AMD SEV-SNP and Intel TDX, implemented in Azure&apos;s DCasv5/ECasv5 and DCesv6/ECesv6 confidential-VM SKU families [@azure-conf-compute]. The April 2025 timing was contemporaneous coverage: The Hacker News reported on the same April 21, 2025 progress post the day after [@hackernews-msa-confcompute].&lt;/p&gt;

A class of hardware-backed isolation primitives in which a virtual machine&apos;s memory and CPU state are encrypted with keys derived from the CPU itself, so that even a privileged host operator with full hypervisor access cannot read the workload&apos;s memory in cleartext. AMD&apos;s implementation is SEV-SNP (Secure Encrypted Virtualization, Secure Nested Paging); Intel&apos;s is TDX (Trust Domain Extensions). Azure exposes both through its DCasv5/ECasv5 and DCesv6/ECesv6 confidential-VM SKU families [@azure-conf-compute].
&lt;h3&gt;7.4 Tenant-issuer separation enforced in hardened validation libraries&lt;/h3&gt;
&lt;p&gt;This closes the third pre-incident failure mode: the cross-tier validation flaw. RFC 8725 Sections 3.8 and 3.9 are the canonical IETF Best Current Practice for the combined &lt;code&gt;iss&lt;/code&gt;/&lt;code&gt;aud&lt;/code&gt; mandate and have been since February 2020 (Section 3.8 covers issuer and subject; Section 3.9 covers audience) [@rfc-8725; @rfc-8725-html].&lt;/p&gt;
&lt;p&gt;The Microsoft-internal response was to consolidate JWT validation across services into a single hardened SDK that enforces the &lt;code&gt;iss&lt;/code&gt;/&lt;code&gt;aud&lt;/code&gt; check at the library level rather than leaving it to each caller. The quantified rollout numbers from successive SFI progress reports are concrete: &quot;more than 73% of tokens issued by Microsoft Entra ID for Microsoft owned applications&quot; were under hardened-SDK validation by September 2024 [@sfi-sept-2024], rising to &quot;90% of identity tokens from Microsoft Entra ID for Microsoft apps are validated by one consistent and hardened identity Software Development Kit (SDK)&quot; by April 2025 [@sfi-april-2025].&lt;/p&gt;
&lt;h3&gt;7.5 Logging as a commodity, not a premium&lt;/h3&gt;
&lt;p&gt;This closes the fourth failure mode: the paid-tier-only audit logging that delayed customer detection. The July 19, 2023 announcement made &lt;code&gt;MailItemsAccessed&lt;/code&gt; and 30+ other event classes free for FCEB and most commercial customers [@ms-blog-jul19-recovered; @cisa-statement-free-logs-fixed].&lt;/p&gt;
&lt;p&gt;The April 2025 SFI report added a further commitment: &quot;two years of internal security-log retention&quot; [@sfi-april-2025]. This addresses the secondary issue that even when logs are collected, retention windows must outlast typical adversary dwell times.&lt;/p&gt;
&lt;p&gt;The four failure modes map to four commitments. Table form makes the alignment unambiguous.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Pre-incident failure mode (Section 3)&lt;/th&gt;
&lt;th&gt;SFI commitment that closes it&lt;/th&gt;
&lt;th&gt;Source&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td&gt;Software-resident, never-rotated 2016 MSA signing key&lt;/td&gt;
&lt;td&gt;Azure Managed HSM custody with automatic rotation for MSA and Entra ID (September 2024)&lt;/td&gt;
&lt;td&gt;[@sfi-sept-2024; @azure-managed-hsm]&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Privileged host-side observation of in-use signing operations&lt;/td&gt;
&lt;td&gt;MSA signing service in Azure Confidential VMs (April 2025); Entra ID signing service in migration&lt;/td&gt;
&lt;td&gt;[@sfi-april-2025; @azure-conf-compute]&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cross-tier validation: OWA/Exchange Online did not enforce iss/aud&lt;/td&gt;
&lt;td&gt;Hardened identity SDK validating 90% of Entra ID tokens for Microsoft apps (April 2025)&lt;/td&gt;
&lt;td&gt;[@sfi-april-2025; @rfc-8725]&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Paid-tier-only audit logging delayed customer detection&lt;/td&gt;
&lt;td&gt;Free MailItemsAccessed and 30+ event classes from September 2023; 180-day default retention; 2-year internal retention (April 2025)&lt;/td&gt;
&lt;td&gt;[@ms-blog-jul19-recovered; @cisa-statement-free-logs-fixed; @sfi-april-2025]&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Key idea:&lt;/strong&gt; Each defensive generation in Microsoft&apos;s Secure Future Initiative targets exactly one of the four ways the pre-incident MSA architecture failed. The chain is correctable, not just remediable: Microsoft can name which commitment closes which failure mode. What it still cannot name is &lt;em&gt;how&lt;/em&gt; the 2016 key itself was stolen.&lt;/p&gt;
&lt;/blockquote&gt;

flowchart TD
    A[&quot;Token request from MSA-authenticated client&quot;] --&amp;gt; B[&quot;MSA signing service in Azure Confidential VM&lt;br /&gt;(SEV-SNP or TDX)&quot;]
    B --&amp;gt; C[&quot;Attestation document from Confidential VM&quot;]
    C --&amp;gt; D[&quot;Azure Managed HSM&lt;br /&gt;(FIPS 140-3 Level 3)&quot;]
    D --&amp;gt;|&quot;sign with MSA key, rotated automatically&quot;| B
    B --&amp;gt; E[&quot;Signed token to relying party&quot;]
    E --&amp;gt; F[&quot;Hardened identity SDK validates iss, aud, kid, tenant&quot;]
    F --&amp;gt; G[&quot;Resource access granted&quot;]
&lt;p&gt;The architectural response addresses each of the four failure modes one-for-one. But how does this stack against what other major cloud providers publicly document?&lt;/p&gt;
&lt;h2&gt;8. How Other Cloud Providers Custody Signing Keys&lt;/h2&gt;
&lt;p&gt;The Storm-0558 attack class is generic. Any identity provider that signs tokens can in principle have its signing key stolen. The honest cross-provider comparison is therefore not &quot;which provider is most secure&quot; -- the public evidence does not support a defensible ranking. It is instead &quot;which architectural property each provider publicly attests to having&quot; for the keys behind its own production identity tokens.&lt;/p&gt;
&lt;p&gt;The asymmetry of the table below is itself informative. Microsoft, after Storm-0558, has the most explicit public commitments precisely because it had the most public incident.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Property&lt;/th&gt;
&lt;th&gt;Microsoft (post-SFI)&lt;/th&gt;
&lt;th&gt;AWS (IAM Identity Center, Cognito)&lt;/th&gt;
&lt;th&gt;Google (Workspace, Cloud Identity)&lt;/th&gt;
&lt;th&gt;Okta&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td&gt;HSM custody for production IdP signing keys&lt;/td&gt;
&lt;td&gt;Yes -- Azure Managed HSM, FIPS 140-3 Level 3 [@sfi-sept-2024; @azure-managed-hsm]&lt;/td&gt;
&lt;td&gt;Not publicly disclosed for IdP keys; CloudHSM is a customer primitive [@aws-cloudhsm; @aws-iam-idc-security]&lt;/td&gt;
&lt;td&gt;Not publicly disclosed for IdP keys; Cloud HSM is a customer primitive [@gcp-cloud-hsm]&lt;/td&gt;
&lt;td&gt;Not publicly disclosed at this granularity&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Confidential Compute for signing operations&lt;/td&gt;
&lt;td&gt;Yes -- MSA on Azure Confidential VMs (Apr 2025); Entra ID in migration [@sfi-april-2025; @azure-conf-compute]&lt;/td&gt;
&lt;td&gt;Nitro Enclaves available as customer primitive; not publicly disclosed for IdP keys [@aws-nitro-enclaves; @aws-nitro-whitepaper]&lt;/td&gt;
&lt;td&gt;Confidential Computing available as customer primitive; not publicly disclosed for IdP keys [@gcp-confidential-computing]&lt;/td&gt;
&lt;td&gt;Not publicly disclosed&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Automatic rotation of IdP signing keys&lt;/td&gt;
&lt;td&gt;Yes -- MSA and Entra ID automatic rotation in Azure Managed HSM [@sfi-sept-2024]&lt;/td&gt;
&lt;td&gt;AWS KMS default 365-day rotation for KMS keys; IdP rotation cadence not publicly disclosed [@aws-kms-rotation]&lt;/td&gt;
&lt;td&gt;Cloud KMS rotation customer-controllable; Google-owned-and-managed model is opaque to customers [@gcp-cloud-hsm]; Workspace SAML cert rotation is admin-driven [@gcp-workspace-saml-cert-fixed]&lt;/td&gt;
&lt;td&gt;Not publicly disclosed&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tenant/issuer separation enforced in SDK&lt;/td&gt;
&lt;td&gt;Hardened identity SDK validating 90% of Entra ID Microsoft-app tokens (Apr 2025) [@sfi-april-2025; @rfc-8725]&lt;/td&gt;
&lt;td&gt;aws-jwt-verify library enforces iss/aud for Cognito tokens [@aws-jwt-verify; @aws-cognito-jwt]&lt;/td&gt;
&lt;td&gt;Tink library architecture supports key-set discipline [@gcp-tink]&lt;/td&gt;
&lt;td&gt;Not publicly disclosed&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Free customer audit logging&lt;/td&gt;
&lt;td&gt;MailItemsAccessed plus 30+ event classes free since Sep 2023; 2-year internal retention [@ms-blog-jul19-recovered; @sfi-april-2025]&lt;/td&gt;
&lt;td&gt;Standard CloudTrail; per-service audit varies&lt;/td&gt;
&lt;td&gt;Workspace audit log; Cloud Audit Logs&lt;/td&gt;
&lt;td&gt;System Log; baseline included&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Public IdP-signing-key-class incident disclosure&lt;/td&gt;
&lt;td&gt;Yes -- Storm-0558 (Jul 2023) and CSRB report (Apr 2024) [@csrb-report-2024]&lt;/td&gt;
&lt;td&gt;None in 2023-2026 security bulletins surveyed [@aws-security-bulletins]&lt;/td&gt;
&lt;td&gt;None in 2023-2026 security bulletins surveyed [@gcp-security-bulletins]&lt;/td&gt;
&lt;td&gt;October 2023 support-system breach; HAR-file session tokens; no IdP-signing-key compromise [@okta-rca-nov3; @okta-recommended-actions]&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Customer detected before vendor notified&lt;/td&gt;
&lt;td&gt;Yes -- State Department detected Jun 15, 2023, notified Microsoft Jun 16, 2023 [@csrb-report-2024]&lt;/td&gt;
&lt;td&gt;--&lt;/td&gt;
&lt;td&gt;--&lt;/td&gt;
&lt;td&gt;Yes -- Cloudflare detected Oct 18, 2023, contacted Okta before vendor notification [@cloudflare-okta-oct2023]&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;

The right reading of the empty cells in this table is not &quot;AWS and Google are safer than Microsoft.&quot; It is &quot;AWS and Google have not publicly disclosed an incident that would force this level of architectural commitment, so we do not know.&quot; The Wiz Research framing applies cross-provider: &quot;if a signing key for Google, Facebook, Okta or any other major identity provider leaks, the implications are hard to comprehend&quot; [@wiz-storm0558]. Absence of public disclosure is not absence of risk; it is absence of forced disclosure. Microsoft&apos;s transparency, post-CSRB, is the comparison standard not because Microsoft is uniquely vulnerable but because Microsoft has uniquely published.
&lt;p&gt;The Okta October 2023 incident is worth knowing about as a cross-vendor data point precisely because of the structural parallel. On October 18, 2023, Cloudflare detected attacker activity that traced back to Okta and contacted Okta before Okta had notified Cloudflare. BeyondTrust had notified Okta on October 2; the attacker still had access until October 18. Okta&apos;s November 3 RCA traced the root cause to a service-account credential stored in an Okta employee&apos;s personal Google account [@okta-rca-nov3; @okta-recommended-actions; @cloudflare-okta-oct2023]. Different attack class (support-system access, HAR-file session tokens, not IdP signing keys), but the same vendor-detected-by-customer detection inversion the Storm-0558 story made famous.&lt;/p&gt;
&lt;p&gt;For a CISO evaluating any IdP vendor, the four operational questions mapped to the four pre-incident failure modes in Section 3 give a structured RFP. Where is the signing key custodied, and what FIPS certification does the HSM hold? What is the rotation cadence, and is rotation automated? Does the vendor&apos;s validation SDK enforce &lt;code&gt;iss&lt;/code&gt;/&lt;code&gt;aud&lt;/code&gt; separation by default, or does it leave the check to the caller? What audit log events are available to free-tier customers, with what retention?&lt;/p&gt;
&lt;p&gt;CSA&apos;s Cloud Controls Matrix (CEK and IAM domains) and FedRAMP High SC-12 and IA-5 controls together cover most of these in standardized form, but the CAIQ answers are vendor-self-attested [@csa-ccm; @fedramp].&lt;/p&gt;
&lt;h2&gt;9. Theoretical Limits&lt;/h2&gt;
&lt;p&gt;There is one place where the architectural improvements of Section 7 stop. The Storm-0558 threat class lives downstream of a cryptographic identity, and there are limits cryptography itself imposes on what any architecture can do.&lt;/p&gt;
&lt;h3&gt;9.1 The core asymmetry&lt;/h3&gt;
&lt;p&gt;Under the standard cryptographic security notion of existential unforgeability under chosen-message attack -- &lt;strong&gt;EUF-CMA&lt;/strong&gt;, first formalized by Goldwasser, Micali, and Rivest in 1988 [@goldwasser-micali-rivest-1988] -- a signature produced by a private signing key &lt;code&gt;sk&lt;/code&gt; on a message &lt;code&gt;m&lt;/code&gt; is, to any holder of the corresponding verification key &lt;code&gt;vk&lt;/code&gt;, indistinguishable from one produced by the legitimate signer. This is not a deployment weakness. It is the &lt;em&gt;definition&lt;/em&gt; of &quot;signature.&quot; If the verifier could distinguish, the scheme would fail the security property. Formally [@goldwasser-micali-rivest-1988; @boneh-shoup-acc]:&lt;/p&gt;
&lt;p&gt;$$\text{EUF-CMA: } \forall \text{ PPT adversary } \mathcal{A}, ; \Pr[\mathcal{A}^{\text{Sign}&lt;em&gt;{sk}(\cdot)}(vk) \to (m^&lt;em&gt;, \sigma^&lt;/em&gt;) \text{ with } \text{Vrfy}&lt;/em&gt;{vk}(m^&lt;em&gt;, \sigma^&lt;/em&gt;) = 1 \land m^* \notin Q] \leq \text{negl}(\lambda)$$&lt;/p&gt;
&lt;p&gt;where $Q$ is the set of messages the adversary queried to the signing oracle. The adversary&apos;s &lt;em&gt;only&lt;/em&gt; path to forging a verifying signature on a fresh message is to learn &lt;code&gt;sk&lt;/code&gt;. Once it has &lt;code&gt;sk&lt;/code&gt;, every signature it produces is, by construction, valid.&lt;/p&gt;

EUF-CMA, *existential unforgeability under chosen-message attack*, is the standard security definition for digital signature schemes. The notion was formalized by Goldwasser, Micali, and Rivest in their 1988 *SIAM Journal on Computing* paper &quot;A Digital Signature Scheme Secure Against Adaptive Chosen-Message Attacks&quot; [@goldwasser-micali-rivest-1988]; the canonical modern openly-accessible textbook treatment is Boneh-Shoup&apos;s *A Graduate Course in Applied Cryptography*, Chapter 13, which presents the game-based definition used throughout this section [@boneh-shoup-acc]. Informally: an adversary with access to a signing oracle cannot produce a valid signature on a message it has not previously queried, except with negligible probability. The stronger sibling, sEUF-CMA (strong EUF-CMA), additionally forbids producing a new signature on a *previously-queried* message. Both notions imply that, once the private signing key is leaked, the legitimate signer can no longer be distinguished from the holder of the key by any signature-verifying party. This is what makes signing-key theft so consequential -- and is precisely the assumption that the relying-party-side `iss`/`aud` enforcement of RFC 8725 Sections 3.8 and 3.9 is designed to compensate for when validation, not cryptography, is the only remaining line of defense [@rfc-8725].
&lt;p&gt;The consequence for defenders is that all defensive advantage against signing-key-forgery attacks lives &lt;em&gt;outside&lt;/em&gt; cryptographic verification. The seven methods catalogued in Section 7 -- HSM custody, Confidential Compute, automatic rotation, tenant/issuer separation, free audit logging, customer-verifiable attestation (mostly absent at major-CSP scale), and detection by &lt;code&gt;kid&lt;/code&gt;/issuer drift -- are exhaustive over the four levers a defender has against a key whose theft is, after the fact, indistinguishable from legitimate use.&lt;/p&gt;
&lt;h3&gt;9.2 The CSP-monoculture residual&lt;/h3&gt;
&lt;p&gt;When the identity provider is a multi-tenant cloud service provider, the customer cannot independently audit the provider&apos;s key custody. The customer can demand SOC 2 attestations, ISO certifications, and CSA CAIQ answers. Each of these is vendor-self-attested. None is a per-operation cryptographic proof that the signing key the provider used to sign a given token is the one custodied as advertised.&lt;/p&gt;
&lt;p&gt;Customer-side prevention of a CSP-side custody failure is impossible by construction. Customer-side &lt;em&gt;detection&lt;/em&gt; (the methods in Section 11) is possible. The CSRB called this systemic risk out explicitly in its discussion of cloud-identity infrastructure [@csrb-report-2024].&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Key idea:&lt;/strong&gt; Customer-side prevention of a CSP-side custody failure is impossible by construction. Customer-side detection is possible. Prevention sits entirely on the CSP side. This is the asymmetry the Storm-0558 incident made visible.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;9.3 The Microsoft-as-Storm-0558-victim recursion&lt;/h3&gt;
&lt;p&gt;There is a recursive aspect to Microsoft&apos;s position that is worth naming honestly. Microsoft sells controls -- HSM custody, Confidential Compute, hardened SDKs, audit logging -- intended to defend against the attack class Microsoft itself was the highest-profile victim of. Brad Smith&apos;s &quot;without equivocation&quot; framing acknowledged the recursion implicitly. The CSRB&apos;s framing was harsher: a corporate culture that &quot;deprioritized enterprise security investments and rigorous risk management&quot; was, in the Board&apos;s view, what allowed the recursion to obtain [@csrb-report-2024; @dhs-csrb-report-release].&lt;/p&gt;
&lt;h3&gt;9.4 The upper bound&lt;/h3&gt;
&lt;p&gt;The aggregate of HSM custody, Confidential Computing, automatic rotation, and tenant/issuer separation raises the attacker&apos;s required compromise from &quot;find a key in a debugging artifact&quot; to &quot;simultaneously compromise the Confidential VM build pipeline, do so within the rotation window, and bypass the HSM access control or extract a per-key signing oracle.&quot; Each is individually possible. Jointly they are several orders of magnitude harder than the pre-Storm-0558 baseline. This is not a theoretical proof of security; it is empirical defense in depth.&lt;/p&gt;

Imagine the cleanest possible customer-side defense. The customer subscribes only to providers that publish FIPS 140-3 Level 3 certifications, audit reports, and CAIQ answers. The customer pins acceptable issuers in their relying-party validators. The customer monitors for `kid` drift in tokens. Each of these reduces the *detection* latency for a CSP-side compromise. None of them reduces the *probability* that the CSP&apos;s signing key gets stolen tomorrow. Probability reduction at the source sits entirely on the CSP side, because the signing key by construction lives there.
&lt;p&gt;Defense in depth defeats &lt;em&gt;plausible&lt;/em&gt; paths. Whether it defeats the &lt;em&gt;actual&lt;/em&gt; path is unknown -- because, three years on, the actual path is still unknown.&lt;/p&gt;
&lt;h2&gt;10. Open Problems&lt;/h2&gt;
&lt;p&gt;Six open problems remain after three years, in descending order of architectural consequence.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;OP1 -- The mechanism gap.&lt;/strong&gt; Microsoft still does not publicly know how the 2016 MSA signing key was stolen. The methods of Section 7 defeat &lt;em&gt;plausible&lt;/em&gt; paths, but the actual path is undocumented. Until the actual mechanism is recovered (if it ever is), Microsoft is in the position of having raised the bar against the categories of attack it suspects, without being able to confirm that the bar it raised is the one the attacker cleared [@csrb-report-2024; @msrc-key-acquisition].&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;OP2 -- The broader-blast-radius question.&lt;/strong&gt; Wiz Research showed the same key could in principle have signed tokens for SharePoint, Teams, OneDrive, and many third-party &quot;Sign in with Microsoft&quot; applications. Whether the broader scope was exploited and went undetected against telemetry that never existed is unanswered [@wiz-storm0558].&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;OP3 -- CSP regulation as critical infrastructure.&lt;/strong&gt; The CSRB report framed cloud-identity-provider regulation as an open U.S. policy question. The Board recommended treating identity infrastructure as critical infrastructure subject to mandatory disclosure and minimum security baselines. Implementation across Congress, the executive branch, and sector-specific regulators is incomplete [@csrb-report-2024].&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;OP4 -- Cross-provider unrotated-signing-key risk.&lt;/strong&gt; No major non-Microsoft IdP publicly discloses signing-key rotation cadence for its production tokens. Microsoft&apos;s transparency post-CSRB is, at present, the publication standard; AWS&apos;s, Google&apos;s, and Okta&apos;s positions are inferred from product documentation rather than disclosed in the form Microsoft now uses [@aws-iam-idc-security; @gcp-cloud-hsm].&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;OP5 -- Threshold or multi-party signing for production IdP signing keys.&lt;/strong&gt; Practical cryptographic protocols exist. The canonical Schnorr-class construction is FROST -- &quot;Flexible Round-Optimized Schnorr Threshold Signatures&quot; -- introduced by Chelsea Komlo and Ian Goldberg at SAC 2020 [@frost-springer-sac-2020] and standardized as IRTF/CFRG RFC 9591 in June 2024 (a two-round protocol with five normative ciphersuites covering Ed25519, ristretto255, Ed448, P-256, and secp256k1) [@rfc-9591-frost].&lt;/p&gt;
&lt;p&gt;For ECDSA, Yehuda Lindell and Ariel Nof&apos;s CCS 2018 paper described what its abstract called &quot;the first truly practical full threshold ECDSA signing protocol that has both fast signing and fast key distribution&quot; [@lindell-nof-cris]. The DKLs line (Doerner, Kondi, Lee, shelat) extended the work, with the May 2023 update &quot;Threshold ECDSA in Three Rounds&quot; the current standard reference, accompanied by named third-party production implementations from Coinbase, Silence Laboratories, Taurus Group, and BlockDaemon [@dkls-info].&lt;/p&gt;
&lt;p&gt;No major cloud service provider has publicly deployed threshold signing for production IdP keys at the scale where compromise of a single signing oracle still ends the conversation. This is the largest unrealized research-to-practice gap in the entire stack.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;OP6 -- Customer-verifiable attestation of IdP key custody.&lt;/strong&gt; No standardized cryptographic primitive analogous to Certificate Transparency exists for IdP signing-key state. The design pattern was specified by Ben Laurie, Adam Langley, and Emilia Kasper (all of Google) in RFC 6962 in June 2013 -- a Merkle-tree-backed append-only log of TLS certificate issuance that lets any customer cryptographically detect that a certificate authority issued a certificate for their domain that they did not request [@rfc-6962-ct]. There is no equivalent primitive that lets a customer cryptographically detect that a token issuer signed a token naming them as &lt;code&gt;sub&lt;/code&gt; that they (or their identity provider) did not request. This is the architectural ceiling of customer-side defense.&lt;/p&gt;
&lt;p&gt;OP5 and OP6 both have rich primary-source literatures the article only gestures at. For OP5, follow the original FROST paper [@frost-springer-sac-2020] for the security proof reducing to discrete log via the Bellare-Neven Generalized Forking Lemma, the corresponding IRTF specification [@rfc-9591-frost] for the deployable ciphersuites, Lindell-Nof&apos;s CCS 2018 paper [@lindell-nof-cris] for the threshold-ECDSA foundation, and the DKLs project page [@dkls-info] for the most recent three-round construction. For OP6, RFC 6962 [@rfc-6962-ct] specifies the Merkle-tree-backed append-only log structure (the Signed Certificate Timestamp, the Merkle Audit Path, and the Merkle Consistency Proof) that any future IdP-key-custody-transparency protocol would build on.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; OP1, OP5, and OP6 are research-grade open questions in cryptographic systems design. OP2, OP3, and OP4 are policy and disclosure questions, addressable through regulation or industry-coordinated transparency norms. None has a published, deployed answer.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Three research-grade gaps, three policy-grade gaps. The defender, meanwhile, has to ship something on Monday. What should that something be?&lt;/p&gt;
&lt;h2&gt;11. What a Defender Should Do Today&lt;/h2&gt;
&lt;p&gt;The practical guidance splits along three audiences: M365 customers operating the consumer side of this incident&apos;s geometry, builders of multi-tenant SaaS that signs JWTs of their own, and CISOs evaluating cloud identity vendors.&lt;/p&gt;
&lt;h3&gt;11.1 For Microsoft 365 customers&lt;/h3&gt;
&lt;p&gt;First, confirm Purview Audit is enabled at the highest tier your SKU permits, that &lt;code&gt;MailItemsAccessed&lt;/code&gt; is being collected, and that the events are being forwarded to a SIEM with retention of at least 180 days. The features previously gated on Premium have been free for FCEB and most commercial customers since the September 2023 rollout [@ms-blog-jul19-recovered; @cisa-statement-free-logs-fixed].&lt;/p&gt;
&lt;p&gt;Second, maintain an inventory of legitimate &lt;code&gt;(AppID, ClientAppID)&lt;/code&gt; pairs that historically read mailboxes in your tenant, and alert on any deviation. The State Department detection is reproducible only if you have collected the events to detect &lt;em&gt;with&lt;/em&gt;.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; 1. Purview Audit at the highest tier your SKU permits, with &lt;code&gt;MailItemsAccessed&lt;/code&gt; collection enabled. 2. SIEM forwarding with at least 180 days of retention (Microsoft&apos;s new default), preferably longer. 3. A maintained baseline of legitimate &lt;code&gt;(AppID, ClientAppID)&lt;/code&gt; pairs for mailbox access. 4. Alerts on cross-issuer use (an enterprise resource accessed by a token from a consumer or unexpected &lt;code&gt;iss&lt;/code&gt;). 5. Routine threat-hunting against &lt;code&gt;MailItemsAccessed&lt;/code&gt; events filtered by anomalous source IPs, working-hours patterns, and bulk-fetch behavior consistent with exfiltration [@aa23-193a].&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;A baseline-deviation rule, expressed compactly:&lt;/p&gt;
&lt;p&gt;{`
// Pseudocode. Run against ingested JWT validation events from your SIEM.
// &apos;observedKids&apos; is the set of kid values your relying parties have processed.
// &apos;currentJwksKids&apos; is fetched live from the issuer&apos;s JWKS endpoint.&lt;/p&gt;
&lt;p&gt;async function checkKidDrift(issuer, observedKids) {
  const jwks = await fetch(issuer + &apos;/.well-known/openid-configuration&apos;)
    .then(r =&amp;gt; r.json())
    .then(cfg =&amp;gt; fetch(cfg.jwks_uri))
    .then(r =&amp;gt; r.json());&lt;/p&gt;
&lt;p&gt;  const currentKids = new Set(jwks.keys.map(k =&amp;gt; k.kid));&lt;/p&gt;
&lt;p&gt;  for (const kid of observedKids) {
    if (!currentKids.has(kid)) {
      alert({
        severity: &apos;medium&apos;,
        reason: &apos;kid not in current issuer JWKS&apos;,
        issuer,
        kid,
        note: &apos;Either an expired/retired key being replayed, or a forged token signed by a kid the issuer no longer publishes. Both warrant investigation.&apos;
      });
    }
  }
}
`}&lt;/p&gt;
&lt;h3&gt;11.2 For builders of multi-tenant SaaS that signs JWTs&lt;/h3&gt;
&lt;p&gt;If you sign JWTs yourself, you are operating an identity provider, and the Storm-0558 lessons apply to you directly. The checklist is six items.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;HSM custody for signing keys (M1).&lt;/strong&gt; Generate signing keys inside an HSM with &lt;code&gt;exportable=False&lt;/code&gt;. The HSM signs; the application asks. The key never leaves.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Automatic rotation (M3).&lt;/strong&gt; Rotate signing keys on a cadence measured in days to weeks. Publish the new &lt;code&gt;kid&lt;/code&gt; in your JWKS before signing with it; deprecate the old &lt;code&gt;kid&lt;/code&gt; only after relying parties have had time to refresh their JWKS caches.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Issuer and audience enforcement (M4).&lt;/strong&gt; Implement the combined &lt;code&gt;iss&lt;/code&gt; and &lt;code&gt;aud&lt;/code&gt; validation mandate RFC 8725 codifies in Sections 3.8 and 3.9, and &lt;em&gt;test&lt;/em&gt; it with adversarial cross-tenant tokens. Write a test that forges a token from your tenant &lt;code&gt;A&lt;/code&gt; and verifies that your tenant &lt;code&gt;B&lt;/code&gt;&apos;s validator rejects it [@rfc-8725; @rfc-8725-html].&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;kid&lt;/code&gt; drift monitoring (M7).&lt;/strong&gt; Alert on JWT validation events whose &lt;code&gt;kid&lt;/code&gt; is not currently published in your issuer&apos;s JWKS. A forged token signed with a retired or unpublished &lt;code&gt;kid&lt;/code&gt; will surface here.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;JWKS cache invalidation discipline.&lt;/strong&gt; Relying parties cache JWKS aggressively. Coordinate rotation with your largest relying parties; document the cache TTL you expect them to honor. OpenID Connect Discovery 1.0 specifies the JWKS discovery pattern but leaves cache TTL as a deployment choice; the publication of that contract is yours to make [@oidc-discovery]. Storm-0558&apos;s lesson is that an unrotated key is a permanent attack surface; a poorly-coordinated rotation is a permanent operational outage.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;An on-call runbook for rotation failure.&lt;/strong&gt; If automatic rotation fails, what is the page severity? Who is paged? How is manual rotation performed? Microsoft&apos;s 2021 pause of MSA manual rotation (after a manual-rotation-related outage) is the cautionary tale; the runbook is the prevention [@csrb-report-2024].&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;For higher-value deployments, add Confidential Compute (M2) -- run the signing service inside an attested TEE so that even host operators cannot read the in-use key. The threshold of &quot;higher-value&quot; is whatever value of &quot;your customer&apos;s most sensitive resource accessed by a forged token&quot; makes the in-use observation residual worth closing.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; HSM custody plus automatic rotation plus RFC 8725 Sections 3.8 and 3.9 enforcement plus &lt;code&gt;kid&lt;/code&gt; drift monitoring plus rotation runbook. Add Confidential Compute for the in-use observation residual on high-value paths. Test cross-tenant token rejection adversarially; do not trust your validation library defaults [@rfc-8725; @rfc-8725-html; @sfi-sept-2024].&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;11.3 For CISOs evaluating a cloud IdP&lt;/h3&gt;
&lt;p&gt;The four RFP questions, mapped to the four pre-incident failure modes Section 3 catalogued:&lt;/p&gt;
&lt;p&gt;(a) Where is the signing key custodied, and what FIPS certification does the HSM hold?
(b) What is the rotation cadence for the IdP signing keys, and is rotation automated end-to-end?
(c) Does the validation SDK enforce &lt;code&gt;iss&lt;/code&gt;/&lt;code&gt;aud&lt;/code&gt; separation by default, or does it leave the check to the caller?
(d) What audit log events are available to free-tier customers, with what retention, and which events are gated behind paid tiers?&lt;/p&gt;
&lt;p&gt;Map the answers to CSA CCM CEK and IAM domains and FedRAMP High SC-12 and IA-5 controls for cross-vendor normalization [@csa-ccm; @fedramp].&lt;/p&gt;

Ask the vendor: &quot;If your production IdP signing key were stolen today, by what telemetry would you detect it, and within what time? What public-disclosure timeline would you commit to?&quot; The answer reveals more about the vendor&apos;s posture than the answers to the four primary questions, because it forces the vendor to talk about a scenario their marketing material does not.
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Key idea:&lt;/strong&gt; Defense in depth defeats the &lt;em&gt;plausible&lt;/em&gt; attack mechanisms. Whether it defeats the &lt;em&gt;actual&lt;/em&gt; attack mechanism is unknown because, in the highest-stakes documented case, the actual mechanism is still unknown. The defender&apos;s posture is therefore &quot;raise the floor against everything I can imagine,&quot; not &quot;patch the specific bug.&quot; Storm-0558&apos;s enduring lesson is what it means to architect under that constraint.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The seven SOTA methods raise the floor against plausible mechanisms. The customer can demand documentation, alert on deviations, pay for the audit tier they actually need, and vote with procurement dollars for vendors whose disclosure posture matches Microsoft&apos;s post-CSRB stance. Prevention against a CSP-side custody failure remains, as Section 9 noted, on the CSP side by construction.&lt;/p&gt;
&lt;h2&gt;12. FAQ and Study Guide&lt;/h2&gt;

No. That was Microsoft&apos;s September 6, 2023 working hypothesis. Microsoft itself partially retracted it on March 12, 2024 (see Section 4.1 for the full retraction text in the Callout). The Cyber Safety Review Board report on April 2, 2024 then concluded definitively that Microsoft &quot;has been unable to determine how or when Storm-0558 obtained the MSA key&quot; [@msrc-key-acquisition; @csrb-report-2024].

No. The U.S. State Department detected the breach on June 15, 2023, by reviewing `MailItemsAccessed` events in Microsoft 365 Purview audit logs against a maintained baseline of legitimate application IDs. The State Department notified Microsoft on June 16, 2023. Microsoft then confirmed the forgery by comparing the suspicious tokens&apos; `kid` against its own published MSA key rotation history [@csrb-report-2024; @ms-security-jul14].

Microsoft&apos;s preliminary July 2023 disclosure said &quot;approximately 25&quot; [@msrc-storm0558-jul11]. The CSRB&apos;s April 2024 final tally is 22 enterprise organizations and approximately 503 related personal accounts, with approximately 60,000 emails exfiltrated from 10 U.S. State Department accounts alone [@csrb-report-2024].

The attack pattern -- steal an identity provider&apos;s signing key, mint forged tokens, present them to relying parties -- is generic and has prior public examples (Reiner&apos;s 2017 Golden SAML disclosure; the Russian SVR&apos;s 2020 Sunburst weaponization). What is Microsoft-specific is the *cross-tier* consumer/enterprise validation flaw and the unrotated 2016 key. No other major identity provider has publicly disclosed an analogous IdP-signing-key-class incident in the 2023-2026 window, but absence of public disclosure is not absence of risk [@reiner-golden-saml; @aa20-352a; @wiz-storm0558].

The Secure Future Initiative (SFI). Identity signing keys for both MSA and Entra ID are now generated, stored, and automatically rotated in Azure Managed HSM (FIPS 140-3 Level 3) as of the September 2024 progress report. The MSA signing service runs inside Azure Confidential VMs as of April 2025, with Entra ID&apos;s signing service migrating to the same. 90% of Entra ID tokens for Microsoft apps are validated by one consistent hardened identity SDK that enforces `iss`/`aud` separation. And `MailItemsAccessed` plus 30+ Purview audit event classes have been free for FCEB and most commercial customers since the September 2023 rollout, with default retention now 180 days and internal retention extended to two years [@sfi-sept-2024; @sfi-april-2025; @ms-blog-jul19-recovered].

Yes, in principle. Wiz Research&apos;s independent analysis demonstrated the compromised key could have signed tokens for any application using Microsoft&apos;s converged OpenID v2.0 endpoint that accepts personal-account authentication -- SharePoint, Teams, OneDrive, and a long tail of third-party &quot;Sign in with Microsoft&quot; applications. There is no public evidence the broader scope was actually exploited; the publicly documented victims are scoped to Exchange Online and Outlook. Whether broader exploitation occurred and was simply not detected against telemetry that did not exist remains an open question [@wiz-storm0558].

Because it inverts a default assumption. Cloud providers, in their marketing material, are the parties responsible for monitoring their own identity infrastructure. In Storm-0558, the cloud provider did not. A paying customer with a paid-tier audit log saw the anomaly first. The CSRB&apos;s harshest single critique is structural: the commercial logging-tier structure of cloud identity asymmetrically delays detection in favor of well-resourced customers, and the policy response (free Purview Audit features) is a partial but necessary correction [@csrb-report-2024; @cisa-statement-free-logs-fixed].
&lt;p&gt;&amp;lt;StudyGuide slug=&quot;storm-0558-the-outlook-consumer-signing-key-that-forged-government-email&quot; keyTerms={[
  { term: &quot;Storm-0558&quot;, definition: &quot;Microsoft&apos;s taxonomy name (Apr 2023) for the China-affiliated actor responsible for the Summer 2023 MSA-key compromise; renamed Antique Typhoon in Aug 2024.&quot; },
  { term: &quot;MSA issuer&quot;, definition: &quot;Microsoft Account, Microsoft&apos;s consumer identity provider. Its v2.0 OpenID Connect issuer is &lt;code&gt;login.microsoftonline.com/9188040d-6c67-4c5b-b112-36a304b66dad/v2.0&lt;/code&gt; -- the MSA &apos;consumers&apos; tenant on the shared login.microsoftonline.com host (per the live OIDC discovery document at login.microsoftonline.com/consumers/v2.0/.well-known/openid-configuration).&quot; },
  { term: &quot;Entra ID issuer&quot;, definition: &quot;Microsoft&apos;s enterprise identity provider (formerly Azure AD), signing tokens for tenant-scoped workforce identities at &lt;code&gt;login.microsoftonline.com/{enterprise-tenant-GUID}/v2.0&lt;/code&gt; on the same login.microsoftonline.com host as MSA but with a different tenant GUID.&quot; },
  { term: &quot;JWT (JSON Web Token)&quot;, definition: &quot;Compact URL-safe token format with header, payload, and signature; RFC 8725 codifies Best Current Practices for validation.&quot; },
  { term: &quot;kid (Key ID)&quot;, definition: &quot;Identifier in a JWT header naming the public key (in the issuer&apos;s JWKS) used to verify the signature.&quot; },
  { term: &quot;Golden SAML&quot;, definition: &quot;2017 forgery technique (Reiner / CyberArk Labs) using a stolen AD FS Token-Signing key to mint SAML assertions; MITRE T1606.002.&quot; },
  { term: &quot;MailItemsAccessed&quot;, definition: &quot;Microsoft 365 Purview audit event recording every mailbox-item read, including AppID, ClientAppID, and source IP.&quot; },
  { term: &quot;Purview Audit (Premium)&quot;, definition: &quot;Microsoft 365 audit tier that, pre-Sep 2023, gated MailItemsAccessed and other high-value security events behind a paid add-on.&quot; },
  { term: &quot;Cyber Safety Review Board (CSRB)&quot;, definition: &quot;Federal advisory board established by EO 14028 (May 2021); published the Storm-0558 review on April 2, 2024.&quot; },
  { term: &quot;Secure Future Initiative (SFI)&quot;, definition: &quot;Microsoft corporate program (launched Nov 2, 2023) to address the CSRB-identified failure modes; six pillars announced May 3, 2024.&quot; },
  { term: &quot;Azure Managed HSM&quot;, definition: &quot;FIPS 140-3 Level 3 hardware security module service on Marvell LiquidSecurity; custodies MSA and Entra ID signing keys post-SFI.&quot; },
  { term: &quot;Confidential Computing (TEE)&quot;, definition: &quot;Hardware-isolated VM execution environment (AMD SEV-SNP or Intel TDX) that encrypts memory and CPU state against host-operator access; hosts the MSA signing service post-Apr 2025.&quot; },
  { term: &quot;EUF-CMA&quot;, definition: &quot;Existential unforgeability under chosen-message attack; the standard cryptographic security notion for digital signatures.&quot; },
  { term: &quot;RFC 8725&quot;, definition: &quot;JSON Web Token Best Current Practices (IETF, February 2020). Section 3.8 codifies mandatory issuer validation; Section 3.9 codifies mandatory audience validation. The combined check is what Storm-0558&apos;s relying party did not perform.&quot; }
]} questions={[
  { q: &quot;Why is it accurate to say Microsoft did not &apos;cause&apos; Storm-0558 in a single failure, even though the CSRB called it &apos;preventable&apos;?&quot;, a: &quot;The pre-incident architecture failed in four independently-decided ways at once: an unrotated 2016 MSA signing key; software-resident custody for that key; a 2018 converged metadata endpoint whose validation library left iss/aud enforcement to callers; and a 2022 OWA migration onto that endpoint without the iss/aud check. Each decision was made for an independent reason and was defensible in isolation. The &apos;preventable&apos; framing applies to the *aggregate*: any one of the four, fixed in isolation, would have prevented the incident. The CSRB called the security culture &apos;inadequate&apos; precisely because none of the four was fixed before all four aligned.&quot; },
  { q: &quot;What is the difference between the State Department&apos;s detection on June 15, 2023 and Microsoft&apos;s identification on June 16, 2023?&quot;, a: &quot;June 15 was the State Department SOC analyst&apos;s discovery of an anomalous ClientAppID in MailItemsAccessed events. June 16 was Microsoft&apos;s notification by the State Department. Microsoft&apos;s July 14 blog uses &apos;June 16&apos; because that is when Microsoft itself was informed; the CSRB report disambiguates and uses both dates correctly.&quot; },
  { q: &quot;Why does the architectural response (SFI) emphasize defense in depth rather than fixing one specific bug?&quot;, a: &quot;Because the actual key-acquisition mechanism is unknown. Microsoft&apos;s September 2023 crash-dump hypothesis was partially retracted in March 2024, and the April 2024 CSRB report confirmed Microsoft cannot determine how the key was stolen. SFI therefore raises the floor against the plausible mechanism categories (in-memory exposure, debugging-environment leakage, compromised engineering credentials reaching key material) rather than patching a specific code path.&quot; }
]} /&amp;gt;&lt;/p&gt;
</content:encoded><category>storm-0558</category><category>cloud-identity</category><category>token-forgery</category><category>csrb</category><category>oidc</category><category>jwt</category><category>incident-response</category><category>secure-future-initiative</category><author>noreply@paragmali.com (Parag Mali)</author></item><item><title>Rust in the Windows Kernel: A Field Guide to the 2024-2026 Memory-Safety Refit</title><link>https://paragmali.com/blog/rust-in-the-windows-kernel-a-field-guide-to-the-2024-2026-me/</link><guid isPermaLink="true">https://paragmali.com/blog/rust-in-the-windows-kernel-a-field-guide-to-the-2024-2026-me/</guid><description>Rust ships in the Windows 11 kernel today. A primary-sourced field guide to what actually shipped from BlueHat IL 2019 through 24H2 in 2026, and what did not.</description><pubDate>Sat, 23 May 2026 00:00:00 GMT</pubDate><content:encoded>
**Rust ships in the Windows kernel today.** The binary is `%SystemRoot%\System32\win32kbase_rs.sys`, first surfaced in Insider Preview Build 25905 on 12 July 2023 and most recently in the news through Check Point Research&apos;s May 2025 &quot;Denial of Fuzzing&quot; disclosure. The realistic ten-year trajectory is **not** a Windows rewrite. It is &quot;memory-safe by default for newly written code&quot; plus targeted rewrites of high-blast-radius modules, with the unsafe-FFI boundary as the irreducible audit frontier. This article is a primary-sourced field guide to what actually shipped from BlueHat IL 2019 through Windows 11 24H2 in 2026, what did not, and what the next decade looks like.
&lt;h2&gt;1. The Blue Screen That Wasn&apos;t a Bug&lt;/h2&gt;
&lt;p&gt;On 28 May 2025, Microsoft shipped KB5058499 to patch a kernel bug in Windows 11 24H2 [@kb5058499]. The bug was an out-of-bounds array access in a Rust function called &lt;code&gt;region_from_path_mut()&lt;/code&gt; inside the binary &lt;code&gt;%SystemRoot%\System32\win32kbase_rs.sys&lt;/code&gt; [@cybersecuritynews]. Rust correctly detected the access. Because the detection fired at high IRQL inside a kernel binary compiled with &lt;code&gt;panic = &quot;abort&quot;&lt;/code&gt;, the response was a system-wide blue screen [@checkpoint-dof].&lt;/p&gt;
&lt;p&gt;Read that again. &lt;em&gt;Rust&lt;/em&gt;. In &lt;code&gt;ntoskrnl&lt;/code&gt;&apos;s neighbourhood. In production. Detecting a memory-safety violation. Panicking. Bugchecking the box.&lt;/p&gt;

The class of programming error -- buffer overflow, use-after-free, type confusion, integer overflow, double-free, uninitialised read -- where unsafe memory access leads to undefined behaviour. For two decades the Microsoft Security Response Center has reported that roughly seventy percent of Microsoft&apos;s CVE-assigned vulnerabilities come from this class.

The first Windows kernel binary written in Rust. It contains the Win32k GDI region and shape engine, and after 2025 includes portions of the EMF and EMF+ metafile parsing path. The `_rs` suffix is Microsoft&apos;s internal convention for Rust-implemented kernel binaries. You can verify the file exists on any modern Windows 11 install by checking `%SystemRoot%\System32\win32kbase_rs.sys`.The first public ship was Windows 11 Canary-channel Insider Preview Build 25905 on 12 July 2023. The Windows Insider blog called out the change explicitly: &quot;This preview shipped with an early implementation of critical kernel features in safe Rust&quot; [@insider-25905].
&lt;p&gt;The Check Point Research write-up tells the story tightly [@checkpoint-dof]. A handcrafted Enhanced Metafile Format Plus (EMF+) record -- specifically an &lt;code&gt;EmfPlusDrawBeziers&lt;/code&gt; shape with a mismatched point count -- arrives at the kernel by way of a normal-looking &lt;code&gt;NtGdiSelectClipPath&lt;/code&gt; syscall. The metafile parser hands the malformed point array to &lt;code&gt;region_from_path_mut()&lt;/code&gt;, the Rust function that converts a Bezier path into a clipping region. Indexing into the array, Rust observes the index is out of bounds. Safe Rust&apos;s bounds check fires. &lt;code&gt;core::panicking::panic_bounds_check&lt;/code&gt; runs. And because the binary lives in kernel mode, the panic does not unwind: it aborts [@esecurityplanet]. The bugcheck code is &lt;code&gt;SYSTEM_SERVICE_EXCEPTION&lt;/code&gt; [@cybersecuritynews].&lt;/p&gt;

The Windows kernel&apos;s per-CPU priority level, ranging from PASSIVE_LEVEL up through DIRQL. At IRQL ≥ DISPATCH_LEVEL the scheduler cannot run, paged memory cannot be touched, and almost no recovery path is available. A panic at high IRQL has nowhere to go except the system-wide bugcheck.

The Rust compilation profile setting that converts any runtime panic into an immediate process abort rather than stack unwinding. It is mandatory for `no_std` kernel binaries because there is no unwinder, no `std::panic::catch_unwind`, and no way to clean up locks, allocations, or interrupt state held at the point of panic.
&lt;p&gt;Microsoft classified the issue as a moderate-severity denial of service. The patch tightened the bounds check upstream, kept the Rust panic as the last-resort backstop, and shipped on. There is no CVE-2025 RCE here, no privilege escalation, no infoleak: this Rust panic was the security boundary doing exactly what it was designed to do, and the price was a controlled BSOD rather than a memory-corruption primitive in attacker hands [@checkpoint-dof].&lt;/p&gt;
&lt;p&gt;That single bug carries two non-obvious claims that the rest of the article will unpack. First, this is the largest &lt;em&gt;language-level&lt;/em&gt; memory-safety refit in NT&apos;s roughly thirty-three-year history, distinct in kind from &lt;code&gt;/GS&lt;/code&gt; stack cookies, Address Space Layout Randomization (ASLR), Control Flow Guard (CFG), Hypervisor-protected Code Integrity (HVCI), or Intel Control-flow Enforcement Technology (CET). All of those are mitigations that raise the &lt;em&gt;cost&lt;/em&gt; of exploiting a memory-safety bug. Rust eliminates the bug &lt;em&gt;class&lt;/em&gt; in the modules it covers. That is a different kind of fix.&lt;/p&gt;
&lt;p&gt;Second, the realistic ten-year shape is &quot;memory-safe by default for new code,&quot; not &quot;rewrite Windows.&quot; Microsoft&apos;s distinguished engineer Galen Hunt got in trouble in December 2025 for a LinkedIn post about an internal &quot;1 engineer, 1 month, 1 million lines of code&quot; research target [@register-2025-12-24]. Frank X. Shaw, head of Microsoft&apos;s communications, confirmed within days that the company has no plan to rewrite Windows 11 using AI [@windowslatest-galen; @infoworld-not-rewriting]. The trajectory is policy, not project.&lt;/p&gt;
&lt;p&gt;So: Rust in the Windows kernel. Real binary, real BSOD, real patch, real timeline. &lt;em&gt;How did we get here, and why is a Rust-detected memory-safety violation still a system-wide crash?&lt;/em&gt;&lt;/p&gt;
&lt;h2&gt;2. The 70-Percent Number and Why Mitigations Plateaued&lt;/h2&gt;
&lt;p&gt;In early February 2019, in Tel Aviv, Matt Miller stood up at BlueHat IL and asked the question that anchored the next seven years of Microsoft&apos;s security strategy. After two decades of Microsoft Security Response Center (MSRC) triage, what fraction of vulnerabilities are still memory-safety bugs? His answer, drawn from a decade of CVE data: about seventy percent [@miller-bluehat-2019; @infoq-mitigating].&lt;/p&gt;
&lt;p&gt;The number was not new in 2019. The MSRC&apos;s own July 2019 essay re-stated it in plain prose: &quot;approximately 70% of the vulnerabilities Microsoft assigns a CVE each year continue to be memory safety issues&quot; [@msrc-proactive-2019]. It had not moved in a decade despite &lt;code&gt;/GS&lt;/code&gt; stack cookies, Data Execution Prevention (DEP), ASLR, CFG, &lt;a href=&quot;https://paragmali.com/blog/wdac--hvci-code-integrity-at-every-layer-in-windows/&quot; rel=&quot;noopener&quot;&gt;Hypervisor-protected Code Integrity&lt;/a&gt;, and Intel CET [@msrc-safer-2019]. Mark Russinovich repeated the number at RustConf 2025 in Seattle: &quot;about 70% over the past two decades&quot; [@newstack-russinovich].&lt;/p&gt;
&lt;p&gt;A note on attribution. The originating talk was Miller&apos;s, not David Weston&apos;s. The press cycle following Weston&apos;s 2023 BlueHat IL announcement often credited him with the 70% figure. Weston and Russinovich operationalised it; Miller and the MSRC published it. The deck is in the &lt;code&gt;microsoft/MSRC-Security-Research&lt;/code&gt; repository on GitHub under the &lt;code&gt;2019_02_BlueHatIL&lt;/code&gt; directory; you can read it today [@miller-bluehat-2019].Miller was MSRC&apos;s Partner Security Software Engineer at the time of the talk. He has since moved on, but Microsoft kept the BlueHat IL 2019 deck in the public security-research repo as a primary artefact for the figure.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; The 70% figure was roughly the same in 2009 as in 2019. The mitigations stack had absorbed two decades of compiler, OS, and hardware investment without moving the curve. That is why the question shifted from &quot;how do we make exploitation harder&quot; to &quot;how do we eliminate the bug class itself.&quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;To see why the curve stayed flat, walk the supersession history. Each generation of mitigation closed a specific exploitation primitive. None closed a bug class.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;/GS&lt;/code&gt; (Visual Studio .NET 2002/2003) inserted a per-function stack canary to detect linear stack-buffer overruns that overwrote a saved return address [@learn-gs]. It defended only the prologue-epilogue window of stack frames. Heap overflows, non-adjacent stack writes, type confusion, and info-leak-then-corrupt all walked around it.&lt;/p&gt;
&lt;p&gt;DEP / NX (Windows XP Service Pack 2, 2004) marked data pages non-executable so attackers could not jump into a buffer they had written [@learn-dep]. Hovav Shacham&apos;s 2007 paper on Return-Oriented Programming showed how to compose Turing-complete payloads from existing executable code without ever introducing a new instruction [@shacham-rop-2007]. DEP raised exploit cost. It did not close the bug class.&lt;/p&gt;
&lt;p&gt;ASLR (Windows Vista, 2006) randomised module, heap, and stack base addresses so attackers could not pre-compute jump targets [@learn-aslr]. The defeat was a single information-disclosure primitive away. Every modern Windows exploit chain begins with an infoleak.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://paragmali.com/blog/control-flow-integrity-on-windows-cfg-xfg-and-the-cet-shadow/&quot; rel=&quot;noopener&quot;&gt;CFG (Windows 8.1, 2014)&lt;/a&gt; restricted indirect calls to a per-binary set of valid call targets [@learn-cfg]. XFG (announced at BlueHat Shanghai 2019, &lt;code&gt;/guard:xfg&lt;/code&gt; compiler support shipped in MSVC in 2020, available in Windows 11 from 2021 as an opt-in compile-time flag, not enabled by default for third-party binaries) tightened that to type-signed indirect call sites [@quarkslab-xfg; @mcgarr-examining-xfg]. CET shadow stack (broadly shipping in Windows 11 in 2021) sealed the return-address half of the same family on hardware that supports it [@msft-cet-shadow]. All three are forms of Control-Flow Integrity, and all three by construction defend the &lt;em&gt;control-flow graph&lt;/em&gt; only.&lt;/p&gt;

The family of compile-time and hardware mitigations -- including CFG, XFG, and CET shadow stack -- that restricts indirect control transfers (jumps, calls, returns) to a per-binary set of valid targets. CFI is, by construction, blind to attacks that corrupt program data without changing the control-flow graph.

A class of exploitation in which an attacker corrupts program *data* without changing the control-flow graph. Hu et al. proved at IEEE Symposium on Security and Privacy 2016 that DOP is Turing-complete -- meaning an attacker who can corrupt the right pieces of data can compute arbitrary functions while the protected program faithfully follows its original control flow [@hu-dop-2016].
&lt;p&gt;That theorem is the structural ceiling. If DOP can express arbitrary computation while the program&apos;s control-flow graph remains unviolated, then no amount of CFI can close the bug class. Every CFI variant could be implemented perfectly tomorrow and the 70% figure would still not move. The MSRC&apos;s July 2019 &quot;We need a safer systems programming language&quot; essay said the quiet part aloud: &quot;no matter the amount of mitigations put in place, it is near impossible to write memory-safe code using traditional systems-level programming languages at scale&quot; [@msrc-safer-2019].&lt;/p&gt;

The MSRC essay -- written by Matt Miller&apos;s team in the same July 2019 cycle as the BlueHat IL talk -- ends with a striking concession: &quot;rather than providing guidance and tools for addressing flaws, we should strive to prevent the developer from introducing the flaws in the first place&quot; [@msrc-safer-2019]. That sentence is the strategic pivot. After two decades of *mitigation* investment, Microsoft publicly accepted that mitigations could not solve the problem alone. The only structural fixes are at the language layer (eliminate the unsafe primitives) or the hardware layer (enforce safety at every dereference). Hu et al.&apos;s DOP theorem was the formal moment &quot;mitigations are necessary but not sufficient&quot; stopped being a slogan and became math.
&lt;p&gt;The supersession trace is compact enough to fit in one table.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Generation&lt;/th&gt;
&lt;th&gt;Mitigation&lt;/th&gt;
&lt;th&gt;Year&lt;/th&gt;
&lt;th&gt;Closes&lt;/th&gt;
&lt;th&gt;Defeated by&lt;/th&gt;
&lt;th&gt;Residual bug class&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td&gt;G1&lt;/td&gt;
&lt;td&gt;&lt;code&gt;/GS&lt;/code&gt; stack canary&lt;/td&gt;
&lt;td&gt;2002/2003&lt;/td&gt;
&lt;td&gt;Linear stack overruns past return address&lt;/td&gt;
&lt;td&gt;Heap overflows, non-adjacent writes, infoleaks&lt;/td&gt;
&lt;td&gt;Memory corruption (all classes except narrow stack)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;G2&lt;/td&gt;
&lt;td&gt;DEP / NX&lt;/td&gt;
&lt;td&gt;2004&lt;/td&gt;
&lt;td&gt;Code injection into data pages&lt;/td&gt;
&lt;td&gt;ROP (Shacham 2007)&lt;/td&gt;
&lt;td&gt;Memory corruption (control transferred to existing code)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;G3&lt;/td&gt;
&lt;td&gt;ASLR&lt;/td&gt;
&lt;td&gt;2006&lt;/td&gt;
&lt;td&gt;Pre-computed gadget addresses&lt;/td&gt;
&lt;td&gt;Information-disclosure primitives&lt;/td&gt;
&lt;td&gt;Memory corruption (after infoleak)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;G4&lt;/td&gt;
&lt;td&gt;CFG (default) / XFG (opt-in)&lt;/td&gt;
&lt;td&gt;2014 / 2021&lt;/td&gt;
&lt;td&gt;Arbitrary indirect call targets&lt;/td&gt;
&lt;td&gt;Data-oriented programming (Hu 2016)&lt;/td&gt;
&lt;td&gt;Data-only memory corruption&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;G4&lt;/td&gt;
&lt;td&gt;CET shadow stack&lt;/td&gt;
&lt;td&gt;2021&lt;/td&gt;
&lt;td&gt;Return-address rewrites&lt;/td&gt;
&lt;td&gt;DOP, non-return CFI bypass&lt;/td&gt;
&lt;td&gt;Data-only memory corruption&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;G5&lt;/td&gt;
&lt;td&gt;HVCI, Driver Verifier, WDAC&lt;/td&gt;
&lt;td&gt;2015+&lt;/td&gt;
&lt;td&gt;Unsigned/unverified driver code&lt;/td&gt;
&lt;td&gt;Memory corruption in signed drivers&lt;/td&gt;
&lt;td&gt;Memory corruption in trusted code&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;G6&lt;/td&gt;
&lt;td&gt;Rust in the Windows kernel&lt;/td&gt;
&lt;td&gt;2023+&lt;/td&gt;
&lt;td&gt;The bug class itself, in covered modules&lt;/td&gt;
&lt;td&gt;Bugs in &lt;code&gt;unsafe&lt;/code&gt; blocks; panic-as-BSOD&lt;/td&gt;
&lt;td&gt;Logic bugs, FFI invariant violations, DoS via panic&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;The cross-vendor data agrees. Chromium&apos;s own engineering reports peg roughly 70% of high-severity browser bugs as memory safety. Google&apos;s Android security team published in September 2024 that memory-safety vulnerabilities in Android dropped from 76% of total in 2019 to 24% in 2024 -- not by rewriting existing C and C++, but by writing &lt;em&gt;new&lt;/em&gt; code in Rust [@google-android-2024]. The structural fix shows up in the data when it ships.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Key idea:&lt;/strong&gt; Mitigations bound the &lt;em&gt;cost&lt;/em&gt; of exploitation. Only a memory-safe language or capability hardware bounds the &lt;em&gt;size of the bug class itself&lt;/em&gt;. After two decades, the 70% figure had not moved. The structural answer was no longer optional.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;If the structural fix had to come from the language layer, why did Microsoft choose Rust -- and not the safer-systems-language it had been researching since 2006?&lt;/p&gt;

flowchart LR
  GS[&quot;/GS stack cookie&lt;br /&gt;2002 / 2003&quot;] --&amp;gt; DEP[&quot;DEP / NX&lt;br /&gt;2004&quot;]
  DEP --&amp;gt; ASLR[&quot;ASLR&lt;br /&gt;2006&quot;]
  ASLR --&amp;gt; CFG[&quot;CFG / XFG&lt;br /&gt;2014 / 2021&quot;]
  CFG --&amp;gt; CET[&quot;CET shadow stack&lt;br /&gt;2021&quot;]
  CFG --&amp;gt; HVCI[&quot;HVCI + WDAC&lt;br /&gt;2015+&quot;]
  CET --&amp;gt; Rust[&quot;win32kbase_rs.sys&lt;br /&gt;Rust in kernel&lt;br /&gt;2023&quot;]
  HVCI --&amp;gt; Rust
  ASLR -.-&amp;gt;|&quot;defeated by infoleaks&quot;| Bypass1[&quot;arbitrary primitives&quot;]
  CFG -.-&amp;gt;|&quot;defeated by DOP, Hu 2016&quot;| Bypass2[&quot;data-only attacks&quot;]
  Rust ==&amp;gt;|&quot;closes the bug class&lt;br /&gt;in covered modules&quot;| Win[&quot;memory-safe by default&lt;br /&gt;for new code&quot;]
&lt;h2&gt;3. Verona, windows-rs, and the Long Approach&lt;/h2&gt;
&lt;p&gt;Microsoft&apos;s first publicly-named safer-systems-language experiment was not Rust. It was Singularity, the Microsoft Research operating system Galen Hunt and Jim Larus described in &lt;em&gt;ACM SIGOPS Operating Systems Review&lt;/em&gt; in April 2007 [@singularity]. Singularity was built in Sing#, a dialect of C# extended with software-isolated processes, contract-based channels, and manifest-based programs that the OS verified at install time. The idea was the same as Rust&apos;s: prove memory safety at the language level so the runtime cost of process isolation becomes negligible. Singularity worked. It also stayed in the lab.&lt;/p&gt;
&lt;p&gt;A decade later, in 2019, Microsoft Research open-sourced &lt;em&gt;Project Verona&lt;/em&gt; at &lt;code&gt;github.com/microsoft/verona&lt;/code&gt;, a collaboration with Imperial College London and Uppsala University [@verona-github; @verona-msr]. Verona explores &lt;em&gt;concurrent ownership&lt;/em&gt; in regions: where Rust&apos;s borrow checker tracks one owner per object, Verona lets multiple objects share a single region-level ownership lifetime, simplifying some concurrent patterns at the cost of additional runtime structure.Verona&apos;s region-based concurrent ownership lets multiple objects share a single ownership lifetime. The academic publications appear at OOPSLA and PLDI. The repository README is explicit that the project is &quot;not ready to be used outside of research.&quot; Verona remains alive as research. It has not been productised.&lt;/p&gt;
&lt;p&gt;So why did Rust win against two memory-safe languages of Microsoft&apos;s own design?&lt;/p&gt;
&lt;p&gt;The answer is &lt;em&gt;adoption&lt;/em&gt;. Singularity and Verona were technically interesting; the community around them was Microsoft Research. Rust came with crates.io, a stable compiler, a community of working programmers, a foreign-function-interface story, and -- as of January 2020 -- official Microsoft-maintained bindings. Microsoft Research kept its own safe-systems-language line for the questions Rust does not answer, and Microsoft the platform vendor met developers where they already were.&lt;/p&gt;
&lt;p&gt;The pivot to Rust shows up in three threads.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Thread A -- the user-mode bindings.&lt;/strong&gt; In January 2020, Microsoft published &lt;code&gt;microsoft/windows-rs&lt;/code&gt; on GitHub, a set of idiomatic Rust bindings to the entire Win32, Windows Runtime, and Component Object Model surface generated on the fly from Windows-metadata projections. The README is exact: &quot;the windows and windows-sys crates let you call any Windows API past, present, and future using code generated on the fly directly from the metadata describing the API&quot; [@windows-rs-github]. The crate is strictly user-mode. The kernel bindings come later, in a different repository.The premise paragraph that originally framed this article conflated &lt;code&gt;windows-rs&lt;/code&gt; with the kernel bindings. They are different repositories: &lt;code&gt;microsoft/windows-rs&lt;/code&gt; is user-mode (Win32, WinRT, COM); &lt;code&gt;microsoft/windows-drivers-rs&lt;/code&gt; is the kernel and driver bindings. We will look at the latter in section 4.3.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Thread B -- the institutional commitment.&lt;/strong&gt; On 8 February 2021, Microsoft joined the Rust Foundation as a founding (Platinum) member, and announced it was forming an in-house Rust team to contribute compiler and tooling work [@msft-rust-foundation]. The same year, Microsoft began funding Ralf Jung&apos;s verification line at the Max Planck Institute for Software Systems -- the MIRI interpreter, the RustBelt proofs -- both of which give the formal teeth that distinguish &quot;Rust is safer&quot; from &quot;Rust is provably safe in a specific sense.&quot;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Thread C -- the academic foundation.&lt;/strong&gt; In April 2021, Jung, Jourdan, Krebbers, and Dreyer published &quot;Safe Systems Programming in Rust&quot; in &lt;em&gt;Communications of the ACM&lt;/em&gt; [@cacm-jung-2021]. The paper builds on their RustBelt result at POPL 2018, which constructed the first formal, machine-checked safety proof for a realistic subset of Rust [@rustbelt-popl-2018; @rustbelt-popl-page]. The RustBelt theorem has a property no informal language design has: it is &lt;em&gt;extensible&lt;/em&gt;. The project page states the result precisely: &quot;for each new Rust library that uses unsafe features, we can say what verification condition it must satisfy&quot; [@rustbelt-popl-page]. In plain language: safe Rust is type-sound by construction, and every &lt;code&gt;unsafe&lt;/code&gt; block can be discharged separately by a per-library proof obligation.&lt;/p&gt;
&lt;p&gt;That property -- a discharged proof obligation per &lt;code&gt;unsafe&lt;/code&gt; block -- is the engineering hook that makes Rust-in-kernel tractable. The kernel is full of &lt;code&gt;unsafe&lt;/code&gt;. There is no way around that fact; the kernel &lt;em&gt;is&lt;/em&gt; the trusted base, the layer that touches raw pointers and hardware. But if every &lt;code&gt;unsafe&lt;/code&gt; block has a local, statable proof obligation, then the engineering question shrinks from &quot;is the language safe?&quot; to &quot;is the audit of these specific blocks correct?&quot; That is a question reviewers can answer.&lt;/p&gt;

Singularity / Sing# and Verona are not the only Microsoft-adjacent safer-systems-language threads. The Cyclone project (AT&amp;amp;T / Cornell, mid-2000s) added region-based memory management to C; the Spec# / Code Contracts line (Microsoft Research, late 2000s) attached pre- and post-conditions to .NET methods. All three were technically attractive. None achieved industrial-scale adoption. The lesson Microsoft drew from those efforts -- visible in the windows-rs investment -- is that the surrounding toolchain and community trump language design. Rust came with crates.io and a working community; the Microsoft Research languages did not.
&lt;p&gt;By early 2023 the four ingredients were in place: a user-mode-scale Rust footprint at Microsoft, executive commitment via the Foundation, a verification story with RustBelt-grade formal teeth, and a working &lt;code&gt;windows-rs&lt;/code&gt; for the user-mode call sites. The pieces existed.&lt;/p&gt;
&lt;p&gt;What did it take to put Rust inside the kernel itself?&lt;/p&gt;
&lt;h2&gt;4. Three Generations of Microsoft&apos;s Rust-in-Windows Effort&lt;/h2&gt;
&lt;p&gt;The 2019-to-2026 story falls naturally into three generations. Each one solves the problem the previous one identified.&lt;/p&gt;

flowchart TD
  subgraph G1[&quot;Generation 1 -- 2019 to early 2023: Prerequisites&quot;]
    A1[&quot;Miller BlueHat IL 2019&lt;br /&gt;(70 percent figure)&quot;]
    A2[&quot;MSRC safer-systems essay&lt;br /&gt;(July 2019)&quot;]
    A3[&quot;windows-rs&lt;br /&gt;(January 2020)&quot;]
    A4[&quot;Rust Foundation founding&lt;br /&gt;(February 2021)&quot;]
    A5[&quot;Secure Future Initiative&lt;br /&gt;(November 2023)&quot;]
  end
  subgraph G2[&quot;Generation 2 -- March to July 2023: First ship&quot;]
    B1[&quot;Weston BlueHat IL 2023&lt;br /&gt;(March 29 to 30)&quot;]
    B2[&quot;DWriteCore in user-mode Rust&lt;br /&gt;(152K LOC)&quot;]
    B3[&quot;win32kbase_rs.sys in kernel Rust&lt;br /&gt;(36K LOC, behind flag)&quot;]
    B4[&quot;Insider Build 25905&lt;br /&gt;(July 12, 2023)&quot;]
  end
  subgraph G3[&quot;Generation 3 -- 2024 to 2026: Expansion and toolchain&quot;]
    C1[&quot;windows-drivers-rs public&lt;br /&gt;(2024)&quot;]
    C2[&quot;EMF parser in win32kbase_rs&lt;br /&gt;(by May 2025)&quot;]
    C3[&quot;Surface Rust drivers ship&lt;br /&gt;(July 2025)&quot;]
    C4[&quot;Russinovich RustConf 2025&lt;br /&gt;(September 2 to 5, Seattle)&quot;]
    C5[&quot;cargo-wdk on crates.io&lt;br /&gt;(November 2025)&quot;]
  end
  G1 --&amp;gt; G2
  G2 --&amp;gt; G3
&lt;h3&gt;4.1 Generation 1 (2019 to early 2023): the prerequisites&lt;/h3&gt;
&lt;p&gt;Generation 1 was &lt;em&gt;preparation&lt;/em&gt;. Four things had to land before Rust could ship in the kernel itself: Microsoft running Rust at user-mode scale internally; a working &lt;code&gt;no_std&lt;/code&gt; kernel target (the Rust compilation profile that strips the standard library&apos;s OS-services assumptions so a binary can run in kernel context); a verification story credible enough for executive sign-off; and that sign-off itself.&lt;/p&gt;
&lt;p&gt;The chronology is clean. January 2020: &lt;code&gt;windows-rs&lt;/code&gt; ships [@windows-rs-github]. February 2021: Microsoft joins the Rust Foundation as a founding member [@msft-rust-foundation]. 2019 through 2022: Project Verona and Singularity supply the academic foundations and the in-house safer-systems-language credibility [@verona-github; @singularity]. April 2021: the Jung et al. &lt;em&gt;Safe Systems Programming in Rust&lt;/em&gt; paper in &lt;em&gt;CACM&lt;/em&gt; gives the public-facing formal warrant [@cacm-jung-2021]. November 2, 2023: Brad Smith and Charlie Bell launch the Secure Future Initiative (SFI), a company-wide commitment that explicitly names memory-safety-language adoption as a software-engineering pillar [@sfi-onissues; @sfi-secblog]. The March 6, 2024 update on SFI confirms the engineering follow-through after the Storm-0558 and Midnight Blizzard incidents [@sfi-march24].&lt;/p&gt;
&lt;p&gt;The limitation of Generation 1 is in the name. &lt;em&gt;Prerequisites.&lt;/em&gt; No Rust had shipped &lt;em&gt;in&lt;/em&gt; the Windows kernel yet. DWriteCore was in user mode. windows-rs was in user mode. Verona was research. The next generation had to fire the actual gun.&lt;/p&gt;
&lt;h3&gt;4.2 Generation 2 (March to July 2023): the first ship&lt;/h3&gt;
&lt;p&gt;On 29 and 30 March 2023 in Tel Aviv, David &quot;dwizzle&quot; Weston, then Vice President of Enterprise and OS Security at Microsoft, took the BlueHat IL stage and announced two distinct Rust ports.BlueHat IL 2023 was held in Tel Aviv on 29 to 30 March 2023; the dominant English-language press coverage broke same-day on 27 April 2023 when an embargo lifted. The article uses 27 April 2023 throughout when the date in question is the public record rather than the talk itself. The Register&apos;s same-day write-up has the canonical quote set and used Weston&apos;s earlier &quot;Director&quot; title [@register-2023-04-27]. The article keeps the two ports strictly separate because conflating them is the most common error in the secondary coverage.&lt;/p&gt;
&lt;p&gt;The first port was &lt;em&gt;DWriteCore&lt;/em&gt;, the text-rendering and shaping engine that ships through the Windows App SDK. The Register&apos;s same-day coverage carried the line-of-code and performance numbers from Weston&apos;s deck -- we return to the exact counts in §6.2 -- but the load-bearing point at BlueHat IL 2023 was that DWriteCore is strictly user-mode code, not in the kernel [@register-2023-04-27].&lt;/p&gt;
&lt;p&gt;The second port was the one that the article you are reading is mostly about: &lt;strong&gt;&lt;code&gt;win32kbase_rs.sys&lt;/code&gt;&lt;/strong&gt;, a kernel binary containing the Win32k GDI region and shape engine -- about 36,000 lines of Rust, behind a feature flag, with at least one syscall in the Windows kernel implemented in Rust [@register-2023-04-27]. Weston&apos;s verbatim line is the moment that mattered.&lt;/p&gt;

There&apos;s actually a SysCall in the Windows kernel now that is implemented in Rust. -- David Weston, BlueHat IL 2023 [@register-2023-04-27].
&lt;p&gt;The first reader-verifiable artefact of that ship came on 12 July 2023. Windows 11 Canary-channel Insider Preview Build 25905 dropped, and the Windows Insider blog called out the change: &quot;Rust in the Windows Kernel ... win32kbase_rs.sys contains a new implementation of GDI region&quot; [@insider-25905]. From that moment forward, any reader with a recent Windows 11 Insider build could open Explorer at &lt;code&gt;C:\Windows\System32&lt;/code&gt;, sort by name, and find &lt;code&gt;win32kbase_rs.sys&lt;/code&gt; on disk. Generation 2 was a proof of existence. The binary was real. The syscall path it implemented was real. Some pieces ran behind a feature flag, but the cement had set.&lt;/p&gt;
&lt;p&gt;The limitation of Generation 2 was that the toolchain was Microsoft-internal. External driver authors could not reproduce the build pipeline; the &lt;code&gt;no_std&lt;/code&gt; kernel target had not been upstreamed to &lt;code&gt;rust-lang/rust&lt;/code&gt;; the allocator shim that adapted &lt;code&gt;GlobalAlloc&lt;/code&gt; onto &lt;code&gt;ExAllocatePool2&lt;/code&gt; lived in a private repository. Generation 3 had to address the third-party adoption question.&lt;/p&gt;
&lt;h3&gt;4.3 Generation 3 (2024 to mid-2026): expansion and toolchain rollout&lt;/h3&gt;
&lt;p&gt;Generation 3 has four threads running in parallel.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Thread 1: the public driver-development crate suite.&lt;/strong&gt; Microsoft published &lt;code&gt;microsoft/windows-drivers-rs&lt;/code&gt; -- the public repository of Rust crates for Windows driver development [@windows-drivers-rs; @heise-rust]. The repository contains six crates (&lt;code&gt;wdk&lt;/code&gt;, &lt;code&gt;wdk-sys&lt;/code&gt;, &lt;code&gt;wdk-alloc&lt;/code&gt;, &lt;code&gt;wdk-build&lt;/code&gt;, &lt;code&gt;wdk-panic&lt;/code&gt;, &lt;code&gt;wdk-macros&lt;/code&gt;) plus the &lt;code&gt;cargo-wdk&lt;/code&gt; Cargo subcommand that wraps &lt;code&gt;link.exe&lt;/code&gt;, &lt;code&gt;inf2cat&lt;/code&gt;, &lt;code&gt;signtool&lt;/code&gt;, and friends into a coherent Rust build. A companion sample repository &lt;code&gt;microsoft/Windows-rust-driver-samples&lt;/code&gt; provides Rust ports of the canonical Windows Driver Samples [@windows-rust-samples]. The README of &lt;code&gt;windows-drivers-rs&lt;/code&gt; is candid: the project is &quot;still in early stages of development and is not yet recommended for production use&quot; [@windows-drivers-rs]. It also pins LLVM 17 explicitly, because LLVM 18 introduced an ARM64 bindgen bug that breaks WDK header binding generation [@windows-drivers-rs].The &lt;code&gt;windows-drivers-rs&lt;/code&gt; README specifically pins LLVM 17 because LLVM 18 has a bug that causes bindings to fail to generate for ARM64. The fix is expected in LLVM 19. This is the kind of detail that distinguishes a developer-preview toolchain from a production one.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Thread 2: the 2025 in-kernel Rust expansion.&lt;/strong&gt; Between the 2023 ship and the May 2025 Check Point disclosure, the Rust footprint inside &lt;code&gt;win32kbase_rs.sys&lt;/code&gt; grew. The growth surface that became publicly known is the Enhanced Metafile Format (EMF / EMF+) parsing path -- the code that converts a path of Bezier curves into a clipping region [@checkpoint-dof; @cybersecuritynews]. The Check Point disclosure documents &lt;code&gt;region_from_path_mut()&lt;/code&gt; as Rust; the KB5058499 patch hardened the call site upstream of the Rust panic [@kb5058499; @esecurityplanet].The original article-focus paragraph speculated that the 2025 in-kernel expansion was the Win32k DirectDraw stack. No first-party Microsoft material identifies a DirectDraw Rust port. The publicly documented 2025 expansion is in the EMF / EMF+ metafile parser inside &lt;code&gt;win32kbase_rs.sys&lt;/code&gt;. We follow the public record.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Thread 3: the first in-box Rust drivers.&lt;/strong&gt; In July 2025, Microsoft&apos;s Surface team confirmed that several new Copilot+ Surface PCs ship with drivers written in Rust [@winbuzzer-surface; @thurrott-rust]. Microsoft&apos;s Melvin Wang wrote on the Windows Driver Development blog that &quot;the Surface team has contributed further to the open-source &lt;code&gt;windows-drivers-rs&lt;/code&gt; repository for driver development and shipped Surface drivers written in Rust&quot; [@thurrott-rust]. By September 2025, &lt;em&gt;The Register&lt;/em&gt; reported that no production third-party Rust driver had yet shipped through Windows Hardware Compatibility Program (WHCP) certification: CodeQL supports Rust in public preview at version 2.22.1, but only version 2.21.4 is &quot;validated for use with WHCP&quot; [@register-2025-09-04]. The certification path is being assembled in public.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Thread 4: the executive narrative.&lt;/strong&gt; On 2 to 5 September 2025, Mark Russinovich -- Azure CTO, Deputy CISO, and Technical Fellow -- delivered the RustConf 2025 keynote in Seattle, titled &quot;From Blue Screens to Orange Crabs: Microsoft&apos;s Rusty Revolution&quot; [@rustconf-2025-prog; @newstack-russinovich; @itpro-rust]. The keynote made three claims that matter for this article. First, Rust is &quot;mandated for new Azure components that handle untrusted input.&quot; Second, Microsoft is using Rust across &quot;kernel components, a cryptography library (&lt;code&gt;rustls-symcrypt&lt;/code&gt;), and ancillary components (&lt;code&gt;DirectWrite&lt;/code&gt;)&quot; plus Project Mu firmware, &lt;a href=&quot;https://paragmali.com/blog/pluton-a-tpm-on-silicon-microsoft-can-patch/&quot; rel=&quot;noopener&quot;&gt;Caliptra&lt;/a&gt;, the Azure Integrated HSM, OpenVMM, and Hyperlight [@infoq-russinovich]. Third, the Check Point bug is success, not failure: a Rust panic that crashes the box is operationally better than a memory-corruption primitive that escalates privilege [@newstack-russinovich].The InfoQ piece that covers Russinovich&apos;s named-project list is dated May 2025 and is actually about his Rust Nation UK talk earlier that year, not RustConf 2025. The substantive content overlaps, but the venue is not the same. For RustConf 2025 itself, the primary references are the Rust Foundation program page and The New Stack&apos;s same-week summary [@rustconf-2025-prog; @newstack-russinovich].&lt;/p&gt;
&lt;p&gt;One more thread to acknowledge: on 24 December 2025, a LinkedIn post by Microsoft distinguished engineer Galen Hunt triggered a press cycle around an internal &quot;1 engineer, 1 month, 1 million lines of code&quot; research target [@register-2025-12-24]. The picture was corrected within days by Hunt&apos;s own clarification and Frank X. Shaw&apos;s denial that Microsoft has any plan to rewrite Windows 11 using AI [@infoworld-not-rewriting; @windowslatest-galen]. The §9 Aside walks the story in full.&lt;/p&gt;
&lt;p&gt;Three generations in, the toolchain is public, the binaries ship, the executive commitment is on the record, the certification path is being assembled, and the press has been corrected twice on the difference between research and roadmap. The pieces are in place. What is the &lt;em&gt;insight&lt;/em&gt; that makes Rust-in-kernel tractable as an engineering policy?&lt;/p&gt;
&lt;h2&gt;5. Memory-Safe by Default for New Code + the Unsafe-FFI Boundary&lt;/h2&gt;
&lt;p&gt;The structural insight that emerged from Generations 2 and 3 is one Russinovich named explicitly at RustConf 2025: Rust adoption inside an existing C / C++ kernel of roughly thirty million lines -- a widely-cited engineering estimate; Microsoft has not published an exact figure -- is a &lt;em&gt;policy decision&lt;/em&gt;, not a rewrite project [@newstack-russinovich]. The policy has two clauses. For &lt;em&gt;new&lt;/em&gt; code, default to Rust. For existing code, rewrite the high-blast-radius surfaces -- the GDI region engine, the EMF parser -- but not the rest. Russinovich&apos;s framing at the keynote: Rust is &quot;mandated for new Azure components that handle untrusted input&quot; [@infoq-russinovich].&lt;/p&gt;
&lt;p&gt;The new-code policy is empirically validated. The Android security team&apos;s September 2024 publication tracks the share of memory-safety vulnerabilities in Android over five years [@google-android-2024]. The headline curve looks like this.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Year&lt;/th&gt;
&lt;th&gt;Memory-safety share of vulnerabilities&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td&gt;2019&lt;/td&gt;
&lt;td&gt;~76%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2024&lt;/td&gt;
&lt;td&gt;~24%&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;The drop did not come from rewriting existing C and C++. It came from writing &lt;em&gt;new&lt;/em&gt; code in Rust while letting the older code stop being modified. Vulnerabilities in any specific code module decay exponentially as that module stops changing, because (a) bugs that were going to be discovered get patched, and (b) new bugs are introduced primarily by new code [@google-android-2024]. Stop adding C, and the long-run share of memory-safety CVEs falls without anybody rewriting anything. That is the empirical anchor for the &quot;memory-safe by default for new code&quot; policy.&lt;/p&gt;
&lt;p&gt;The policy alone is not enough. The &lt;em&gt;mechanism&lt;/em&gt; that makes it executable is the unsafe-FFI boundary: a narrow, typed, auditable seam where safe Rust meets the C kernel it has to talk to.&lt;/p&gt;

A Rust crate attribute (`#![no_std]`) that opts out of linking the Rust standard library. The crate keeps `core` (and optionally `alloc`), and gets nothing else for free. Required for kernel binaries because the standard library assumes OS services -- file descriptors, threads, dynamic memory through libc -- that the kernel itself is in the business of providing.

The Rust standard-library trait that defines the global memory allocator. In kernel Rust, the trait is implemented by `wdk-alloc` to call `ExAllocatePool2` (allocate) and `ExFreePoolWithTag` (free) -- the NT pool allocator entry points that drivers have used since the late 1990s.

The mechanism a programming language uses to call functions written in another language across an Application Binary Interface (ABI). In kernel Rust, FFI to C kernel headers is generated mechanically by `bindgen` from WDK headers; every call site that crosses the boundary is wrapped in `unsafe`.

A region of Rust code where the compiler relaxes its safety invariants and the programmer accepts responsibility for upholding them. Inside `unsafe`, raw pointers may be dereferenced, mutable static state may be touched, and FFI calls may be made. The safety guarantee of any Rust system is exactly as strong as the human audit of these blocks.
&lt;p&gt;Every Rust kernel module has three &lt;code&gt;unsafe&lt;/code&gt; layers, and the audit of those three layers &lt;em&gt;is&lt;/em&gt; the safety story.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Layer 1: the allocator shim.&lt;/strong&gt; The kernel has no malloc. It has &lt;code&gt;ExAllocatePool2&lt;/code&gt;, which takes a pool type, a size, and a four-character tag, and returns memory from one of the NT pool managers. Rust&apos;s &lt;code&gt;Box&amp;lt;T&amp;gt;&lt;/code&gt;, &lt;code&gt;Vec&amp;lt;T&amp;gt;&lt;/code&gt;, &lt;code&gt;String&lt;/code&gt;, and &lt;code&gt;Arc&amp;lt;T&amp;gt;&lt;/code&gt; all expect a &lt;code&gt;GlobalAlloc&lt;/code&gt; implementation underneath. &lt;code&gt;wdk-alloc&lt;/code&gt; is the bridge: it implements &lt;code&gt;GlobalAlloc&lt;/code&gt; over &lt;code&gt;ExAllocatePool2&lt;/code&gt; / &lt;code&gt;ExFreePoolWithTag&lt;/code&gt;, with &lt;code&gt;unsafe&lt;/code&gt; blocks at every FFI call [@windows-drivers-rs]. If the allocator shim is wrong -- if it forgets to zero memory, mismatches a tag, or returns a misaligned pointer -- every safe Rust collection above it is suddenly &lt;em&gt;not&lt;/em&gt; safe.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Layer 2: the FFI surface.&lt;/strong&gt; Bindgen generates &lt;code&gt;extern &quot;system&quot;&lt;/code&gt; declarations from the WDK headers, turning each C function signature into a Rust prototype with &lt;code&gt;unsafe&lt;/code&gt; semantics [@windows-drivers-rs]. Every cross-language call is an &lt;code&gt;unsafe&lt;/code&gt; block in the Rust caller. The audit obligation here is: did bindgen translate the C signature faithfully? Is the calling convention right? Are pointer ownership and lifetime invariants in the C function&apos;s documentation actually upheld in the Rust caller? Bindgen is mechanical; the audit is not.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Layer 3: the pointer-arithmetic wrappers.&lt;/strong&gt; Where Rust must observe raw C structs -- &lt;code&gt;IRP&lt;/code&gt;, &lt;code&gt;KAPC&lt;/code&gt;, &lt;code&gt;FAST_IO_DISPATCH&lt;/code&gt;, and the various &lt;code&gt;Win32k&lt;/code&gt;-internal layouts -- the boundary code wraps each struct in a typed Rust newtype that asserts the invariants the C code expects, before any non-&lt;code&gt;unsafe&lt;/code&gt; Rust code touches it. A common pattern is the &lt;code&gt;RegionImpl&amp;lt;&apos;a&amp;gt;&lt;/code&gt; family of wrappers: a Rust struct that holds a raw pointer plus a lifetime parameter, with all public methods written in safe Rust and a small number of private &lt;code&gt;unsafe&lt;/code&gt; methods that do the actual dereferencing.&lt;/p&gt;

flowchart TD
  subgraph Safe[&quot;Safe Rust&quot;]
    SR[&quot;Rust kernel module&lt;br /&gt;(safe code, ~90% of LOC)&quot;]
  end
  subgraph Unsafe[&quot;Three unsafe layers&quot;]
    U1[&quot;Allocator shim&lt;br /&gt;wdk-alloc on ExAllocatePool2&quot;]
    U2[&quot;FFI surface&lt;br /&gt;bindgen extern system decls&quot;]
    U3[&quot;Pointer-arithmetic wrappers&lt;br /&gt;IRP, KAPC, FAST_IO_DISPATCH&quot;]
  end
  subgraph C[&quot;C kernel&quot;]
    NT[&quot;ntoskrnl, win32k, hal&quot;]
  end
  SR --&amp;gt; U1
  SR --&amp;gt; U2
  SR --&amp;gt; U3
  U1 --&amp;gt; NT
  U2 --&amp;gt; NT
  U3 --&amp;gt; NT
&lt;p&gt;The picture is small. A typical Rust kernel module has a few hundred FFI call sites, all typed, all auditable, with the conventional Rust community discipline that every &lt;code&gt;unsafe&lt;/code&gt; block carries a &lt;code&gt;SAFETY:&lt;/code&gt; comment justifying the invariants the human author claims to uphold.The Rust community convention is that every &lt;code&gt;unsafe&lt;/code&gt; block carries a &lt;code&gt;SAFETY:&lt;/code&gt; comment justifying the invariants the human author guarantees. Microsoft&apos;s internal review guidance reinforces this for kernel code, and the &lt;code&gt;windows-drivers-rs&lt;/code&gt; samples follow the pattern consistently. The safety guarantee of the whole module is exactly as strong as the audit of those few hundred sites. Not magic. Not a free lunch. A finite, reviewable boundary.&lt;/p&gt;
&lt;p&gt;The &lt;code&gt;windows-drivers-rs&lt;/code&gt; README acknowledges this without euphemism. Microsoft&apos;s Nate Deisinger captured the position in the November 2025 Windows Driver Development blog post:&lt;/p&gt;

Drivers using these crates still need to make use of unsafe blocks for interacting with the Windows operating system, removing some of the benefits of Rust. -- Nate Deisinger, *Towards Rust in Windows Drivers* [@techcommunity-rust-drivers].
&lt;p&gt;That is the load-bearing acknowledgement. Rust does not magically make the C kernel disappear. It pushes the audit frontier &lt;em&gt;to a narrow, typed, fuzz-able boundary&lt;/em&gt;. The wins compound there: type checking catches whole bug families before they ever reach review, fuzzing concentrates on a few hundred sites rather than a million, and the rest of the Rust code -- the other 90% -- gets the full benefit of the safety guarantee with no per-call-site audit burden.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Key idea:&lt;/strong&gt; Rust in the Windows kernel is not magic. It is a finite, typed, fuzzable, reviewable boundary between safe Rust and &lt;code&gt;unsafe&lt;/code&gt; C interop. The safety guarantee of any module is exactly as strong as the audit of that boundary -- which is exactly what makes it engineering policy rather than a wishful slogan.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;That is the strategy in the abstract. What does it actually look like on disk in Windows 11 24H2 in May 2026?&lt;/p&gt;
&lt;h2&gt;6. What Actually Ships in Windows 11 24H2 in 2026&lt;/h2&gt;
&lt;p&gt;This section is an inventory of artefacts you can verify yourself: files on disk, GitHub repositories, KB articles, conference keynotes. Six subsections, each with receipts.&lt;/p&gt;
&lt;h3&gt;6.1 &lt;code&gt;win32kbase_rs.sys&lt;/code&gt; -- the in-kernel GDI region and shape engine&lt;/h3&gt;
&lt;p&gt;File location: &lt;code&gt;%SystemRoot%\System32\win32kbase_rs.sys&lt;/code&gt;. Reader-verifiable on any Windows 11 24H2 install. This is the binary the article opened on.&lt;/p&gt;
&lt;p&gt;Original scope at the April 2023 announcement: the Win32k GDI region and shape engine, about 36,000 lines of Rust, behind a feature flag, with at least one syscall in the Windows kernel implemented in Rust [@register-2023-04-27]. By July 2023 the binary was visible in Canary Insider Preview Build 25905 with the GDI region implementation called out by name in the Windows Insider blog [@insider-25905].&lt;/p&gt;
&lt;p&gt;The 2025 expansion surface is the Enhanced Metafile Format / EMF+ metafile-parsing path. The Check Point Research disclosure -- whose call flow §1 walks through in prose and the diagram below replays -- documents the bug; KB5058499, dated 28 May 2025, hardens the bounds check upstream and ships as a preview update for OS Build 26100.4202 [@checkpoint-dof; @kb5058499].&lt;/p&gt;

sequenceDiagram
  participant App as Untrusted process
  participant K as Win32k C dispatcher
  participant R as win32kbase_rs.sys (Rust)
  participant Panic as core::panicking
  App-&amp;gt;&amp;gt;K: NtGdiSelectClipPath (malformed EMF+ metafile)
  K-&amp;gt;&amp;gt;R: parse EmfPlusDrawBeziers record
  R-&amp;gt;&amp;gt;R: build path with mismatched point count
  R-&amp;gt;&amp;gt;R: region_from_path_mut() indexes out of bounds
  R-&amp;gt;&amp;gt;Panic: panic_bounds_check (safe Rust detects OOB)
  Panic-&amp;gt;&amp;gt;Panic: panic = abort (no unwinder in no_std)
  Panic--&amp;gt;&amp;gt;K: bugcheck SYSTEM_SERVICE_EXCEPTION
  K--&amp;gt;&amp;gt;App: machine bluescreens (DoS, not RCE)
  Note over R,K: Microsoft fixed in KB5058499 on May 28, 2025
&lt;p&gt;The article does not claim a 2026 line-of-code figure for &lt;code&gt;win32kbase_rs.sys&lt;/code&gt;. The most recent first-party number is the April 2023 ~36,000 figure quoted to The Register; no first-party Microsoft source has published a refresh. Open Problem P1 in section 9 keeps that an honest open question.Earlier drafts of articles like this one have asserted &quot;over 100,000 lines of in-kernel Rust by 2026.&quot; That number is not in the primary record. The empirical claim we can make is that the binary exists, the GDI region engine is in Rust, the EMF parser is partly in Rust, and the binary is observably larger and more functional in 2026 than the 2023 ship -- but the actual line count is unpublished.&lt;/p&gt;
&lt;h3&gt;6.2 DWriteCore -- user-mode Rust in the Windows App SDK&lt;/h3&gt;
&lt;p&gt;DWriteCore is the standalone, distributable text-rendering and OpenType-shaping engine that ships through the Windows App SDK. At the April 2023 BlueHat IL announcement Weston quoted about 152,000 lines of Rust plus about 96,000 lines of C++, with a 5 to 15% performance improvement on selected OpenType shaping paths [@register-2023-04-27]. Russinovich at RustConf 2025 framed the team size and timeline: &quot;Two Microsoft developers did it in six months -- 154,000 lines of code&quot; [@newstack-russinovich]. DWriteCore is &lt;em&gt;strictly user mode&lt;/em&gt;. The distribution channel is Windows App SDK 1.2 and above, not Windows 11 22H2/23H2 system updates. It is the user-mode counterpart to the kernel-mode &lt;code&gt;win32kbase_rs.sys&lt;/code&gt;, not the same thing.&lt;/p&gt;
&lt;h3&gt;6.3 The &lt;code&gt;windows-drivers-rs&lt;/code&gt; crate suite&lt;/h3&gt;
&lt;p&gt;The driver-development face of Microsoft&apos;s Rust effort is &lt;code&gt;microsoft/windows-drivers-rs&lt;/code&gt; [@windows-drivers-rs]. The repository contains six crates:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;wdk&lt;/code&gt; -- safe wrappers over the Windows Driver Kit&lt;/li&gt;
&lt;li&gt;&lt;code&gt;wdk-sys&lt;/code&gt; -- bindgen-generated raw FFI bindings&lt;/li&gt;
&lt;li&gt;&lt;code&gt;wdk-alloc&lt;/code&gt; -- the &lt;code&gt;GlobalAlloc&lt;/code&gt; shim onto &lt;code&gt;ExAllocatePool2&lt;/code&gt; / &lt;code&gt;ExFreePoolWithTag&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;wdk-build&lt;/code&gt; -- build script infrastructure for &lt;code&gt;Cargo.toml&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;wdk-panic&lt;/code&gt; -- the &lt;code&gt;panic_handler&lt;/code&gt; implementation with &lt;code&gt;panic = &quot;abort&quot;&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;wdk-macros&lt;/code&gt; -- procedural macros (driver entry-point, IOCTL routing, etc.)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The &lt;code&gt;cargo-wdk&lt;/code&gt; subcommand wraps &lt;code&gt;link.exe&lt;/code&gt;, &lt;code&gt;inf2cat&lt;/code&gt;, and &lt;code&gt;signtool&lt;/code&gt; so &lt;code&gt;cargo build&lt;/code&gt; does the right thing in a developer-mode signed driver workflow. November 2025: &lt;code&gt;cargo-wdk&lt;/code&gt; became publishable on crates.io [@techcommunity-rust-drivers]. The companion samples repository &lt;code&gt;microsoft/Windows-rust-driver-samples&lt;/code&gt; provides Rust ports of the canonical Windows Driver Samples for KMDF and UMDF [@windows-rust-samples].&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; The &lt;code&gt;windows-drivers-rs&lt;/code&gt; README is explicit: &quot;still in early stages of development and is not yet recommended for production use&quot; [@windows-drivers-rs]. Treat the crate suite as a developer-preview toolchain. KMDF 1.33-era bindings are on crates.io; WDM and UMDF are possible with &lt;code&gt;wdk-build&lt;/code&gt; modification. LLVM 17 is pinned because LLVM 18 has an ARM64 bindgen bug.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;6.4 OpenVMM, OpenHCL, and Hyperlight -- the virtualization-side Rust&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;microsoft/openvmm&lt;/code&gt; is a modular, cross-platform Virtual Machine Monitor written in Rust. The README is candid about scope: OpenVMM &quot;can function as a traditional VMM, [but] OpenVMM&apos;s development is currently focused on its role in the OpenHCL paravisor&quot; [@openvmm-github; @openvmm-guide]. OpenHCL is the Rust paravisor for &lt;a href=&quot;https://paragmali.com/blog/inside-azure-confidential-vms-sev-snp-intel-tdx-and-the-para/&quot; rel=&quot;noopener&quot;&gt;AMD SEV-SNP and Intel TDX confidential virtual machines&lt;/a&gt; -- a guest-side software component that sits between the hardware-isolated VM and the host, mediating the small set of operations that have to round-trip [@phoronix-openhcl]. Hyperlight is Microsoft&apos;s Azure-side micro-VMM for very-low-latency function execution, with cold-start times in the low millisecond range [@newstack-russinovich].&lt;/p&gt;

A common confusion: OpenVMM is *not* the production [Hyper-V VSP (Virtualisation Service Provider) front-end](/blog/hyper-v-enlightenments-vmbus-and-the-synthetic-device-model/) that ships inside Windows 11 24H2. OpenVMM is a separate Rust VMM whose primary production deployment in 2026 is as the OpenHCL paravisor for confidential VMs in Azure [@openvmm-github]. The Rust status of the in-Windows Hyper-V VSP front-end has not been publicly announced; we treat it as Open Problem P6 in section 9.
&lt;h3&gt;6.5 The first in-box Rust drivers (Surface)&lt;/h3&gt;
&lt;p&gt;In July 2025, Microsoft&apos;s Surface team confirmed that several new Copilot+ Surface PCs ship with drivers written in Rust [@winbuzzer-surface; @thurrott-rust]. The drivers are &lt;em&gt;Microsoft-internal&lt;/em&gt; -- shipped under the Surface OEM identity, signed through Microsoft&apos;s own driver-signing keys, exempted from the WHCP path that third parties must traverse. &lt;em&gt;The Register&lt;/em&gt;, reporting in September 2025, summarised the third-party status: &quot;There is also work underway to use Rust in the Windows kernel itself, some of which shipped in Windows 11 24H2&quot; but no production third-party Rust driver has yet shipped under WHCP, because CodeQL&apos;s Rust support is in public preview at version 2.22.1 and the WHCP-validated version is still 2.21.4 [@register-2025-09-04].&lt;/p&gt;
&lt;h3&gt;6.6 The toolchain itself&lt;/h3&gt;
&lt;p&gt;The toolchain is the boring foundation that makes everything above possible. The shape, as of mid-2026:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Compiler:&lt;/strong&gt; a recent stable &lt;code&gt;rustc&lt;/code&gt; plus the MSVC linker. No specific minimum version is pinned by the public README; the LLVM dependency through &lt;code&gt;bindgen&lt;/code&gt; is what determines the version floor [@windows-drivers-rs].Earlier coverage has speculated about a &quot;rustc 1.72+&quot; minimum version pin for the Microsoft kernel target. We have not found a first-party Microsoft source that pins this exact number. The README pins LLVM 17 (the bindgen LLVM, not the rustc LLVM) and is silent on the rustc minimum version.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Target:&lt;/strong&gt; a custom &lt;code&gt;no_std&lt;/code&gt; kernel target, not upstreamed to &lt;code&gt;rust-lang/rust&lt;/code&gt;. Third-party reproducibility is therefore limited.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Bindings:&lt;/strong&gt; bindgen-generated &lt;code&gt;extern &quot;system&quot;&lt;/code&gt; declarations from WDK headers; LLVM 17 pinned because of the LLVM 18 ARM64 bug.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Allocator:&lt;/strong&gt; &lt;code&gt;wdk-alloc&lt;/code&gt; implementing &lt;code&gt;GlobalAlloc&lt;/code&gt; over &lt;code&gt;ExAllocatePool2&lt;/code&gt; / &lt;code&gt;ExFreePoolWithTag&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Panic handler:&lt;/strong&gt; &lt;code&gt;wdk-panic&lt;/code&gt; with &lt;code&gt;panic = &quot;abort&quot;&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Build orchestration:&lt;/strong&gt; &lt;code&gt;cargo-wdk&lt;/code&gt; plus &lt;code&gt;cargo-make&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Verification:&lt;/strong&gt; MIRI (where the code is portable enough to interpret), Driver Verifier (always-on inside the kernel test loop), OneFuzz and WinAFL for fuzzing, CodeQL with Rust support in public preview.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Russinovich announced at RustConf 2025 that Microsoft is also working on a &quot;Cargo plugin for MSBuild,&quot; which would let MSBuild-driven internal builds invoke &lt;code&gt;cargo&lt;/code&gt; cleanly [@newstack-russinovich]. Across Microsoft, Rust shows up in many places beyond Windows: SymCrypt-in-Rust, the Project Mu firmware effort, Azure Caliptra, the Azure Integrated HSM, and components of Azure Data Explorer all use Rust today [@infoq-russinovich]. The cross-context Microsoft Rust footprint is much larger than the in-Windows-kernel footprint alone, which gives the kernel effort upstream pressure to keep evolving.&lt;/p&gt;
&lt;p&gt;Microsoft&apos;s posture is articulated and shipping. Is this a Microsoft idiosyncrasy or a cross-vendor convergence?&lt;/p&gt;
&lt;h2&gt;7. Linux, Android, Apple, CHERI: The Cross-Vendor Picture&lt;/h2&gt;
&lt;p&gt;Microsoft is not alone. The convergence is industry-wide -- with structurally different details per vendor.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Rust for Linux.&lt;/strong&gt; Under maintainer Miguel Ojeda, Rust support landed in mainline Linux 6.1 in December 2022 [@rust-for-linux]. The &quot;experimental&quot; label was removed in late 2025. In-tree Rust drivers today include the AMCC QT2025 PHY, Android Binder, the ASIX PHY, DRM Panic QR, the Nova GPU driver (a long-term NVIDIA-replacement effort), Null Block, and the Tyr GPU; out-of-mainline-tree work includes the Apple AGX driver shipping on Asahi Linux, NVMe, and PuzzleFS [@rust-for-linux]. The structural difference from Microsoft&apos;s path is upstream: Linux &lt;em&gt;forbids&lt;/em&gt; bindgen for in-tree drivers. Every Rust binding to a kernel C struct or function must be hand-reviewed and accepted onto LKML. The acceptance criteria are public; the upstream community has been contested -- Wedson Almeida Filho resigned in September 2024 citing non-technical conflicts -- but the project continues under Ojeda and the kernel maintainers&apos; summit has reaffirmed it.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Android.&lt;/strong&gt; Google&apos;s September 2024 &quot;Eliminating Memory Safety Vulnerabilities at the Source&quot; post is the empirical anchor for this article&apos;s policy claim [@google-android-2024]. The numbers we summarised in section 5 (76% in 2019 to 24% in 2024) come from this post. The strategy is identical to Microsoft&apos;s: write new code in Rust, leave most existing C and C++ alone, observe the long-run share of memory-safety bugs drop as the old code stops being modified. Android is the proof of concept that the new-code policy works at scale.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Apple.&lt;/strong&gt; No public kernel-Rust commitment. XNU, Darwin, and IOKit remain C, C++, and Swift. The Asahi GPU project -- which lets Apple Silicon Macs boot Linux with full GPU acceleration -- is written in Rust and runs Apple hardware. But that is Rust running on Linux on Apple silicon, not Rust in Apple&apos;s own operating system. As of mid-2026, Apple has not publicly announced a Rust-in-kernel program.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;CHERI and CHERIoT.&lt;/strong&gt; The structural alternative to &quot;Rust for new code&quot; is &quot;capability hardware that enforces memory safety on every dereference, including for legacy C and C++.&quot; CHERI is the Cambridge and SRI International project that extends conventional instruction set architectures with capability pointers -- tagged, bounded, monotonic references that the hardware checks at every load and store [@cheri-cambridge]. Arm&apos;s Morello prototype processor, released in January 2022, is the first commercial-class implementation. CHERIoT is Microsoft&apos;s microcontroller adaptation, a CHERI-extended RISC-V profile aimed at embedded and IoT workloads [@cheriot-org]. The CHERIoT RTOS lives at &lt;code&gt;microsoft/cheriot-rtos&lt;/code&gt; [@cheriot-rtos-ms]. Structurally CHERI is different from Rust: it does not require a language rewrite, because the hardware enforces spatial and temporal safety on whatever language emits the pointers. Microsoft maintains both lines in parallel -- Rust for general-purpose Windows code, CHERIoT for embedded silicon -- and the two paths are complementary at the platform level.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Project Verona.&lt;/strong&gt; Still alive as Microsoft Research [@verona-github; @verona-msr]. Publications at OOPSLA and PLDI. Not productising. Region-based concurrent ownership answers a different question from Rust&apos;s per-object model. Verona&apos;s value to the kernel-Rust effort was the academic credibility it lent the safer-systems-language thread; as a productisation candidate it remains unpursued.&lt;/p&gt;

flowchart LR
  subgraph Windows
    W1[&quot;win32kbase_rs.sys&lt;br /&gt;Rust GDI/EMF&quot;]
    W2[&quot;windows-drivers-rs&lt;br /&gt;preview&quot;]
    W3[&quot;CHERIoT for IoT&lt;br /&gt;MSR plus partners&quot;]
    W4[&quot;HVCI, CFG, CET&lt;br /&gt;mitigations stack&quot;]
  end
  subgraph Linux
    L1[&quot;Rust for Linux&lt;br /&gt;mainline since 6.1&quot;]
    L2[&quot;Hand-reviewed bindings&lt;br /&gt;no bindgen in-tree&quot;]
  end
  subgraph Android
    A1[&quot;New code in Rust&lt;br /&gt;76 percent to 24 percent&quot;]
    A2[&quot;Existing C / C++&lt;br /&gt;left in place&quot;]
  end
  subgraph Apple
    AP1[&quot;XNU in C and C plus plus&lt;br /&gt;no public Rust commitment&quot;]
    AP2[&quot;Asahi GPU in Rust&lt;br /&gt;on Linux&quot;]
  end
  subgraph Hardware
    H1[&quot;Arm Morello&lt;br /&gt;CHERI prototype 2022&quot;]
    H2[&quot;CHERIoT silicon&quot;]
  end
  W1 --&amp;gt; Common[&quot;memory-safe by default&lt;br /&gt;for new code&lt;br /&gt;plus targeted rewrites&quot;]
  W2 --&amp;gt; Common
  L1 --&amp;gt; Common
  A1 --&amp;gt; Common
  Common --&amp;gt; Defense[&quot;defence in depth&lt;br /&gt;with mitigations stack&lt;br /&gt;plus CHERI hardware where available&quot;]
  W3 --&amp;gt; Defense
  W4 --&amp;gt; Defense
  H1 --&amp;gt; Defense
  H2 --&amp;gt; Defense
&lt;p&gt;The pattern across the table is consistent. Every major operating-system vendor&apos;s safest forward path is some combination of (Rust for new code) + (CHERI-class hardware capabilities where the silicon supports them) + (the existing mitigations stack as defence-in-depth). No vendor is rewriting wholesale. The vendors differ on bindgen-versus-hand-written bindings, on in-tree process discipline, on capability-hardware availability, and on the relative weight of the three threads. They agree on the shape.&lt;/p&gt;
&lt;p&gt;A compact decision matrix may help architects compare the seven approaches that were considered in the source survey.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Approach&lt;/th&gt;
&lt;th&gt;Closes bug class&lt;/th&gt;
&lt;th&gt;Worst-case crash&lt;/th&gt;
&lt;th&gt;Hardware requirement&lt;/th&gt;
&lt;th&gt;Production in Win 11 24H2&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td&gt;Legacy C/C++ with &lt;code&gt;/GS&lt;/code&gt;, DEP, ASLR, CFG, CET&lt;/td&gt;
&lt;td&gt;No (raises cost)&lt;/td&gt;
&lt;td&gt;Memory corruption to exploitation&lt;/td&gt;
&lt;td&gt;None (CET on Tiger Lake+)&lt;/td&gt;
&lt;td&gt;Yes (default)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Rust in-kernel modules&lt;/td&gt;
&lt;td&gt;Yes (covered modules)&lt;/td&gt;
&lt;td&gt;Rust panic to kernel BSOD&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;td&gt;Yes (&lt;code&gt;win32kbase_rs.sys&lt;/code&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;windows-drivers-rs&lt;/code&gt; for third-party drivers&lt;/td&gt;
&lt;td&gt;Yes (per module)&lt;/td&gt;
&lt;td&gt;Driver panic to bugcheck&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;td&gt;Preview only&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CHERI / Arm Morello capability hardware&lt;/td&gt;
&lt;td&gt;Yes (all pointers, all languages)&lt;/td&gt;
&lt;td&gt;Capability fault, process aborted&lt;/td&gt;
&lt;td&gt;Yes (Morello, CHERIoT)&lt;/td&gt;
&lt;td&gt;No (embedded only)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Verification (MIRI, RustBelt, formal proofs)&lt;/td&gt;
&lt;td&gt;Yes (where proofs cover)&lt;/td&gt;
&lt;td&gt;Caught at build time&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;td&gt;Tooling only&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;OpenVMM / OpenHCL (Rust paravisor)&lt;/td&gt;
&lt;td&gt;Yes (paravisor surface)&lt;/td&gt;
&lt;td&gt;Paravisor panic in confidential VM&lt;/td&gt;
&lt;td&gt;TDX or SEV-SNP CPU&lt;/td&gt;
&lt;td&gt;Yes (Azure confidential VMs)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AI-assisted C-to-Rust migration&lt;/td&gt;
&lt;td&gt;Aspirational&lt;/td&gt;
&lt;td&gt;Per migrated module&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;td&gt;Research only&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;The convergence is real. The strategy is articulated. So what &lt;em&gt;cannot&lt;/em&gt; Rust-in-kernel do, even when everything goes right?&lt;/p&gt;
&lt;h2&gt;8. Four Theoretical Limits Rust-in-Kernel Cannot Escape&lt;/h2&gt;
&lt;p&gt;This section is the corrective. Even when everything goes right, Rust-in-kernel runs into four principled limits.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Limit 1: the &lt;code&gt;unsafe&lt;/code&gt; boundary is irreducible.&lt;/strong&gt; Any Rust module that interoperates with the C kernel must call into it; the FFI is &lt;code&gt;unsafe&lt;/code&gt; by construction. The safety guarantee is exactly as strong as the audit of the &lt;code&gt;unsafe&lt;/code&gt; blocks. This is not a flaw in Rust; it is a property of &lt;em&gt;any&lt;/em&gt; safe-language-in-an-unsafe-substrate adoption. Inside &lt;code&gt;unsafe&lt;/code&gt;, Rust does not check what you do; it trusts the human review. The audit therefore has to be load-bearing. The &lt;code&gt;windows-drivers-rs&lt;/code&gt; README&apos;s statement that &quot;drivers ... still need to make use of unsafe blocks for interacting with the Windows operating system&quot; is the candid admission of this limit [@windows-drivers-rs; @register-2025-09-04].&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Limit 2: a Rust panic at high IRQL is a kernel bugcheck.&lt;/strong&gt; Because &lt;code&gt;panic = &quot;abort&quot;&lt;/code&gt; is the only sound policy for &lt;code&gt;no_std&lt;/code&gt; kernel binaries, and because at IRQL ≥ DISPATCH_LEVEL the kernel has nowhere to send a panic except the system-wide bugcheck, a correctly-fired Rust safety check in kernel context becomes a BSOD. Check Point&apos;s &quot;Denial of Fuzzing&quot; disclosure is dispositive: Rust correctly &lt;em&gt;detected&lt;/em&gt; the out-of-bounds access, but the operational response was &lt;code&gt;SYSTEM_SERVICE_EXCEPTION&lt;/code&gt; [@checkpoint-dof; @cybersecuritynews]. Rust transforms memory-corruption CVEs into denial-of-service CVEs in the kernel context. It does &lt;em&gt;not&lt;/em&gt; eliminate the CVE class.&lt;/p&gt;
&lt;p&gt;Russinovich framed this limit as a feature, not a bug, at RustConf 2025:&lt;/p&gt;

This we view as a success ... a bug that would have actually resulted in a potential elevation of privilege, as opposed to a blue screen crash. -- Mark Russinovich, RustConf 2025 [@newstack-russinovich].
&lt;p&gt;He is right operationally. A BSOD is far cheaper than a remote code execution. But the &lt;em&gt;CVE class&lt;/em&gt; did not vanish; it shifted. The new class is &quot;panic-in-kernel-context, denial of service.&quot; That is the bug class that any future Rust-in-kernel security architect has to plan for.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Limit 3: the legacy C and C++ kernel -- roughly thirty million lines on common engineering estimates -- will not be rewritten on any plausible timeline.&lt;/strong&gt; Even Galen Hunt&apos;s &quot;1 engineer, 1 month, 1 million lines of code&quot; research aspiration -- explicitly clarified by Hunt himself as research, not a corporate mandate -- would require sustained multi-decade effort to clear the whole kernel [@register-2025-12-24; @infoworld-not-rewriting; @windowslatest-galen]. Realistically the kernel will keep most of its existing C and C++ for the foreseeable future. The wins come from partial rewrites of high-blast-radius modules plus the new-code policy. &lt;em&gt;Existing modules that do not change do not need to be rewritten to benefit from the new-code policy&lt;/em&gt; -- that is the Android empirical observation [@google-android-2024] -- but they remain potential bug-class carriers nonetheless.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Limit 4: Rust + &lt;code&gt;unsafe&lt;/code&gt; cannot beat hardware capabilities on every bug class.&lt;/strong&gt; CHERI and CHERIoT detect spatial and temporal memory-safety violations at every pointer dereference, including across the C and C++ legacy substrate that language-level approaches cannot rewrite [@cheri-cambridge; @cheriot-org].Spatial safety means accesses stay within an object&apos;s bounds; temporal safety means accesses do not touch freed objects. CHERI capabilities enforce both at the hardware ISA level for every load and store. The most defensible posture combines Rust for new code with CHERI-class hardware where the silicon supports it. Rust is necessary; on legacy code, it is not sufficient. The CHERIoT line at Microsoft (the &lt;code&gt;microsoft/cheriot-rtos&lt;/code&gt; repository [@cheriot-rtos-ms]) is the explicit acknowledgement that Microsoft is investing in both layers because neither alone closes the question.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Key idea:&lt;/strong&gt; Rust transforms memory-corruption CVEs into denial-of-service CVEs in the kernel context. It does not eliminate the CVE class -- and that is still a major win, but it is the actual win, not the marketing one.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;If the policy is sound but the limits are real, what does the next decade actually look like in numbers and named open problems?&lt;/p&gt;
&lt;h2&gt;9. The 2026 Frontier and the Ten-Year Trajectory&lt;/h2&gt;
&lt;p&gt;Open problems matter when they are named. The state-of-the-art survey identified eight; each gets a paragraph here.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;P1. The public corpus size of in-kernel Rust.&lt;/strong&gt; The most recent first-party Microsoft figure remains the April 2023 number quoted to &lt;em&gt;The Register&lt;/em&gt;: about 36,000 lines of Rust in &lt;code&gt;win32kbase_rs.sys&lt;/code&gt; [@register-2023-04-27]. There has been no first-party refresh since. Any 2026 line-of-code claim greater than this -- including the &quot;over 100,000 lines&quot; framing that has circulated in secondary press -- is unsourced. We treat it as an open question.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;P2. Upstreaming the &lt;code&gt;no_std&lt;/code&gt; kernel target.&lt;/strong&gt; Microsoft&apos;s Rust kernel target is not in &lt;code&gt;rust-lang/rust&lt;/code&gt;. Third-party driver developers cannot reproduce the toolchain exactly without internal Microsoft assets. The &lt;code&gt;windows-drivers-rs&lt;/code&gt; repository contains the public-facing crates and the &lt;code&gt;cargo-wdk&lt;/code&gt; build orchestration, but the underlying compilation target is private [@windows-drivers-rs]. Upstreaming it would let external WHCP-bound driver authors build against the same toolchain as Microsoft&apos;s in-box drivers.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;P3. WHCP and driver certification.&lt;/strong&gt; As of September 2025, CodeQL supports Rust at version 2.22.1 (public preview), while only version 2.21.4 is &quot;validated for use with WHCP&quot; [@register-2025-09-04]. No production third-party Rust driver has yet shipped through WHCP. The certification path is being assembled in public; it is not yet open for production third-party submissions.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;P4. Panic-as-BSOD mitigation.&lt;/strong&gt; This is the Check Point bug class -- a correct Rust safety check in kernel context becomes a system-wide bugcheck [@checkpoint-dof]. The options are imperfect. Unwinding instead of aborting is unsound at high IRQL because the unwinder needs to run code that may itself page-fault. IRQL-aware fallbacks (degrade gracefully when at high IRQL, panic when at PASSIVE_LEVEL) are doable but add complexity. More conservative bounds-checking patterns in hot paths can reduce the panic surface but cannot eliminate it. This is an active research and engineering frontier.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;P5. Mechanised formal verification of kernel &lt;code&gt;unsafe&lt;/code&gt; blocks.&lt;/strong&gt; RustBelt-grade proofs exist for specific libraries [@rustbelt-popl-page]. Production-scale verification of arbitrary kernel &lt;code&gt;unsafe&lt;/code&gt; is open. The proof obligations are statable thanks to the RustBelt framework; discharging them at production scale across an entire driver&apos;s worth of &lt;code&gt;unsafe&lt;/code&gt; blocks is not yet routine.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;P6. The Hyper-V VSP migration.&lt;/strong&gt; OpenVMM is in flight as the modular cross-platform Rust VMM whose primary deployment in 2026 is the OpenHCL paravisor [@openvmm-github; @phoronix-openhcl]. The in-Windows Hyper-V VSP front-end&apos;s Rust status is unannounced. This is the Stage-3 P6 open problem; the article does not assert that the production Hyper-V VSP has been migrated.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;P7. AI-assisted migration.&lt;/strong&gt; Galen Hunt&apos;s &quot;1 engineer, 1 month, 1 million lines of code&quot; target is the headline aspiration [@register-2025-12-24]. The methodological dependencies are non-trivial. Code-graph construction has to be accurate. AI translation quality has to be high. Semantic-equivalence preservation has to be checkable. Manual-intervention burden at the unsafe-FFI boundary will be significant. Recent academic work on type-directed C-to-safe-Rust translation -- &lt;em&gt;Compiling C to Safe Rust, Formalized&lt;/em&gt; (Fromherz and Protzenko, OOPSLA 2026) -- shows what mechanical, proof-grade translation looks like for restricted subsets [@arxiv-c-to-rust], and that is the direction Russinovich has framed as preferred over LLM-only approaches.&lt;/p&gt;

On 24 December 2025, Galen Hunt&apos;s LinkedIn post -- *&quot;My goal is to eliminate every line of C and C++ from Microsoft by 2030 ... Our North Star is 1 engineer, 1 month, 1 million lines of code&quot;* -- was reported by *The Register* under the headline &quot;Microsoft wants to replace its entire C and C++ codebase&quot; [@register-2025-12-24]. The press cycle briefly suggested Microsoft was rewriting Windows in Rust. Within days, the picture was corrected. Hunt&apos;s own clarification: &quot;My team&apos;s project is a research project. We are building tech to make migration from language to language possible. ... [The intent was] to find like-minded engineers, not to set a new strategy for Windows 11+ or to imply that Rust is an endpoint&quot; [@infoworld-not-rewriting]. Microsoft&apos;s communications head Frank X. Shaw confirmed to Windows Latest that the company has no plans to rewrite Windows 11 using AI [@windowslatest-galen]. The &quot;1 / 1 / 1M&quot; project is a research aspiration inside the CoreAI group, not a Windows roadmap. Several outlets republished without that correction; the *InfoWorld* and *Windows Latest* pieces are the load-bearing references for the accurate framing.
&lt;p&gt;&lt;strong&gt;P8. Ten-year trajectory.&lt;/strong&gt; Three independent dynamics will determine the shape: Microsoft&apos;s conversion rate of existing high-blast-radius modules, the rate at which &lt;em&gt;new&lt;/em&gt; code is written in Rust by default, and the empirical Android curve as a reference point [@google-android-2024]. The conclusion is not that the legacy kernel will be rewritten. The conclusion is that the &lt;em&gt;share&lt;/em&gt; of memory-safety CVEs in Windows is likely to follow a trajectory shaped like Android&apos;s -- a multi-year decline driven by new-code-in-Rust plus targeted rewrites, with the absolute floor set by the residual &lt;code&gt;unsafe&lt;/code&gt; audit surface at the FFI boundary and the not-rewritten C and C++ that retains some level of new development.&lt;/p&gt;
&lt;p&gt;Quick reference for the questions almost everyone asks comes next. First, what you can do on Monday.&lt;/p&gt;
&lt;h2&gt;10. Practical Guide&lt;/h2&gt;
&lt;p&gt;Four audiences. Each gets a subsection.&lt;/p&gt;
&lt;h3&gt;10.1 For Windows-internals and security researchers&lt;/h3&gt;
&lt;p&gt;Identifying Rust-implemented kernel binaries is the first step. The Microsoft internal convention is the &lt;code&gt;_rs&lt;/code&gt; suffix; the canonical example is &lt;code&gt;%SystemRoot%\System32\win32kbase_rs.sys&lt;/code&gt;. The fastest verification:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; Open PowerShell on any Windows 11 24H2 machine and run: &lt;code&gt;Get-Item C:\Windows\System32\win32kbase_rs.sys&lt;/code&gt;. If the file is present, you are running a Windows with kernel-mode Rust code today.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;{&lt;code&gt;// Demonstrates the logic of:  Test-Path &quot;\$env:SystemRoot\\System32\\win32kbase_rs.sys&quot; const knownRustKernelBinaries = [&quot;win32kbase_rs.sys&quot;]; // Insider Preview 25905 (July 12, 2023) and later const systemRoot = &quot;C:\\\\Windows&quot;; const found = knownRustKernelBinaries.map(b =&amp;gt; systemRoot + &quot;\\\\System32\\\\&quot; + b); for (const path of found) {   console.log(&quot;Expected: &quot; + path); } console.log(&quot;On a real Windows 11 24H2 install, this file is present.&quot;);&lt;/code&gt;}&lt;/p&gt;
&lt;p&gt;Reverse engineering: dumping strings against &lt;code&gt;win32kbase_rs.sys&lt;/code&gt; will surface Rust panic markers like &lt;code&gt;panic_bounds_check&lt;/code&gt;, &lt;code&gt;core::panicking::panic&lt;/code&gt;, and &lt;code&gt;core::result::unwrap_failed&lt;/code&gt; -- the names the Rust standard library inserts when bounds checks or &lt;code&gt;Option::unwrap&lt;/code&gt; calls misfire [@cybersecuritynews]. The Rust v0 name mangling scheme starts with &lt;code&gt;_R&lt;/code&gt; and uses a Punycode-derived encoding for non-ASCII characters [@rust-rfc-2603]; tools that understand the scheme (recent IDA, recent Ghidra, &lt;code&gt;rustfilt&lt;/code&gt;) demangle it. Functions like &lt;code&gt;region_from_path_mut&lt;/code&gt; will appear in the binary as mangled &lt;code&gt;_R...&lt;/code&gt; symbols.&lt;/p&gt;
&lt;p&gt;For reproducing Check Point&apos;s &quot;Denial of Fuzzing&quot; methodology: the public write-up names WinAFL plus WinAFL-Pet as the orchestration tier, with crafted EMF and EMF+ metafile corpora driving &lt;code&gt;NtGdiSelectClipPath&lt;/code&gt; and other Win32k entry points; BugId handles crash triage; MemProcFS handles memory-dump forensics [@checkpoint-dof]. The toolchain is reproducible on a research VM.&lt;/p&gt;

The Check Point harness suggests four productive bug-class targets when fuzzing the Rust kernel surface: (1) `panic_bounds_check` firings at array-indexing sites in geometry pipelines; (2) integer-overflow-checked-arithmetic divergences from C++ behaviour (Rust panics on overflow in debug builds, wraps in release -- check your build profile); (3) allocator-out-of-memory at the `wdk-alloc` boundary, where `ExAllocatePool2` can return `NULL` under pressure; (4) mismatches at `unsafe`-block invariants where a Rust safe wrapper trusts an assertion the C kernel does not actually guarantee.
&lt;h3&gt;10.2 For Windows driver developers evaluating Rust&lt;/h3&gt;
&lt;p&gt;The setup recipe for &lt;code&gt;windows-drivers-rs&lt;/code&gt;:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Clone &lt;code&gt;microsoft/windows-drivers-rs&lt;/code&gt; and &lt;code&gt;microsoft/Windows-rust-driver-samples&lt;/code&gt; [@windows-drivers-rs; @windows-rust-samples].&lt;/li&gt;
&lt;li&gt;Install a recent stable &lt;code&gt;rustc&lt;/code&gt; with the &lt;code&gt;x86_64-pc-windows-msvc&lt;/code&gt; toolchain.&lt;/li&gt;
&lt;li&gt;Install the Windows Driver Kit (WDK) from Microsoft Learn.&lt;/li&gt;
&lt;li&gt;Install LLVM 17. &lt;em&gt;Not&lt;/em&gt; LLVM 18 (ARM64 bindgen bug); LLVM 19 is the awaited fix [@windows-drivers-rs].&lt;/li&gt;
&lt;li&gt;Install &lt;code&gt;cargo-make&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Enter an eWDK developer prompt so MSBuild and the WDK environment variables are present.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;cargo install cargo-wdk&lt;/code&gt; (or take the version published on crates.io as of November 2025) [@techcommunity-rust-drivers].&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;{&lt;code&gt;// The shape of the manifest documented in microsoft/windows-drivers-rs README. const cargoToml = [   &quot;[package]&quot;,   &quot;name = \\&quot;example-driver\\&quot;&quot;,   &quot;version = \\&quot;0.1.0\\&quot;&quot;,   &quot;edition = \\&quot;2021\\&quot;&quot;,   &quot;&quot;,   &quot;[lib]&quot;,   &quot;crate-type = [\\&quot;cdylib\\&quot;]&quot;,   &quot;&quot;,   &quot;[profile.dev]&quot;,   &quot;panic = \\&quot;abort\\&quot;&quot;,   &quot;lto = true&quot;,   &quot;&quot;,   &quot;[profile.release]&quot;,   &quot;panic = \\&quot;abort\\&quot;&quot;,   &quot;lto = true&quot;,   &quot;&quot;,   &quot;[dependencies]&quot;,   &quot;wdk = \\&quot;*\\&quot;&quot;,   &quot;wdk-sys = \\&quot;*\\&quot;&quot;,   &quot;wdk-alloc = \\&quot;*\\&quot;&quot;,   &quot;wdk-panic = \\&quot;*\\&quot;&quot;,   &quot;&quot;,   &quot;[build-dependencies]&quot;,   &quot;wdk-build = \\&quot;*\\&quot;&quot;,   &quot;&quot;,   &quot;[package.metadata.wdk.driver-model]&quot;,   &quot;driver-type = \\&quot;KMDF\\&quot;&quot;,   &quot;kmdf-version-major = 1&quot;,   &quot;target-kmdf-version-minor = 33&quot; ].join(&quot;\\n&quot;); console.log(cargoToml);&lt;/code&gt;}&lt;/p&gt;
&lt;p&gt;KMDF 1.33-era bindings are on crates.io. WDM and UMDF are possible with &lt;code&gt;wdk-build&lt;/code&gt; modification but are not the documented happy path [@windows-drivers-rs]. The WHCP certification path is not yet greenlit for production third-party Rust drivers [@register-2025-09-04]. When &lt;em&gt;not&lt;/em&gt; to choose Rust: driver classes with mature, well-fuzzed C and C++ equivalents, small attack surfaces, and broad cross-vendor deployments where churn cost outweighs Rust&apos;s safety benefits. The first generation of production third-party Rust drivers will likely be filter drivers, virtual-device drivers, and parsers for untrusted formats -- exactly the surfaces where Microsoft&apos;s own first-party Surface drivers have shipped [@winbuzzer-surface; @thurrott-rust].&lt;/p&gt;
&lt;h3&gt;10.3 For security architects&lt;/h3&gt;
&lt;p&gt;Strategic frame: treat Rust adoption as a long-term policy lever, not a near-term mitigation. For the next five years, assume the kernel is still 95%+ C and C++. Treat in-kernel Rust as incremental risk reduction at the modules where it lands -- the GDI region engine, the EMF parser, future surfaces around metafile and graphics parsing, possibly virtualization plumbing. Treat the unsafe-FFI boundary as the audit frontier; concentrate fuzzing, code review, and CodeQL-Rust analysis there. Rely on the existing mitigations stack -- HVCI, CFG, XFG, CET, Driver Verifier, WDAC -- as defence-in-depth that Rust does &lt;em&gt;not&lt;/em&gt; replace [@learn-cfg; @learn-gs; @learn-dep]. Plan for the panic-as-BSOD class as the new DoS surface, and architect monitoring (event-log mining for &lt;code&gt;SYSTEM_SERVICE_EXCEPTION&lt;/code&gt; rates, fleet telemetry for Rust-panic markers) accordingly.&lt;/p&gt;
&lt;h3&gt;10.4 For security researchers fuzzing the Rust kernel surface&lt;/h3&gt;
&lt;p&gt;Check Point&apos;s methodology is the public reference [@checkpoint-dof]; the productive bug classes and the WinAFL + WinAFL-Pet + BugId + MemProcFS pipeline are described in §10.1 above. Two items are specific to the Rust kernel surface and worth adding here. First, integrate CodeQL&apos;s Rust query pack once 2.22.1+ ships in your build pipeline -- only 2.21.4 is WHCP-validated today [@register-2025-09-04]. Second, the empirical companion-CVE pattern: the same Check Point campaign that surfaced &quot;Denial of Fuzzing&quot; also produced several C/C++ GDI vulnerabilities (CVE-2025-30388, CVE-2025-53766, CVE-2025-47984), which suggests there is more to find in the GDI region of Win32k regardless of language [@checkpoint-drawn].&lt;/p&gt;
&lt;h2&gt;11. Frequently Asked Questions&lt;/h2&gt;

No. Microsoft&apos;s stated policy is &quot;memory-safe by default for newly written code&quot; plus targeted rewrites of high-blast-radius modules. The legacy C and C++ kernel is not being rewritten on any announced timeline. Galen Hunt&apos;s &quot;1 engineer, 1 month, 1 million lines of code&quot; framing is a research target inside Microsoft&apos;s CoreAI group; Frank X. Shaw, head of Microsoft&apos;s communications, confirmed within days of the December 2025 LinkedIn post that the company has no plan to rewrite Windows 11 using AI [@windowslatest-galen; @infoworld-not-rewriting; @register-2025-12-24].

No. Rust eliminates the memory-corruption CVE class *in the modules it covers*. It does not eliminate logic bugs, race conditions, or denial-of-service vulnerabilities. Check Point Research&apos;s &quot;Denial of Fuzzing&quot; disclosure -- patched in KB5058499 on 28 May 2025 -- is the dispositive case. Rust correctly detected an out-of-bounds access in `region_from_path_mut()` inside `win32kbase_rs.sys`; because `panic = &quot;abort&quot;` is mandatory in `no_std` kernel binaries, the response was a system-wide BSOD rather than a remote code execution [@checkpoint-dof; @kb5058499].

No. DWriteCore is user-mode code distributed through the Windows App SDK 1.2 and above. The kernel-mode Rust binary is `win32kbase_rs.sys`. The two are often conflated in secondary coverage because David Weston announced both at BlueHat IL 2023 on the same slide deck. DWriteCore is roughly 152,000 lines of Rust plus 96,000 lines of C++; `win32kbase_rs.sys` is the in-kernel piece, originally about 36,000 lines [@register-2023-04-27].

No. The public Microsoft GitHub repository is `microsoft/windows-drivers-rs`. The crate suite contains six crates named `wdk`, `wdk-sys`, `wdk-alloc`, `wdk-build`, `wdk-panic`, and `wdk-macros`. The Cargo subcommand is `cargo-wdk`. There is no &quot;WDR&quot; abbreviation in the official Microsoft naming. The companion samples repository is `microsoft/Windows-rust-driver-samples` [@windows-drivers-rs; @windows-rust-samples].

No. The originating talk was Matt Miller&apos;s at BlueHat IL in early February 2019, titled *Trends, Challenges, and Shifts in Software Vulnerability Mitigation*. The deck is in the `microsoft/MSRC-Security-Research` GitHub repository. Weston and Mark Russinovich later operationalised the figure in their own talks. The Microsoft Security Response Center re-stated it in plain prose in two essays in July 2019 [@miller-bluehat-2019; @msrc-proactive-2019; @msrc-safer-2019; @infoq-mitigating].

No. OpenVMM is a separate modular Rust VMM whose primary 2026 production deployment is as the OpenHCL paravisor for AMD SEV-SNP and Intel TDX confidential virtual machines [@openvmm-github; @phoronix-openhcl]. Hyperlight is the Azure-side production Rust micro-VMM with sub-2-millisecond cold-start times. The in-Windows Hyper-V Virtualisation Service Provider (VSP) front-end&apos;s Rust status has not been publicly announced; that is Open Problem P6 in the article&apos;s frontier section [@newstack-russinovich].
&lt;p&gt;&amp;lt;StudyGuide slug=&quot;rust-in-the-windows-kernel-2026-field-guide&quot; keyTerms={[
  { term: &quot;win32kbase_rs.sys&quot;, definition: &quot;The first Rust-implemented Windows kernel binary; contains the Win32k GDI region/shape engine and, by 2025, parts of the EMF/EMF+ metafile parser.&quot; },
  { term: &quot;panic = abort&quot;, definition: &quot;The Rust compilation profile that converts a panic into an immediate abort rather than stack unwinding; mandatory for no_std kernel binaries.&quot; },
  { term: &quot;no_std&quot;, definition: &quot;Rust crate attribute opting out of the standard library; required for kernel binaries because std assumes OS services the kernel itself provides.&quot; },
  { term: &quot;GlobalAlloc&quot;, definition: &quot;The Rust trait for the global memory allocator; in kernel Rust it is implemented by wdk-alloc over ExAllocatePool2/ExFreePoolWithTag.&quot; },
  { term: &quot;FFI&quot;, definition: &quot;Foreign Function Interface; the ABI-crossing mechanism by which Rust calls C kernel functions. Every FFI call in kernel Rust is an unsafe block.&quot; },
  { term: &quot;CFI&quot;, definition: &quot;Control-Flow Integrity; the mitigation family (CFG, XFG, CET) that defends the control-flow graph; by construction blind to data-only attacks.&quot; },
  { term: &quot;DOP&quot;, definition: &quot;Data-Oriented Programming; Hu et al. (IEEE S&amp;amp;P 2016) proved data-only attacks are Turing-complete and invisible to every CFI variant.&quot; },
  { term: &quot;IRQL&quot;, definition: &quot;Interrupt Request Level; the Windows kernel per-CPU priority. At IRQL &amp;gt;= DISPATCH_LEVEL a panic has nowhere to go except the system bugcheck.&quot; }
]} /&amp;gt;&lt;/p&gt;
&lt;p&gt;The article&apos;s smallest claim is also its largest. Rust is in the Windows kernel today, in production, with a real binary you can list at a real path. The article&apos;s largest claim is its smallest. The realistic ten-year shape is not a Windows rewrite; it is a policy that compounds, over decades, across modules whose authors choose Rust on first contact. The most defended forward posture combines Rust for new code, targeted rewrites of high-blast-radius modules, CHERI-class hardware capabilities where silicon supports them, and the existing mitigations stack as the patient defence-in-depth backstop. Each piece is partial. The combination is the answer to the 70-percent figure that Matt Miller stood up and named in Tel Aviv in early February 2019.&lt;/p&gt;
&lt;p&gt;Now go check &lt;code&gt;C:\Windows\System32\win32kbase_rs.sys&lt;/code&gt;. It is there.&lt;/p&gt;
</content:encoded><category>rust</category><category>windows-kernel</category><category>memory-safety</category><category>win32k</category><category>msrc</category><category>cve-mitigations</category><category>secure-future-initiative</category><author>noreply@paragmali.com (Parag Mali)</author></item></channel></rss>