Important CVSS 7.8 EPSS 0.0026 🔬 Patch diffed 2026-07 archive

Executive Summary

Out-of-bounds read in Code Integrity DLL (ci.dll) 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 Jul 14 2026
Last Updated Jul 14 2026
Publicly Disclosed No
CISA KEV Not Listed
Known Exploits None Known
EPSS Score 0.0026 — 0.1771 percentile
NVD CVSS 7.8 HIGH — differs from 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.1

EPSS Score

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

Affected Products

27 affected products
Product KB Article Severity Impact Restart Required
Windows 10 Version 1607 for 32-bit Systems 5099535 (Security Update) Important Elevation of Privilege Yes
Windows 10 Version 1607 for x64-based Systems 5099535 (Security Update) Important Elevation of Privilege Yes
Windows 10 Version 1809 for 32-bit Systems 5099538 (Security Update) Important Elevation of Privilege Yes
Windows 10 Version 1809 for x64-based Systems 5099538 (Security Update) Important Elevation of Privilege Yes
Windows 10 Version 21H2 for 32-bit Systems 5099539 (Security Update) Important Elevation of Privilege Yes
Windows 10 Version 21H2 for ARM64-based Systems 5099539 (Security Update) Important Elevation of Privilege Yes
Windows 10 Version 21H2 for x64-based Systems 5099539 (Security Update) Important Elevation of Privilege Yes
Windows 10 Version 22H2 for 32-bit Systems 5099539 (Security Update) Important Elevation of Privilege Yes
Windows 10 Version 22H2 for ARM64-based Systems 5099539 (Security Update) Important Elevation of Privilege Yes
Windows 10 Version 22H2 for x64-based Systems 5099539 (Security Update) Important Elevation of Privilege Yes
Windows 11 Version 24H2 for ARM64-based Systems 5101650 (Security Update) Important Elevation of Privilege Yes
Windows 11 Version 24H2 for x64-based Systems 5101650 (Security Update) Important Elevation of Privilege Yes
Windows 11 Version 25H2 for ARM64-based Systems 5101650 (Security Update) Important Elevation of Privilege Yes
Windows 11 Version 25H2 for x64-based Systems 5101650 (Security Update) Important Elevation of Privilege Yes
Windows 11 Version 26H1 for ARM64-based Systems 5101649 (Security Update) Important Elevation of Privilege Yes
Windows 11 version 26H1 for x64-based Systems 5101649 (Security Update) Important Elevation of Privilege Yes
Windows Server 2012 5099445 (Monthly Rollup) Important Elevation of Privilege Yes
Windows Server 2012 (Server Core installation) 5099445 (Monthly Rollup) Important Elevation of Privilege Yes
Windows Server 2012 R2 5099444 (Monthly Rollup) Important Elevation of Privilege Yes
Windows Server 2012 R2 (Server Core installation) 5099444 (Monthly Rollup) Important Elevation of Privilege Yes
Windows Server 2016 5099535 (Security Update) Important Elevation of Privilege Yes
Windows Server 2016 (Server Core installation) 5099535 (Security Update) Important Elevation of Privilege Yes
Windows Server 2019 5099538 (Security Update) Important Elevation of Privilege Yes
Windows Server 2019 (Server Core installation) 5099538 (Security Update) Important Elevation of Privilege Yes
Windows Server 2022 5099540 (Security Update) Important Elevation of Privilege Yes
Windows Server 2025 5099536 (Security Update) Important Elevation of Privilege Yes
Windows Server 2025 (Server Core installation) 5099536 (Security Update) Important Elevation of Privilege Yes

Patches

9 patches
Article Type Restart
5099535 Security Update Yes
5099538 Security Update Yes
5099539 Security Update Yes
5101650 Security Update Yes
5101649 Security Update Yes
5099445 Monthly Rollup Yes
5099444 Monthly Rollup Yes
5099540 Security Update Yes
5099536 Security Update Yes

Patch Diff

ghidriff · ci.dll (KB5101650)

Out-of-bounds read (CWE-125) with type confusion (CWE-843) in the Windows Code Integrity driver ci.dll SIPolicy version-block parser, local EoP to SYSTEM. To match Windows Defender Application Control (WDAC / System Integrity) policy rules that key on an image's file version and OriginalFilename, ci.dll parses the image's VS_VERSIONINFO resource via SIPolicyGetOriginalFilenameAndVersionFromImageBase -> SIPolicyGetVersionInfo / SIPolicyCheckVerBlock / SIPolicyQuerySubVerBlock / SIPolicyQueryVersionFields, walking the nested block tree (VS_FIXEDFILEINFO, StringFileInfo/VarFileInfo/Translation). PRE: these parsers trusted each block's declared wLength / value length / node type without validating them against the parent block bounds or verifying the VS_FIXEDFILEINFO signature, so a crafted version resource yields (a) an out-of-bounds read when a child block's length/offset runs past the parent block (CWE-125), and (b) type confusion when a node is consumed as VS_FIXEDFILEINFO / the wrong record type without the 0xFEEF04BD signature check (CWE-843). Because code-integrity/WDAC evaluation runs in kernel context, and exploitation requires winning a race (AC:H), the malformed-parse is an EoP-to-SYSTEM primitive. Diff of ci.dll 10.0.26100.8737 -> .8875 (Jul 14 2026, KB5101650) confirms the fix: gated behind CFR flags Feature_1311764795 / Feature_2390291770, the version-block parsers add bounds and structure validation at each descent - SIPolicyGetVersionInfo now requires the block to be >=0x5b bytes with the declared length within the available size and checks the VS_FIXEDFILEINFO signature (*(int*)(base+0x14) == 0xFEEF04BD); SIPolicyCheckVerBlock/QuerySubVerBlock validate each sub-block's aligned length+offset against the parent size and enforce even alignment before reading.

Pre-patch version 10.0.26100.8737 Download
Post-patch version 10.0.26100.8875 Download
Function Address Change Note
SIPolicyGetVersionInfo code change code (VS_FIXEDFILEINFO signature + length validation added, CFR-gated) Post adds: require (0x5b < param_2) && (0x5b < *param_1) && (*param_1 <= param_2) && (*(int*)(param_1+0x14) == 0xFEEF04BD) before reading the fixed-file-info fields, so an undersized/misaligned or non-VS_FIXEDFILEINFO block is rejected (blocks OOB read + type confusion).
SIPolicyCheckVerBlock code change code (sub-block length/offset bounded against parent) Post: requires 7 < param_2, 7 < uVar1 <= param_2, validates the string length via RtlStringCbLengthW, and checks aligned(length)+child-offset <= parent length and param_2 >= that computed size before descending.
SIPolicyQuerySubVerBlock code change code (alignment + bounds checks on the block walk) Post adds even-alignment ((*param_1 & 1)==0), range ((ushort)(*param_1-8) < 0x7ff9), value-length bound (uVar4 <= uVar1*2) and pointer bound (puVar13 <= param_1) while walking the block tree.
SIPolicyQueryVersionFields code change code (length validation on extracted fields) Post adds signed-length checks and a <0xffff length bound plus RtlStringCbLengthW validation on the extracted version strings.
Feature_1311764795 / Feature_2390291770 gate added (CFR gate) CFR flags gating the hardened version-block validation; the original under-validating parser still ships when disabled.
View full diff report View RCA report

Attack Path

A crafted image version resource is walked by the kernel Code Integrity policy parser without bounds/type checks, causing OOB read and type confusion

Attack path for CVE-2026-50491 A crafted image version resource is walked by the kernel Code Integrity policy parser without bounds/type checks, causing OOB read and type confusion 01 — ENTRY Local attacker gets a crafted image evaluated by WDAC / Code Integrity policy ci.dll SIPolicyGetOriginalFilenameAndVersionFromImageBase parses the image VS_VERSIONINFO to match policy version/OriginalFilename rules. AV:L/PR:L/AC:H (race). 02 — CONTROLLED INPUT Supplies a malformed VS_VERSIONINFO block tree Child block wLength/value-length/type fields declare sizes/offsets past the parent, or a node lacking the VS_FIXEDFILEINFO 0xFEEF04BD signature. 03 — MISSING CHECK Parser trusts block lengths/types without bounding to the parent (CWE-125 + CWE-843) SIPolicyQuerySubVerBlock / SIPolicyGetVersionInfo read past the block (OOB read) or consume a node as the wrong record type (type confusion). 04 — PATH Out-of-bounds / mis-typed read in the kernel Code Integrity path The malformed walk reads adjacent kernel memory or misinterprets it while evaluating the policy. 05 — PRIMITIVE OOB read / type confusion in kernel CI -> EoP to SYSTEM The Jul 2026 fix (Feature_1311764795 / Feature_2390291770) validates each block's size/alignment against the parent and checks the VS_FIXEDFILEINFO signature.

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.

Exploits & PoC

Detection Rules

Acknowledgments