Crashing the Party - Pwning Control Flow Integrity w SegFault Oriented Programming
Where
Main Stage
DEF CON 34
Duration
37 min
Shows how Linux signal-handling flaws let an attacker chain segfaults into arbitrary code execution that bypasses Intel CET shadow stacks.
Summary
The talk opens with a familiar idea: when a program makes an invalid memory access, the kernel delivers a segmentation fault and the process normally dies. The speakers argue that this crash can instead become a controlled loop. They contrast it with code-reuse attacks such as return-oriented and sigreturn-oriented programming, which Intel CET is built to stop, and review the two CET parts: the shadow stack and indirect branch tracking.
The middle section explains Linux signal delivery. A handler is registered with sigaction, the kernel saves register state into a frame on the stack, and sigreturn restores it. The key observation is that the shadow stack pointer is validated only after the frame has already been restored, so a forged frame can still set registers before the fault fires. The presenters combine tricks for controlling handler arguments and pivoting to fake frames, then demonstrate on nginx 1.4.0 with a known overflow and shadow stacks enabled. A backward variant abuses the restorer field to build a recursive shadow stack.
The closing section covers mitigations. The team's patch blocks the backward variant by rejecting restorer values with the top bit set. The forward technique relies on deeper user-to-kernel transition weaknesses, which are harder to fix and will take time. The takeaway is that signal handling is a real gap in hardware CFI, and defenders should watch for kernel changes. Code and the paper are in their repository.
Materials
Related talks
Main Stage·44 min
Vladimir Tokarev
Shows three ways to write attacker-chosen return addresses into Linux shadow stacks, undermining Intel CET and ARM GCS backward-edge protection.
Main Stage·46 min
Vladimir Tokarev · Ofek Itach
Walks through three native-code memory bugs in llama.cpp and Ollama, from an Android JNI use-after-free to a Go/C out-of-bounds heap read.
Main Stage·25 min
Omri Ben Bassat
Shows how sigreturn can bypass ARM64 BTI and PAC on Linux and Android, and how it chains with COOP and coroutine attacks for code execution.


