Important CVSS 7.8 EPSS 0.00304 🔬 Patch diffed 2026-05 archive

Executive Summary

Heap-based buffer overflow in Windows Cryptographic Services allows an authorized attacker to elevate privileges locally.

Overview

7.8
CVSS HIGH
Important
MS Severity
Not Exploited
MS Exploit Status
Less Likely
MS Exploit Likelihood
Category Elevation of Privilege
Released May 12 2026
Last Updated May 12 2026
Publicly Disclosed No
CISA KEV Not Listed
Known Exploits None Known
EPSS Score 0.00304 — 0.22947 percentile
NVD CVSS 7.8 HIGH — matches MSRC

CVSS Vector

CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H/E:U/RL:O/RC:C
ATTACK VECTOR
Local
ATTACK COMPLEXITY
Low
PRIVILEGES REQUIRED
Low
USER INTERACTION
None
SCOPE
Unchanged
CONFIDENTIALITY
High
INTEGRITY
High
AVAILABILITY
High
EXPLOIT CODE MATURITY
Unproven
REMEDIATION LEVEL
Official Fix
REPORT CONFIDENCE
Confirmed
Temporal Score: 6.8

EPSS Score

0.00304
probability of exploitation in the next 30 days
0.22947 percentile - updated 2026-08-14
View on FIRST.org

Affected Products

23 affected products
Product KB Article Severity Impact Restart Required
Windows 10 Version 1607 for 32-bit Systems 5087537 (Security Update) Important Elevation of Privilege Yes
Windows 10 Version 1607 for x64-based Systems 5087537 (Security Update) Important Elevation of Privilege Yes
Windows 10 Version 1809 for 32-bit Systems 5087538 (Security Update) Important Elevation of Privilege Yes
Windows 10 Version 1809 for x64-based Systems 5087538 (Security Update) Important Elevation of Privilege Yes
Windows 10 Version 21H2 for 32-bit Systems 5087544 (Security Update) Important Elevation of Privilege Yes
Windows 10 Version 21H2 for ARM64-based Systems 5087544 (Security Update) Important Elevation of Privilege Yes
Windows 10 Version 21H2 for x64-based Systems 5087544 (Security Update) Important Elevation of Privilege Yes
Windows 10 Version 22H2 for 32-bit Systems 5094127 (Security Update) Important Elevation of Privilege Yes
Windows 10 Version 22H2 for ARM64-based Systems 5094127 (Security Update) Important Elevation of Privilege Yes
Windows 10 Version 22H2 for x64-based Systems 5094127 (Security Update) Important Elevation of Privilege Yes
Windows 11 Version 23H2 for ARM64-based Systems 5087420 (Security Update) Important Elevation of Privilege Yes
Windows 11 Version 23H2 for x64-based Systems 5093998 (Security Update) Important Elevation of Privilege Yes
Windows 11 Version 24H2 for ARM64-based Systems 5089549 (Security Update) 5089466 (Security Hotpatch Update) Important Elevation of Privilege 5082063 Base: 7.8 Temporal: 6.8 Vector: CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H/E:U/RL:O/RC:C 10.0.26100.8457 10.0.26100.8390 Yes None Windows 11 Version 24H2 for x64-based Systems 5089549 (Security Update) 5089466 (Security Hotpatch Update) Important Elevation of Privilege 5082063 Base: 7.8 Temporal: 6.8 Vector: CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H/E:U/RL:O/RC:C 10.0.26100.8457 10.0.26100.8390 Yes None Windows 11 Version 25H2 for ARM64-based Systems 5089549 (Security Update) 5089466 (Security Hotpatch Update) Important Elevation of Privilege 5083769 Base: 7.8 Temporal: 6.8 Vector: CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H/E:U/RL:O/RC:C 10.0.26200.8457 10.0.26200.8390 Yes None Windows 11 Version 25H2 for x64-based Systems 5089549 (Security Update) 5089466 (Security Hotpatch Update) Important Elevation of Privilege 5083769 Base: 7.8 Temporal: 6.8 Vector: CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H/E:U/RL:O/RC:C 10.0.26200.8457 10.0.26200.8390 Yes None Windows 11 Version 26H1 for ARM64-based Systems 5089548 (Security Update) Important Elevation of Privilege Yes
Windows 11 version 26H1 for x64-based Systems 5089548 (Security Update) Important Elevation of Privilege Yes
Windows Server 2012 5087470 (Monthly Rollup) Important Elevation of Privilege Yes
Windows Server 2012 (Server Core installation) 5087470 (Monthly Rollup) Important Elevation of Privilege Yes
Windows Server 2012 R2 5087471 (Monthly Rollup) Important Elevation of Privilege Yes
Windows Server 2012 R2 (Server Core installation) 5087471 (Monthly Rollup) Important Elevation of Privilege Yes
Windows Server 2016 5087537 (Security Update) Important Elevation of Privilege Yes
Windows Server 2016 (Server Core installation) 5087537 (Security Update) Important Elevation of Privilege Yes
Windows Server 2019 5087538 (Security Update) Important Elevation of Privilege Yes
Windows Server 2019 (Server Core installation) 5087538 (Security Update) Important Elevation of Privilege Yes
Windows Server 2022 5087545 (Security Update) 5087424 (Security Hotpatch Update) Important Elevation of Privilege 5082142 Base: 7.8 Temporal: 6.8 Vector: CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H/E:U/RL:O/RC:C 10.0.20348.5139 10.0.20348.5074 Yes None Windows Server 2022 (Server Core installation) 5087545 (Security Update) 5087424 (Security Hotpatch Update) Important Elevation of Privilege 5082142 Base: 7.8 Temporal: 6.8 Vector: CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H/E:U/RL:O/RC:C 10.0.20348.5139 10.0.20348.5074 Yes None Windows Server 2022, 23H2 Edition (Server Core installation) 5087541 (Security Update) Important Elevation of Privilege Yes

Patches

10 patches
Article Type Restart
5087537 Security Update Yes
5087538 Security Update Yes
5087544 Security Update Yes
5094127 Security Update Yes
5087420 Security Update Yes
5093998 Security Update Yes
5089548 Security Update Yes
5087470 Monthly Rollup Yes
5087471 Monthly Rollup Yes
5087541 Security Update Yes

Patch Diff

ghidriff · cryptxml.dll (KB5089549)

Heap buffer overflow (CWE-122) via an alignment size-budget mismatch in cryptxml.dll I_XmlUnmarshallKeyInfo, local EoP. The function converts a <KeyInfo> element to a CryptoAPI structure with a two-pass method (pass 1 computes total size + single AiAlloc/HeapAlloc; pass 2 copies). For the ECDSA KeyValue path (subtype 5, uncompressed EC point 0x04||X||Y, coordinate length Size=(point_len-1)/2), pass 1 budgeted only 2*Size for the two coordinates, but pass 2 advanced the write pointer by ALIGN8(Size)=(Size+7)&~7 per coordinate, consuming 2*ALIGN8(Size). When Size%8!=0 the allocation is smaller than actual use by 2*(8-(Size%8)) bytes: P-256(32)/P-384(48) are 8-aligned and safe, but P-521(Size=66) overflows by 12 bytes. A second bug cached the last ECDSA entry's Size/pointer, so multiple ECDSA entries of differing sizes were copied with wrong values. Reachable via CryptXmlOpenToDecode on externally supplied XML signatures. Diff of cryptxml.dll 10.0.26100.8115 -> .8457 (May 12 2026, KB5089549) confirms the fix: gated behind CFR flag Feature_1881917752, pass 1's dwBytes size budget now applies ((v+7)&0xfffffffffffffff8) ALIGN8 to the ECDSA coordinates (and each field), matching pass 2; pass 2 re-reads each entry's size/pointer from the source; subtype->type mapping factored into _GetKeyValueType and cleanup loop restructured. Applies to both the macro-prefix loop and the global-list loop. Note: our diff shows Feature_1881917752 (build/arch); the ALIGN8 budget fix is as described.

Pre-patch version 10.0.26100.8115 Download
Post-patch version 10.0.26100.8457 Download
Function Address Change Note
I_XmlUnmarshallKeyInfo code change code (ALIGN8 size budget + per-entry re-read, CFR-gated) Pre: pass-1 size budget counted 2*Size for ECDSA X||Y while pass-2 copy advanced by 2*ALIGN8(Size) -> under-allocation, P-521(66) overflows 12 bytes; last-entry Size/ptr cached and reused for all entries. Post (Feature_1881917752): dwBytes accumulates ((val+7)&~7) ALIGN8 per field incl. ((coord+1)*2+7)&~7 for the coordinate pair; pass 2 re-reads per-entry size/pointer; _GetKeyValueType helper; restructured cleanup.
Feature_1881917752 gate added (CFR gate) CFR flag gating the aligned size budget and per-entry re-read; original under-counting path still ships when disabled.
View full diff report View RCA report

Attack Path

A crafted ECDSA P-521 KeyValue makes the size budget under-count vs the aligned copy, overflowing the heap allocation

Attack path for CVE-2026-40377 A crafted ECDSA P-521 KeyValue makes the size budget under-count vs the aligned copy, overflowing the heap allocation 01 — ENTRY A crafted XML signature document is processed via CryptXmlOpenToDecode cryptxml.dll I_XmlUnmarshallKeyInfo unmarshals <KeyInfo> using a two-pass size-then-copy approach. AV:L/PR:L: local processing of attacker-supplied XML. 02 — CONTROLLED INPUT Includes an ECDSA KeyValue with a non-8-aligned coordinate size (P-521, Size=66) For 0x04||X||Y, Size=(point_len-1)/2. Pass 1 budgets 2*Size; pass 2 advances by ALIGN8(Size) per coordinate. 03 — MISSING CHECK Pass-1 size budget omits the 8-byte alignment that pass-2 copy applies (CWE-122) AiAlloc is sized to 2*Size but 2*ALIGN8(Size) is written; for Size%8!=0 the used size exceeds the budget by 2*(8-(Size%8)) (12 bytes for P-521). 04 — PRIMITIVE Heap overflow of the under-sized buffer with attacker key bytes -> EoP Pass 2 writes past the allocation (and multi-entry mis-copy compounds it). The May 2026 fix (Feature_1881917752) ALIGN8s the pass-1 budget and re-reads per-entry values.

Derived from the patch delta: the checks added by the vendor identify which fields crossed a trust boundary unvalidated. Reachability and privilege are taken from the call chain in the RCA report.

Known Exploits

Acknowledgments