CVE-2026-115893: full Wasmtime aarch64 Cranelift br_table sandbox-escape public exploit, PoV, calibration notes, and verification evidence.
# CVE-2026-115893: Wasmtime aarch64 Sandbox Escape
A working full sandbox-escape exploit, proof of vulnerability, and verification
package for CVE-2026-115893 — the aarch64 Cranelift `br_table`
miscompilation in Wasmtime.
## Overview
CVE-2026-115893 is a compiler control-flow bug in Wasmtime's aarch64 Cranelift
backend. A Wasm `br_table` with enough targets produces a `JTSequence` whose
default `B.cond` branch has a displacement outside the conditional-branch
encoding range. The offset wraps, so a valid Wasm module can jump to a
user-influenced offset inside JIT code.
This repository demonstrates a full escape:
- the miscompiled branch lands in an executable JIT literal pool that the
module influenced at compile time;
- the pool executes an AArch64 payload;
- the payload performs a host syscall, replaces the Wasmtime process with
`/usr/bin/touch`, and creates `/tmp/wt-pwn` outside the guest.
The module has no imports and does not use WASI. This is host code execution
with the Wasmtime process's privileges, not automatically root.
This is **not** CVE-2026-115889. That is a separate Cranelift index-overflow
bug whose reproduced impact is a compiler panic/DoS.
## Affected versions
| Version range | CVE-2026-115889 | CVE-2026-115893 (aarch64) |
|---|---|---|
| `<36.0.19` | Vulnerable | Vulnerable |
| `36.0.19` | Fixed | Fixed |
| `37.0.0`–`42.x` | Vulnerable | Vulnerable |
| `43.0.0`–`48.0.6` | Fixed | Vulnerable on aarch64 |
| `48.0.7` | Fixed | Fixed |
| `49.0.0`–`49.0.3` | Fixed | Vulnerable until 49.0.4 |
| `49.0.4+` | Fixed | Fixed |
For this CVE, use a dedicated fixed release: **49.0.4**, **48.0.7**, or
**36.0.19**.
## Verified result
| Environment | Wasmtime | Result |
|---|---|---|
| macOS 26.7.1 arm64, native | 49.0.3 | PASS 5/5: rc=0, marker created |
| Linux arm64 container | 49.0.3 | PASS 3/3: rc=0, marker created |
| macOS arm64 | 49.0.4 | REJECT 3/3: rc=1, no marker |
| Linux arm64 container | 49.0.4 | REJECT 3/3: rc=1, no marker |
| macOS