CVE-2026-115893 Security Alert: CRITICAL Vulnerability
Urgent: CVE-2026-115893 requires immediate attention.
· 6 min read
Executive Summary
CVE-2026-115893 is a critical sandbox-escape flaw in Wasmtime’s Cranelift backend on aarch64. A malicious WebAssembly module can trigger an incorrect branch target when a single br_table contains more than ~256k targets, potentially jumping to attacker-influenced code and escaping the Wasm sandbox. This affects all Wasmtime/Cranelift versions with aarch64 support since 2020, including default configurations.
Fixed releases: Wasmtime v36.0.19, v48.0.7, and v49.0.4.
Immediate Action
- Patch immediately to
wasmtime v36.0.19,v48.0.7, orv49.0.4depending on your release line. - Disable or isolate untrusted Wasm execution on any aarch64 host until patched; move it to a separate VM/container if you cannot upgrade today.
- Roll back exposure by temporarily refusing user-supplied Wasm modules or routing them to a non-aarch64 worker pool.
- Restart all Wasmtime-based services after upgrading so the fixed engine is loaded everywhere.
- Review vendor guidance and release notes: Wasmtime security advisory / release notes.
Affected Versions
wasmtime@all versions with aarch64 support since 2020vulnerable; upgrade tov36.0.19+ if on the 36.x line.wasmtime@48.xvulnerable; upgrade tov48.0.7+.wasmtime@49.xvulnerable; upgrade tov49.0.4+.wasmtimebuilds using the Cranelift backend on aarch64 are affected.wasmtimeon non-aarch64 targets is not described as affected by this issue.
Resolution Guide
Rust / Cargo
# In your project
cargo update -p wasmtime --precise 49.0.4
# or pin the fixed line in Cargo.toml:
# wasmtime = "49.0.4"
JavaScript / npm, yarn, pnpm (if you consume Wasmtime via a wrapper package or internal SDK)
npm i your-wasmtime-wrapper@latest
yarn add your-wasmtime-wrapper@latest
pnpm add your-wasmtime-wrapper@latest
Python / pip, pipx (for bindings or tooling)
pip install --upgrade your-wasmtime-binding
pipx upgrade your-wasmtime-tool
Java / Maven, Gradle (for native wrapper artifacts)
# Maven: update the dependency version in pom.xml to the fixed release
# Gradle:
dependencies {
implementation("com.example:wasmtime-wrapper:TODO_FIXED_VERSION")
}
Linux packages (if your distro ships Wasmtime)
# Debian/Ubuntu
sudo apt update
sudo apt install --only-upgrade wasmtime
# RHEL/Fedora/CentOS
sudo yum update wasmtime
# or
sudo dnf update wasmtime
Docker image tags
# Rebuild with a fixed base image or updated binary
docker build --no-cache -t myapp:patched .
# If you pin a Wasmtime image, move to a fixed tag:
# FROM wasmtime:49.0.4
Hardening options
# Example: disable untrusted module execution by default
export ALLOW_WASM_UPLOADS=false
# Example: route Wasm jobs away from aarch64 until patched
export WASM_EXECUTION_ARCH=amd64
# Example: run Wasmtime in a separate container/VM with minimal privileges
docker run --read-only --cap-drop=ALL --security-opt=no-new-privileges ...
Code fix example — if your app gates Wasm execution, add a temporary denylist for untrusted modules on aarch64:
use std::env;
fn allow_wasm_execution() -> bool {
let arch = env::consts::ARCH;
let uploads_enabled = env::var("ALLOW_WASM_UPLOADS").unwrap_or_default() == "true";
!(arch == "aarch64" && uploads_enabled)
}
Detection & Verification
Check your Wasmtime version
wasmtime --version
cargo tree | grep wasmtime
cargo metadata --format-version 1 | grep -i wasmtime
Search for vulnerable usage
grep -Rni "wasmtime\|Cranelift\|aarch64" .
grep -Rni "br_table\|wasm" src/
Dependency auditors
cargo audit
npm audit
pip audit
Verify the fix
# Confirm the binary reports a fixed release
wasmtime --version
# Confirm your lockfile resolved to a safe version
grep -n "wasmtime" Cargo.lock
# In CI, fail builds if the old version is present
cargo tree -i wasmtime | grep -E "36\.0\.19|48\.0\.7|49\.0\.4"
Risk and Impact
This flaw can let a crafted Wasm module force Wasmtime to jump to attacker-chosen code on aarch64, breaking the sandbox boundary. For solo developers and small teams, that means a single uploaded module or plugin could compromise the host process, leak secrets, or pivot into adjacent services. Because the issue affects default settings and has existed for years, treat any untrusted Wasm on aarch64 as high risk until you have upgraded and restarted every affected deployment.