CVE-2026-68820 — Windows AFD.sys Use-After-Free Local Privilege Escalation
Executive Summary
CVE-2026-68820 is a use-after-free (CWE-416) elevation-of-privilege vulnerability in afd.sys, the Windows Ancillary Function Driver for WinSock — a kernel-mode component present on every supported Windows 10, Windows 11, and Windows Server build. The flaw comes from improper synchronization when multiple threads interact with socket-related kernel state concurrently: one code path can free a kernel object while another thread still references it. An attacker who already has arbitrary local code execution can repeatedly trigger the race, land in the vulnerable timing window, and turn the resulting memory corruption into an arbitrary kernel read/write primitive — which they use to escalate their own token to SYSTEM. No further user interaction is required. Microsoft patched it in the August 2026 Patch Tuesday cumulative update; CISA added it to the KEV catalog the same day (2026-08-11) citing confirmed active exploitation, with reporting from Check Point Research and others linking exploitation to the North Korea-linked Lazarus group's Operation Dream Job campaign against defense-sector targets.
Attacker objective: convert an existing low-privilege foothold — however it was obtained — into unrestricted SYSTEM control, then use that control to blind or disable security tooling, dump credentials (commonly LSASS), move laterally, or stage ransomware. Highest-value defensive angle: this is inherently a second-stage exploit. It cannot fire without a foothold that already exists, so the exploit itself is largely invisible to standard EDR telemetry (the kernel race and memory corruption happen inside the driver, not as a queryable Falcon event) — but its effects are not: a discontinuous jump to SYSTEM from a process lineage that has no business producing SYSTEM children, followed within minutes by security-tool tampering or new persistence, is the pattern this pack hunts for. Patch and reboot close the vulnerability; the queries below catch the attacker who already exploited it before your fleet finished rebooting, or who is exploiting an unpatched or un-rebooted host right now.
Defender priority: patch alone does not remediate a running system — afd.sys stays loaded and vulnerable in memory until the endpoint reboots. Confirm both patch installation and post-patch reboot before considering a host remediated (see §13 playbook and the audit block in §10).
Source Review & Web Hunter Notes
16 sources were fetched and saved as plain-text snapshots to CVE-2026-68820-WindowsAFD-Hunt-sources/ for provenance. 11 yielded usable content; 3 were inaccessible (HTTP 403) and are excluded from every claim below; 1 (MSRC's own advisory portal) is JavaScript-rendered and returned only a page shell, but its substantive content was independently corroborated by three sources that quote or mirror it directly. No fetched source contained any text addressed to an AI or attempting to direct this agent's actions — see the note at the foot of this section.
| Tier | Source | Key Finding | Carry Fwd |
|---|---|---|---|
| Official | CISA KEV JSON feed (07) | Authoritative KEV record: dateAdded 2026-08-11, dueDate 2026-08-25, CWE-416 | yes |
| Official | NVD (09) | CVSS 3.1 vector AV:L/AC:H/PR:L/UI:N/S:U/C:H/I:H/A:H, CWE-416, references | yes |
| Official (mirror) | CVEfeed.io KEV mirror (08) | Corroborates official KEV record | partial |
| Vendor | SentinelOne vuln DB (01) | Affected builds list, root cause, event-based detection ideas, CWE-416 | yes |
| Vendor | Tenable CVE DB (10) | CVSS v2/v3, EPSS 0.00356, Lazarus attribution note, publish/update dates | yes |
| Vendor | Qualys blog / BOD 26-04 (11) | Patch KBs (KB5121003 Win11, KB5120249 Win10 ESU), reboot-required caveat, risk-tiered deadlines | yes |
| Media | The Hacker News (12) | Confirms sole actively-exploited zero-day in Aug 2026 release; Check Point/Lazarus/Operation Dream Job attribution | yes |
| Media | SecurityWeek (13) | Direct quote of Microsoft's exploitability language; prior afd.sys zero-day history (CVE-2025-32709, CVE-2025-21418, CVE-2024-38193) | yes |
| Blog | SOC Prime (02) | Disclosure timeline (reported 2026-07-28 → patched 2026-08-11); names FudModule / MISTPEN (no hashes) | partial |
| Blog | Cypro Insights (04) | Federal remediation deadline framing; no CVSS given, corroborates root cause | partial |
| Blog | RedLegg bulletin (05) | CVSS temporal score (6.1), affected build list matching SentinelOne | partial |
| Blog | Security Arsenal (06) | Detection-guidance ideas (SYSTEM children, world-writable paths, mass thread creation) — informed hypothesis design; LOLBin list treated as generic context, not IOCs | partial |
| Blog | SOCRadar IOC Radar (03) | INACCESSIBLE — HTTP 403 both attempts. No content used. | no |
| Media | Tech Times (15) | INACCESSIBLE — HTTP 403. No content used; attribution instead sourced from (02)/(12)/(13). | no |
| Official | CISA alert page (16) | INACCESSIBLE — HTTP 403. Superseded by the official KEV JSON feed (07), which was fetched successfully. | no |
| Official | MSRC advisory portal (14) | PARTIAL — JS-rendered SPA, only page shell retrieved. Advisory text corroborated via (09)/(10)/(13). | partial |
No injected instructions found: every fetched source was reviewed for text addressed to an AI (prompt-injection attempts). None was present in any of the 11 successfully-fetched sources. This is noted per this pack's build instructions, not because anything was found.
Hunt Brief & Attack Chain
Hunt hypotheses (ordered by fidelity)
- H1 (high conf): A process authenticates or executes as SYSTEM whose parent is not one of the small set of OS components that legitimately spawn SYSTEM children — the direct fingerprint of a successful local-to-SYSTEM elevation. → Q1
- H2 (high conf): Within the same SYSTEM context, a security-tooling tamper command executes (stop/disable AV/EDR service, registry disable flags) — the near-universal next step after this exploit succeeds. → Q2, Q5
- H3 (medium conf): A SYSTEM-context actor outside normal installers creates autostart persistence shortly after an anomalous elevation — establishing durability post-exploitation. → Q3
- H4 (medium conf): An executable is written to disk and, on the same host, a non-standard SYSTEM elevation follows — approximates "stage the exploit tool, then run it." → Q4
- H5 (low conf, pivot-only): A single non-privileged parent spawns processes in an abnormal burst — a very weak proxy for the repeated race-condition triggering this exploit class requires. → Q6
Attack chain
| Step | Action | Telemetry | Hunt Angle |
|---|---|---|---|
| 1 | Attacker obtains an initial local foothold (out of scope of this CVE — phishing, another exploit, etc.; Operation Dream Job reporting suggests fake-job-offer lures for this actor) | Email/process/file telemetry, not this pack's focus | Prerequisite — see your organization's initial-access hunt packs |
| 2 | Attacker runs a crafted local application that repeatedly issues AFD.sys IOCTLs to win the free/use race | None exposed via standard Falcon EDR fields — kernel-internal | Proxy only: abnormal process/handle burst (H5 / Q6) |
| 3 | Race window hit → kernel read/write primitive obtained → attacker escalates own token to SYSTEM | ProcessRollup2 UserName transition to SYSTEM from a non-standard parent | H1 / Q1 |
| 4 | SYSTEM-context actor disables or tampers with EDR/AV, and/or dumps LSASS | ProcessRollup2 CommandLine, RegGenericValueUpdate | H2 / Q2, Q5 |
| 5 | Persistence, lateral movement, or ransomware staging using SYSTEM access | AsepValueUpdate, PeFileWritten/NewExecutableWritten | H3, H4 / Q3, Q4 |
Consolidated IOC Table
This is a kernel-level local-privilege-escalation exploit, not a campaign with C2 domains or a public malware sample corpus — no atomic indicators (hashes, IPs, domains) for the exploit itself were published in any source this pack could fetch. That is expected and normal; the table below is intentionally behavioral-first. See §10 for the copy-paste appendix.
| Type | Value | Confidence | Action | Context | Expiry |
|---|---|---|---|---|---|
| Behavior | SYSTEM-context process from non-standard parent | Medium | hunt | Core elevation fingerprint; needs tenant baseline (Q1) | 2026-11-24 |
| Behavior | Security-tooling tamper command/registry change under SYSTEM | High | detect | Near-universal post-exploitation step (Q2, Q5) | 2027-02-24 |
| Filename (context only) | afd.sys | n/a | enrich | Legitimate patched Windows driver — do NOT block/quarantine; presence is expected on every host (01, 06) | 2027-02-24 |
| Named tooling (unconfirmed) | FudModule kernel-mode rootkit | Low | pivot | Named by SOC Prime (02) re: Lazarus tradecraft; no hash published in any fetched source | 2026-09-24 |
| Named tooling (unconfirmed) | MISTPEN in-memory downloader | Low | pivot | Named by SOC Prime (02); no hash published in any fetched source | 2026-09-24 |
| Patch identifier | KB5121003 (Windows 11) | High | detect (compliance) | Required fix, per Qualys (11) | ongoing |
| Patch identifier | KB5120249 (Windows 10 ESU) | High | detect (compliance) | Required fix, per Qualys (11) | ongoing |
Affected Surface & Telemetry Matrix
| Platform | Versions | Required Telemetry | Priority | Gap Risk |
|---|---|---|---|---|
| Windows 10 | 1607, 1809, 21H2, 22H2 | Falcon process/registry/file telemetry | High | Older builds may be past mainstream support — confirm ESU coverage |
| Windows 11 | 23H2, 24H2, 25H2, 26H1 | Falcon process/registry/file telemetry | High — largest deployed base | Low |
| Windows Server | 2012, 2012 R2, 2016, 2019, 2022, 2025 | Falcon process/registry/file telemetry | Critical — jump hosts, DCs, privileged-account hosts per CISA BOD 26-04 prioritization | Low |
Telemetry gap: direct AFD.sys kernel exception/crash telemetry (the exploit trigger itself) is not exposed via the standard Falcon EDR CQL field model — Falcon does not publish a queryable kernel-bugcheck or driver-fault event type in the documented data model. This pack can only detect the exploit's downstream effects (SYSTEM elevation, tool tampering, persistence), not the race condition in progress. Native OS crash-dump/WER review (§7) is the compensating control. This gap is carried into §15 Coverage Map.
ATT&CK Mapping
| Tactic | Technique ID | Technique Name | Observed / Expected Behavior |
|---|---|---|---|
| Privilege Escalation | T1068 | Exploitation for Privilege Escalation | AFD.sys UAF race → kernel R/W primitive → token elevation to SYSTEM |
| Defense Evasion | T1562.001 | Impair Defenses: Disable or Modify Tools | SYSTEM-context command/registry change disabling AV/EDR post-elevation |
| Credential Access | T1003.001 | OS Credential Dumping: LSASS Memory | SYSTEM access commonly used to access LSASS immediately after elevation |
| Persistence | T1547.001 | Boot or Logon Autostart Execution: Registry Run Keys | Autostart entry created under SYSTEM context outside normal installers |
| Discovery | T1518.001 | Security Software Discovery | Pre-tamper enumeration of installed AV/EDR, commonly preceding T1562.001 |
Native Audit-Log Hunts
Non-CQL checks that compensate for the telemetry gap noted in §5 — run these against Windows Event Log / Sysmon directly, on the host or via your log-forwarding pipeline.
- System log Event ID 1001 (BugCheck / WER): review for crash reports whose faulting module is
afd.syson unpatched or un-rebooted hosts — a crash here can indicate a failed or partially-successful exploitation attempt. - Security log Event ID 4672 (Special privileges assigned to new logon): correlate the account name against your expected list of service/admin accounts — an unexpected standard-user account receiving this event is a strong elevation signal.
- Security log Event ID 4688 with command-line auditing enabled, filtered to
TokenElevationType= TokenElevationTypeFull for processes whose parent is not a standard elevation broker (consent.exe, etc.). - Sysmon Event ID 1 (Process Create): filter for
IntegrityLevel = Systemwhere the parent process's own IntegrityLevel was Medium or lower — the classic host-based LPE fingerprint, and a useful cross-check against Q1 if Sysmon is deployed alongside Falcon. - Driver/patch state audit: confirm both patch installation and the mandatory post-patch reboot (afd.sys is not swapped out of memory until reboot) — see the PowerShell audit block in §10.
CrowdStrike LogScale CQL Hunt Queries
Looks for: a process running as SYSTEM whose parent is not one of the small set of OS components that legitimately spawn SYSTEM children — the core elevation fingerprint. FP: legitimate third-party SYSTEM-spawning parents (RMM/patch/backup agents, EDR/AV updaters) not yet baselined for this tenant.
// HUNT: SYSTEM-Context Process Spawned From Non-Standard Parent // MITRE: T1068 // CONF: high // FP: medium // COST: low // REQUIRES: Falcon process telemetry (ProcessRollup2 / SyntheticProcessRollup2) // FALSE POSITIVES: Legitimate SYSTEM-spawning parents not yet baselined in this tenant -- RMM/patch agents, backup agents, EDR/AV updaters that legitimately launch children as SYSTEM outside the common OS-parent list below. // TUNING: Add your environment's legitimate SYSTEM-spawning parents (RMM agent, backup agent, patch-management tool, EDR/AV updater) to the ParentBaseFileName exclusion regex below before promoting this to an alert. // LOOKBACK: 7d #event_simpleName=/ProcessRollup2|SyntheticProcessRollup2/ | UserName=/^SYSTEM$/i | !(ParentBaseFileName=/^(services|svchost|wininit|smss|csrss|winlogon|lsass|spoolsv|taskhostw|msiexec|trustedinstaller|dllhost)(\.exe)?$/i) | table([@timestamp, aid, ComputerName, ParentBaseFileName, FileName, CommandLine, UserName]) | sort(@timestamp, order=desc)
Looks for: service-stop, registry-disable, or process-kill commands targeting AV/EDR, executing under SYSTEM context — the near-universal next step after this exploit succeeds. FP: authorized EDR/AV maintenance windows or sanctioned deployment scripts run by RMM tooling under SYSTEM.
// HUNT: Security Tooling Tamper Commands Executing As SYSTEM // MITRE: T1562.001, T1068 // CONF: high // FP: low // COST: low // REQUIRES: Falcon process telemetry (ProcessRollup2 / SyntheticProcessRollup2) // FALSE POSITIVES: Authorized EDR/AV maintenance windows or sanctioned deployment scripts run by RMM/patch tooling under SYSTEM. // LOOKBACK: 7d #event_simpleName=/ProcessRollup2|SyntheticProcessRollup2/ | UserName=/^SYSTEM$/i | FileName=/^(sc|net|net1|taskkill|powershell|pwsh|reg)(\.exe)?$/i | CommandLine=/(stop\s+(WinDefend|wscsvc|SecurityHealthService|CSFalconService|Sense)|Set-MpPreference.*Disable|DisableAntiSpyware|DisableRealtimeMonitoring|taskkill.*(MsMpEng|CSFalconService|SenseIR))/i | table([@timestamp, aid, ComputerName, ParentBaseFileName, FileName, CommandLine, UserName]) | sort(@timestamp, order=desc)
Looks for: a new autostart registry entry created under SYSTEM context by something other than a standard installer. FP: legitimate installers and Windows Update running under SYSTEM create autostart entries routinely.
// HUNT: Autostart Persistence Created Under SYSTEM Context From Non-Standard Actor // MITRE: T1547.001, T1068 // CONF: medium // FP: medium // COST: low // REQUIRES: Falcon registry telemetry (AsepValueUpdate) // FALSE POSITIVES: Legitimate installers and Windows Update running under SYSTEM create autostart entries routinely. // TUNING: Exclude ContextBaseFileName values for known installers (msiexec.exe, TrustedInstaller.exe, TiWorker.exe, poqexec.exe) and your patch-management agent before promoting beyond hunt-only. // LOOKBACK: 7d #event_simpleName=AsepValueUpdate | UserName=/^SYSTEM$/i | !(ContextBaseFileName=/^(msiexec|trustedinstaller|tiworker|poqexec)(\.exe)?$/i) | table([@timestamp, aid, ComputerName, ContextBaseFileName, RegObjectName, RegValueName, UserName]) | sort(@timestamp, order=desc)
Looks for: an executable written to disk on a host that also shows a non-standard SYSTEM elevation — an approximation of "stage the exploit tool, then run it." FP: installers, RMM/patch agents, and EDR/AV updaters routinely write an executable and then run something as SYSTEM within minutes on managed endpoints — this is expected there.
// HUNT: Executable Drop Followed By Non-Standard SYSTEM Elevation On The Same Host // MITRE: T1068 // CONF: medium // FP: high // COST: medium // REQUIRES: Falcon file-write telemetry (PeFileWritten / NewExecutableWritten) + process telemetry (ProcessRollup2) // FALSE POSITIVES: Installers, RMM/patch agents, and EDR/AV updaters routinely write an executable and then run something as SYSTEM within minutes on managed endpoints -- this is expected there. // TUNING: This join correlates by host (aid) only, not tight time proximity -- triage by eyeballing DropTime vs ElevationTime in the results, and exclude ContextBaseFileName/ParentBaseFileName values for your RMM agent, patch tool, and EDR/AV updater before promoting beyond hunt-only. // LOOKBACK: 7d #event_simpleName=/PeFileWritten|NewExecutableWritten/ | DropTime := @timestamp | DropFile := FileName | DropActor := ContextBaseFileName | join(query={ #event_simpleName=/ProcessRollup2|SyntheticProcessRollup2/ | UserName=/^SYSTEM$/i | !(ParentBaseFileName=/^(services|svchost|wininit|smss|csrss|winlogon|lsass|spoolsv|taskhostw|msiexec|trustedinstaller|dllhost)(\.exe)?$/i) | ElevationTime := @timestamp }, field=aid, mode=inner) | table([DropTime, ElevationTime, aid, ComputerName, DropFile, DropActor, ParentBaseFileName, FileName, CommandLine, UserName]) | sort(ElevationTime, order=desc)
Looks for: a registry value under a Defender/security-product key being changed to a disable state, under SYSTEM context. FP: authorized security-product deployment or reconfiguration tooling running under SYSTEM during a sanctioned maintenance window.
// HUNT: Security Product Registry Tamper Under SYSTEM Context // MITRE: T1562.001 // CONF: high // FP: low // COST: low // REQUIRES: Falcon registry telemetry (RegGenericValueUpdate) // FALSE POSITIVES: Authorized security-product deployment or reconfiguration tooling running under SYSTEM during a sanctioned maintenance window. // LOOKBACK: 7d #event_simpleName=RegGenericValueUpdate | UserName=/^SYSTEM$/i | RegObjectName=/(Windows Defender|Windows Advanced Threat Protection|WinDefend|SecurityHealthService|CrowdStrike|CSAgent)/i | RegValueName=/^(DisableAntiSpyware|DisableRealtimeMonitoring|DisableBehaviorMonitoring|DisableAntiVirus|Start)$/i | table([@timestamp, aid, ComputerName, ContextBaseFileName, RegObjectName, RegValueName, RegStringValue, UserName]) | sort(@timestamp, order=desc)
Looks for: a single non-privileged parent process spawning an abnormally high volume of child processes in a short window — a weak proxy for the repeated triggering this exploit class typically requires to win the race. Pivot-only; not an alert candidate on its own. FP: build systems, test harnesses, package managers, and some legitimate automation create processes in rapid bursts.
// HUNT: High-Frequency Process Creation Burst From A Single Non-Privileged Parent (Race-Condition Trigger Pattern) // MITRE: T1068 // CONF: low // FP: high // COST: medium // REQUIRES: Falcon process telemetry (ProcessRollup2 / SyntheticProcessRollup2) // FALSE POSITIVES: Build systems, test harnesses, package managers, and some legitimate automation create processes in rapid bursts -- this pattern alone is a very weak signal and exists mainly to surface candidates for the higher-confidence queries above, not to stand alone as an alert. // TUNING: Exclude ParentBaseFileName values for build tools, CI/CD agents, and package managers (e.g. msbuild.exe, npm.cmd, choco.exe) in your environment, and treat any hit as a pivot into Q1/Q2/Q5, not a standalone alert. // LOOKBACK: 1d #event_simpleName=/ProcessRollup2|SyntheticProcessRollup2/ | !(UserName=/^SYSTEM$/i) | groupBy([aid, ComputerName, ParentBaseFileName, UserName], function=[count(as=SpawnCount), min(@timestamp, as=FirstSeen), max(@timestamp, as=LastSeen)], limit=1000) | SpawnCount > 200 | table([ComputerName, ParentBaseFileName, UserName, SpawnCount, FirstSeen, LastSeen]) | sort(SpawnCount, order=desc)
CrowdStrike Custom IOA Recommendations
Three queries are high-confidence enough to warrant promotion beyond hunt-only. Stage every one in Detect mode for at least 2 weeks against production traffic before considering Prevent.
| IOA Name | Source Query | Pattern | Exclusions | Deployment Path |
|---|---|---|---|---|
| Non-Standard SYSTEM Elevation | Q1 | ProcessRollup2 UserName=SYSTEM, ParentBaseFileName outside OS-parent allowlist | Tenant-specific RMM/backup/patch agents (build during Detect-mode baseline) | Detect 2+ weeks → tune exclusions → Detect indefinitely (avoid Prevent — legitimate SYSTEM automation is common; keep as high-priority alert, not a block) |
| SYSTEM-Context Security Tooling Tamper | Q2 + Q5 | SYSTEM-context command/registry change targeting AV/EDR disable | Authorized maintenance-window service account or script hash | Detect 1 week → Prevent (low FP, high-value control point) |
| Post-Elevation Persistence | Q3 | AsepValueUpdate under SYSTEM from non-installer actor | Installer/patch-agent ContextBaseFileName allowlist | Detect indefinitely — persistence IOAs are high-value for investigation, higher FP tolerance than a Prevent policy warrants |
Machine-Readable IOC Appendix
No atomic indicators (hashes, C2 domains/IPs) for this exploit were published in any fetched source. The CSV below intentionally ships mostly REPLACE_WITH_ placeholders — populate them only if your own incident response surfaces a confirmed indicator. Shipping a fabricated hash or domain here would be worse than shipping none.
type,value,action,severity,expiration,description,tags sha256,REPLACE_WITH_SHA256,detect,high,2027-02-24,Unverified CVE-2026-68820 exploit binary or post-exploitation tool -- populate only if your own IR/EDR surfaces a hash,cve:CVE-2026-68820 domain,REPLACE_WITH_C2,detect,medium,2026-11-24,Unverified Operation Dream Job C2 infrastructure referenced in third-party reporting but not published with an indicator in any fetched source,actor:Lazarus filename,afd.sys,enrich,low,2027-02-24,Legitimate Windows kernel driver targeted by CVE-2026-68820 -- context only, do NOT block/quarantine,cve:CVE-2026-68820
1. Process runs as SYSTEM; ParentBaseFileName is not a standard OS SYSTEM-spawning component (Q1) 2. SYSTEM-context command stops/disables AV, EDR, or Windows Security service (Q2) 3. SYSTEM-context registry write sets a security-product Disable* value (Q5) 4. New autostart entry created by a SYSTEM actor that is not a known installer (Q3) 5. Executable write followed by non-standard SYSTEM elevation on the same host (Q4) 6. Abnormal burst of process creation from one non-privileged parent (Q6, pivot-only) 7. System log Event ID 1001 (BugCheck/WER) naming afd.sys as the faulting module 8. Security log Event ID 4672 granted to an account outside the expected service/admin list
# Named by SOC Prime reporting on Lazarus / Operation Dream Job tradecraft. # No file hash, filename, or path was published for either in any source # this pack could fetch -- listed for analyst awareness and pivot only. FudModule kernel-mode rootkit (privilege-escalation payload class) MISTPEN in-memory downloader
# Confirm the August 2026 cumulative update is installed Get-HotFix -Id KB5121003 -ErrorAction SilentlyContinue # Windows 11 Get-HotFix -Id KB5120249 -ErrorAction SilentlyContinue # Windows 10 ESU # afd.sys is only replaced in memory after a reboot -- confirm uptime since patch (Get-CimInstance Win32_OperatingSystem).LastBootUpTime # Secondary signal: on-disk driver file version/date Get-Item "$env:SystemRoot\System32\drivers\afd.sys" | Select-Object VersionInfo, LastWriteTime
Detection Validation Gates
- Telemetry ready: confirm ProcessRollup2/SyntheticProcessRollup2, AsepValueUpdate, and RegGenericValueUpdate are flowing for the target host population before enabling any query above as an alert.
- Benign baseline: run Q1 and Q3 in hunt-only (Investigate) mode for a minimum of 7 days per environment to build the ParentBaseFileName/ContextBaseFileName exclusion list before promoting either.
- Positive test: Q1 — in an isolated test VM, launch a process as SYSTEM via a non-standard parent (e.g.
PsExec64.exe -s cmd.exefrom an interactive session) and confirm the query surfaces it. Q2/Q5 — in the same test VM, run an excluded-from-productionsc stopor registry-disable command against a disposable AV/EDR test instance and confirm detection fires. A real kernel exploitation of this CVE should never be simulated outside an isolated, disposable lab, and only against a still-vulnerable (unpatched) test image. - Promotion: Q2 and Q5 are eligible for Prevent-mode Custom IOA after a clean 1-week Detect baseline (§9). Q1 and Q3 stay in Detect indefinitely given their FP profile. Q4 and Q6 remain hunt/investigate-only and should never be promoted to an alert as written.
Hardening — Tiered
1. Patch — M1051 (Update Software). Deploy the August 2026 cumulative update fleet-wide (KB5121003 Windows 11 / KB5120249 Windows 10 ESU) with a mandatory reboot — afd.sys stays loaded and vulnerable until the endpoint restarts. Follow CISA BOD 26-04 risk-tiered timelines: 3 days for internet-exposed systems, 14 days (2026-08-25) for internal endpoints. Source: CISA KEV catalog (§18-07), Qualys BOD 26-04 analysis (§18-11). Verify: the audit block in §10.
2. Falcon prevention policy + tamper protection — M1040 (Behavior Prevention on Endpoint), M1018 (User Account Management). Confirm the Falcon prevention policy is set to block on privilege-escalation and defense-evasion behaviors, and that sensor tamper protection is enabled fleet-wide, so an attacker who does elevate cannot trivially disable the sensor that would otherwise catch the next step. Verify: re-run Q2/Q5 after enabling — a clean fleet should return zero real hits outside the maintenance-window exclusion.
3. LSA Protection / RunAsPPL — M1025 (Privileged Process Integrity), M1040, M1043 (Credential Access Protection). Makes LSASS a protected process, raising the cost of the credential-dumping step (T1003.001) this exploit is commonly used to reach. GPO: Computer Configuration > Administrative Templates > MS Security Guide > LSA Protection = Enabled. Registry: HKLM\SYSTEM\CurrentControlSet\Control\Lsa\RunAsPPL = 2 (UEFI-locked). Source: Microsoft Security Baselines. Reboot required.
4. ASR rule — Block credential stealing from LSASS — M1040. GUID 9E6C4E1F-7D60-472F-BA1A-A39EF669E4B2. Deploy in AuditMode first (Defender Event ID 1122), confirm no legitimate workflow trips it, then flip to Block (Event ID 1121). Directly blocks the most common thing an attacker does immediately after this exploit succeeds.
5. Reduce standing local admin — M1026 (Privileged Account Management). Shrink the population of accounts with local admin rights and cached privileged credentials, limiting what a SYSTEM-level compromise can actually reach or steal. ⚠ best-practice/architectural, no single benchmark line item — cite CIS Windows Benchmark's local-admin-membership guidance for the specific control your tenant enforces.
6. Credential Guard (VBS-isolated LSASS) — M1025, M1043. Requires Windows 10/11 Enterprise or Server 2016+, UEFI, Secure Boot, TPM 2.0, VBS-capable CPU. Known to break some legacy SSO products and older third-party AV that hooks LSASS — pilot on a ring before fleet rollout. Source: Microsoft Security Baselines / Device Guard.
7. Application control (WDAC / AppLocker) — M1038 (Execution Prevention). Reduces the attacker's ability to get the local code-execution foothold this LPE requires in the first place — the highest-leverage upstream control, and also the most architecturally involved. ⚠ best-practice pending your organization's own WDAC policy baseline; cite Microsoft's WDAC design guide for your tenant's specific policy.
Deployable Playbooks
Playbook 1 — Patch verification & enforced reboot
Prerequisites: WSUS/Intune/SCCM (or your patch-management tool) already targeting the August 2026 cumulative update at the affected build population. Reboot required: yes — this is the entire point of the playbook. Rollback: uninstalling a security cumulative update to roll back is not recommended; if the update causes a regression, engage Microsoft support rather than removing the patch, since removal reintroduces an actively-exploited kernel LPE.
# Step 1 -- confirm patch presence (see Copy CSV audit block in Section 10 for the full check)
Get-HotFix -Id KB5121003,KB5120249 -ErrorAction SilentlyContinue
# Step 2 -- if patched but LastBootUpTime predates the patch install date, force a
# scheduled reboot during the next maintenance window (adjust the delay to your change window)
if ((Get-CimInstance Win32_OperatingSystem).LastBootUpTime -lt (Get-Date).AddDays(-1)) {
shutdown.exe /r /t 3600 /c "Mandatory reboot: CVE-2026-68820 (afd.sys) patch requires restart to take effect"
}
Playbook 2 — LSA Protection (RunAsPPL)
Prerequisites: pilot on a ring first; confirm no legacy LSASS-hooking security or SSO software is in use on target hosts. Reboot required: yes. Rollback: delete the RunAsPPL value (or set to 0) and reboot again.
# Deploy
$path = 'HKLM:\SYSTEM\CurrentControlSet\Control\Lsa'
New-ItemProperty -Path $path -Name 'RunAsPPL' -Value 2 -PropertyType DWORD -Force | Out-Null
# Reboot required
# Verify (post-reboot)
(Get-ItemProperty -Path 'HKLM:\SYSTEM\CurrentControlSet\Control\Lsa' -Name RunAsPPL).RunAsPPL
# Expect: 2 -- and Event ID 12 ("LSASS was started as a protected process") in the System log
# Rollback
Remove-ItemProperty -Path $path -Name 'RunAsPPL' -ErrorAction SilentlyContinue
# Reboot required
Playbook 3 — ASR rule: block credential stealing from LSASS
Prerequisites: Defender Antivirus active (can coexist with Falcon in passive/EDR mode per your deployment); deploy in AuditMode across a pilot ring before Block. Reboot required: no. Rollback: re-run the same cmdlet with -AttackSurfaceReductionRules_Actions Disabled.
# Audit first
Set-MpPreference -AttackSurfaceReductionRules_Ids '9e6c4e1f-7d60-472f-ba1a-a39ef669e4b2' `
-AttackSurfaceReductionRules_Actions AuditMode
# Review Defender Event ID 1122 for hits over 1-2 weeks, then:
Set-MpPreference -AttackSurfaceReductionRules_Ids '9e6c4e1f-7d60-472f-ba1a-a39ef669e4b2' `
-AttackSurfaceReductionRules_Actions Enabled
# Rollback
Set-MpPreference -AttackSurfaceReductionRules_Ids '9e6c4e1f-7d60-472f-ba1a-a39ef669e4b2' `
-AttackSurfaceReductionRules_Actions Disabled
Containment Runbook
| Phase | Actions | Owner | Evidence |
|---|---|---|---|
| Isolate | Network-contain the affected host via Falcon RTR host containment; do not reboot yet if forensic capture is planned | IR / SOC | Containment action log, Falcon detection ID |
| Eradicate | Confirm patch + reboot (Playbook 1); rotate credentials for any account active on the host at time of elevation, prioritizing anything with domain-privileged access; hunt for persistence via Q3 across the wider environment | IR / IT Ops | Patch audit output, credential-rotation ticket, Q3 hunt results |
| Recover | Restore from known-clean backup if ransomware staging is suspected (T1486); re-image rather than clean if a kernel-mode rootkit (e.g. FudModule-class tooling) is suspected, since kernel-level implants can survive user-mode remediation | IT Ops | Restore/re-image record, post-recovery Q1/Q2/Q5 clean run |
Detection Coverage Map
| Technique | Behavior | CQL | IOA | Coverage |
|---|---|---|---|---|
| T1068 | Kernel UAF race / exploit trigger itself | Q6 (weak proxy only) | — | GAP |
| T1068 | SYSTEM elevation from non-standard parent | Q1, Q4 | Non-Standard SYSTEM Elevation | Partial |
| T1562.001 | Security tooling tamper post-elevation | Q2, Q5 | SYSTEM-Context Security Tooling Tamper | Good |
| T1547.001 | Post-elevation persistence | Q3 | Post-Elevation Persistence | Partial |
| T1003.001 | LSASS credential access after elevation | — | — | GAP — see hardening §12.3–4 |
| T1518.001 | Pre-tamper security software discovery | — | — | GAP — not separately hunted; folds into Q2/Q5 window |
The primary gap is structural, not an oversight: the AFD.sys race condition itself has no queryable Falcon EDR event (§5), so this pack's coverage necessarily starts one step downstream, at the elevation and its aftermath. LSASS credential access after elevation has no dedicated CQL query in this pack — it is addressed via hardening (LSA Protection, ASR LSASS rule, §12) rather than detection, since a successful SYSTEM-level LSASS read is difficult to distinguish from legitimate SYSTEM-context tooling without additional context this exploit class doesn't provide. Validation gates for the queries that do exist are in §11.
Hunt Summary Ticket
TITLE: CVE-2026-68820 -- Windows AFD.sys Use-After-Free Local Privilege Escalation
SEVERITY: High (CVSS 7.0) -- Actively exploited in the wild, CISA KEV (added 2026-08-11, due 2026-08-25)
SCOPE: Windows 10 (1607/1809/21H2/22H2), Windows 11 (23H2/24H2/25H2/26H1),
Windows Server (2012/2012 R2/2016/2019/2022/2025)
HYPOTHESIS: An attacker with an existing local foothold triggers a UAF race in afd.sys to
obtain a kernel R/W primitive and escalate to SYSTEM, then disables security tooling,
accesses LSASS, persists, or stages ransomware.
QUERIES: Q1 SYSTEM-context elevation from non-standard parent (hunt/detect)
Q2 Security-tooling tamper commands as SYSTEM (detect -> prevent-eligible)
Q3 Post-elevation persistence (hunt/detect)
Q4 Executable drop + SYSTEM elevation correlation (hunt-only)
Q5 Security-product registry tamper as SYSTEM (detect -> prevent-eligible)
Q6 Process-creation burst, race-trigger proxy (hunt/pivot-only)
DO FIRST: Confirm KB5121003 (Win11) / KB5120249 (Win10 ESU) installed AND host rebooted
(Section 10 audit block) -- patch alone does not remediate a running system.
FINDINGS: [populate after running Q1-Q6 against your environment]
GAPS: No direct telemetry for the kernel race condition itself (Section 5, Section 15).
No atomic IOCs published in any source fetched for this pack (Section 4).
ACTIONS: Patch + reboot per BOD 26-04 timelines; deploy Q2/Q5 to Detect this week;
baseline Q1/Q3 for 7 days before considering promotion; harden per Section 12.
OWNER: [assign]
VERSION: v0.1 -- 2026-08-24
Changelog
References
| # | Tier | Source | Used For | Access Date |
|---|---|---|---|---|
| 01 | Vendor | SentinelOne Vulnerability Database | Affected builds, root cause, CWE-416, detection ideas | 2026-08-24 |
| 02 | Blog | SOC Prime | Disclosure timeline, Lazarus/Operation Dream Job attribution, FudModule/MISTPEN naming | 2026-08-24 |
| 03 | Blog | SOCRadar IOC Radar | INACCESSIBLE (HTTP 403) — not used | 2026-08-24 (failed) |
| 04 | Blog | Cypro Insights | Federal remediation deadline framing | 2026-08-24 |
| 05 | Blog | RedLegg Security Bulletin | CVSS temporal score, affected build list | 2026-08-24 |
| 06 | Blog | Security Arsenal | Detection-guidance ideas that informed hypothesis design | 2026-08-24 |
| 07 | Official | CISA KEV JSON feed | Authoritative KEV record (dateAdded, dueDate, description) | 2026-08-24 |
| 08 | Mirror | CVEfeed.io KEV mirror | Corroboration of KEV record | 2026-08-24 |
| 09 | Official | NVD | CVSS 3.1 vector, CWE-416, references | 2026-08-24 |
| 10 | Vendor | Tenable CVE Database | CVSS scores, EPSS, Lazarus attribution note | 2026-08-24 |
| 11 | Vendor | Qualys Blog | Patch KBs, reboot-required caveat, BOD 26-04 deadlines | 2026-08-24 |
| 12 | Media | The Hacker News | Sole-actively-exploited-zero-day confirmation, attribution | 2026-08-24 |
| 13 | Media | SecurityWeek | Direct MSRC advisory quote, prior afd.sys zero-day history | 2026-08-24 |
| 14 | Official | Microsoft MSRC Update Guide | PARTIAL — JS-rendered, corroborated via 09/10/13 | 2026-08-24 |
| 15 | Media | Tech Times | INACCESSIBLE (HTTP 403) — not used | 2026-08-24 (failed) |
| 16 | Official | CISA Alerts page | INACCESSIBLE (HTTP 403) — superseded by source 07 | 2026-08-24 (failed) |