Skip to content

Security Not yet confirmed elsewhere1 publisher 2 min read Published

SMAP was enabled. Windows had already set AC=1 and disarmed it.

A kernel exploit against HackSys' vulnerable driver pivoted onto a user-mode fake stack in Ring 0 and never faulted, because the syscall entry path sets the AC bit that suppresses SMAP.

The Watch · Security desk

How we use AI Send a correction

Illustration accompanying SMAP was enabled. Windows had already set AC=1 and disarmed it.
Generated illustration

What happened

  • Charfeddine's arbitrary write overwrote HalDispatchTable+0x8 to redirect kernel execution through a stack pivot in an HEVD exploit chain.
  • The pivot gadget mov esp, ebx zeroed the top of RSP and dropped execution onto a fake stack allocated in user memory below the 4GB line.
  • With CR4 bit 21 set, the ROP chain ran in Ring 0 while reading its gadget addresses straight from a user-mode page.
  • A test driver saw RFLAGS.AC set on entry even when the calling process had explicitly cleared it, so the kernel path turns AC on itself.
  • A second driver dereferenced a user pointer in Ring 0 with no page fault, confirming that AC=1 switches SMAP off.

Why it matters

  • constraint The mitigation an operator sees enabled in CR4 does not by itself stop kernel code from reading a user-mode fake stack, so its coverage is narrower than the checkbox implies.
  • contradiction The mitigation read as enabled the whole time the primitive it should have blocked ran to completion, which means a status check on CR4[21] overstates what is actually enforced.
  • exposure Any Ring 0 code reached through the normal syscall dispatch inherits AC=1, leaving read and write primitives that touch user memory unguarded by SMAP on this build.
  • decision Defenders leaning on SMAP to trip user-mode ROP staging need another signal, because the page fault they expect does not fire.

The behaviour is not exotic once you read the enable condition closely. SMAP only enforces while RFLAGS.AC is clear; set the AC bit and the processor stops faulting on supervisor-mode reads of user pages. [7] So the real question was never whether the exploit was clever, but whether AC was somehow clear in the kernel and got set, or arrived set and stayed that way.

Charfeddine's first guess was that the syscall entry masking clears AC, which would keep SMAP live inside the driver. It does not. The IA32_FMASK MSR that SYSCALL uses to scrub flags read back as 0x4700, which clears the trap, interrupt, direction and nested-task flags and leaves bit 18 untouched. [8] A test driver then confirmed the flag is present rather than absent: when the client raised AC before the call, the handler saw AC=1 at its first instruction. [9]

The rest of the chain is unremarkable, which is the point. Once pivoted, the ROP disabled SMEP through mov cr4, rcx, ran a token-theft payload, and restored the kernel stack. [3] It returned SYSTEM, and the VM stayed up long enough to pop a shell. [4] Nothing in that sequence should have survived a supervisor read of a low user-mode allocation with SMAP on, and all of it did.

One thing the published excerpt leaves open is virtualization. The work ran in a VM, so Charfeddine set up a further check that forces AC back to zero inside the driver and repeats the read, to rule out QEMU/KVM quietly eating the fault. [12] That result is not in the material here, so for now the finding is scoped to Windows 11 build 26200.8328 under a hypervisor. [6] The narrow lesson holds regardless of how that test lands: the presence of a mitigation bit and the blocking of a primitive are two different measurements, and this chain measured both.

What to watch

  • The outcome of the AC-forced-to-zero driver test: if the read still succeeds, the fault suppression belongs to the hypervisor, not the syscall path, and the conclusion shifts.
  • Whether the same AC=1-on-entry behaviour holds on bare metal and across other Windows builds, or is specific to build 26200.8328 in a VM.
  • Whether Microsoft treats a kernel-set AC as intended entry-path behaviour or changes it.

Clarity's read

What the record supports and how the coverage leans. The claims behind it follow.

Reality

Evidence65
Adoption
Insufficient
Hype gap+5
Incentives40
Confidence58
Why these scores

Claim ledger

Ranked by verification strength, evidence, and original report placement.

  1. [1]

    While developing a kernel exploit chain against the HackSys Extreme Vulnerable Driver (HEVD), Charfeddine abused an arbitrary write primitive to overwrite HalDispatchTable+0x8 and redirect execution through a stack pivot.

    Reported Supported Source: Youssef Charfeddine, sibouzitoun.techView cited source
  2. [2]

    The pivot gadget was a 32-bit partial register move, mov esp, ebx ; ret, which zeroes the upper 32 bits of RSP and lands execution in a fake stack built in low user-mode memory via a VirtualAlloc below the 4GB boundary.

    Reported Supported Source: Youssef Charfeddine, sibouzitoun.techView cited source
  3. [3]

    From the fake stack, a ROP chain disabled SMEP via mov cr4, rcx, jumped to a token-theft payload, and recovered the original kernel stack.

    Reported Supported Source: Youssef Charfeddine, sibouzitoun.techView cited source

Get this ledger inside ChatGPT. Ask about any of our stories and the answer brings its figure, each claim’s verdict and the sources. Free, no account.

Add to ChatGPTAdd to Claude

Sources

1 independent publisher whose own reporting we read for this story.

  1. sibouzitoun.tech

    1 article · August 23, 2026

    Youssef Charfeddine

Share your take

Let Clarity write the post for you.

Signed-in readers get a short post drafted on this story in the register they choose — narrative, analytical, or a direct position — editable to the last word before it goes anywhere. The share buttons at the top of this story work without an account.

Topics and entities

Follow any of these and your For You feed starts watching them — no settings page required.

Topics

Entities

Loading related stories