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, or v49.0.4 depending 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 2020 vulnerable; upgrade to v36.0.19+ if on the 36.x line.
  • wasmtime@48.x vulnerable; upgrade to v48.0.7+.
  • wasmtime@49.x vulnerable; upgrade to v49.0.4+.
  • wasmtime builds using the Cranelift backend on aarch64 are affected.
  • wasmtime on 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.

Keep reading