Fence2Pwn: KFENCE-Enabled Kernel Exploitation Bypassing Slab Hardening and Memory Tagging
Authors/Creators
Description
Artifacts for the paper: "Fence2Pwn: KFENCE-Enabled Kernel Exploitation Bypassing Slab Hardening and Memory Tagging"
Abstract:
While the Linux kernel remains a prime target due to its privileged execution model, exploitation has become substantially more difficult in recent years.
Kernel hardening efforts have increasingly focused on the slab allocator, aiming to mitigate entire vulnerability classes (e.g. via memory tagging) or disrupt exploit techniques (e.g. via heap object segregation).
However, it remains unclear whether these protections are consistently enforced across all allocation paths.
In this paper, we find that one allocation path is excluded from all state-of-the-art slab defenses: the path used for KFENCE allocations.
KFENCE is designed as a low-overhead sampling-based memory-safety error detector for production kernels.
It is enabled by default and active in billions of systems including on Android, Red Hat Enterprise Linux, and most Linux distributions.
We show that it unintentionally enables a new exploit technique, Fence2Pwn.
Concretely, Fence2Pwn leverages several KFENCE-specific behaviors.
Three are particularly notable: (i) using a timing side channel, we detect when the kernel falls back to KFENCE allocations; (ii) KFENCE allocations are served by KFENCE-managed caches rather than size- and type-segregated slab caches, enabling bypass of heap segregation; and (iii) KFENCE allocations are untagged, enabling bypass of memory tagging.
We evaluate Fence2Pwn by profiling our timing side channel, KFENCE's object slot dynamics as well as different environments and noise floors.
Finally, we demonstrate that Fence2Pwn exploits this slab-defense gap: Fence2Pwn uses KFENCE to exploit an existing UAF-based memory-reuse vulnerability, which allows it to overlay security-relevant objects of different types and sizes.
Files
Files
(3.7 GB)
| Name | Size | |
|---|---|---|
|
md5:5abd927a0a19048f95cc7eeeb7be9675
|
3.7 GB | Download |