Fuzzing at Mach Speed
Where
Talks
ShmooCon 2024
Duration
50 min
Walks through fuzzing macOS Mach IPC handlers to find low-level vulnerabilities and possible sandbox escape paths.
Summary
The speaker presents about a year of on-and-off research into fuzzing macOS inter-process communication, focusing on Mach messages, the lowest-level IPC mechanism on the platform. The opening covers fuzzing basics, attack vectors, and why memory-unsafe code yields serious bugs. It then explains Mach ports, port rights, and the bootstrap server, plus how these messages have enabled sandbox escapes in earlier research.
The middle section covers the practical workflow. Rather than picking targets blindly, the researcher used an existing sandbox-checking tool to narrow down which services a sandboxed process could reach, landing on a core audio daemon. Framework binaries are not on disk on modern macOS, so they were pulled from the dyld shared cache. Early attempts that hooked the send call in a debugger were slow and made it hard to tie crashes to inputs, so the approach shifted to a custom harness that calls the message handler directly. Because the handler was not exported, the harness resolved its offset through a custom symbol parser. Seed inputs were captured by dumping live messages while generating audio traffic.
Coverage instrumentation, run alongside Guard Malloc, guided the mutation-based fuzzer toward unexplored branches, and crashes were triaged by exploitability heuristics and whether they reproduced reliably. The talk stresses that early attempts failed often and that this kind of work is slow. Future work includes stateful fuzzing, since handlers may depend on message order, and automatic initialization of services. The researcher planned to release the tooling once approval came through.
Related talks
Talks·44 min
James Henderson
Shows how skipped protocol steps let an IPMI management service bypass authentication, using reverse engineering, fuzzing and debugging.
Talks·31 min
Fitzl Csaba
Explains how Apple's launch and environment constraints limit macOS process launches and blunt logic-bug exploitation.
Main Stage·57 min
Jonathan Brossard
Shows an automated pipeline that lifts stripped binaries to LLVM bytecode, runs static and symbolic analyzers over them, and uses fuzzing and concolic execution to turn candidate bugs into proofs of concept.


