{"id":3780,"date":"2026-10-26T14:06:01","date_gmt":"2026-10-26T14:06:01","guid":{"rendered":"https:\/\/thedigitalfortress.us\/?p=3780"},"modified":"2026-10-26T14:06:01","modified_gmt":"2026-10-26T14:06:01","slug":"two-critical-wasmtime-flaws-could-let-malicious-webassembly-modules-escape-sandboxes","status":"publish","type":"post","link":"https:\/\/thedigitalfortress.us\/?p=3780","title":{"rendered":"Two Critical Wasmtime Flaws Could Let Malicious WebAssembly Modules Escape Sandboxes"},"content":{"rendered":"<div id=\"articlebody\">\n<div class=\"separator\" style=\"clear: both;\"><a href=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEj5xq9w5oCep_lu7UpdVExPO7yRQ1tMz0YkxljYR_LmwG3WKowZ2CtLPh4F6kASJ7Xu0xJKy4uVzlwj7fPEO3fgKUELS4BqUtDZvGh1P-iqRslXNCLdkcJMCBGSKvJeqrrkeZdfPO9Wmv_v2VqdYEZVavTHw-QHUhli9QYGVhASuSRt3DETy8JMBz1D-kE\/s1700-nu-rw-lo-l85-e365\/wasm.jpg\" style=\"display: block;  text-align: center; clear: left; float: left;\"><\/a><\/div>\n<p>Two critical flaws in <a href=\"https:\/\/docs.wasmtime.dev\/introduction.html\" target=\"_blank\">Wasmtime<\/a>, a WebAssembly runtime that can be built into other software, could allow a malicious WebAssembly module to escape the sandbox intended to contain it, the project&#8217;s maintainers say.<\/p>\n<p>An attacker would first need a vulnerable Wasmtime build to compile a module they control, and one of the flaws affects only ARM64 systems. Fixed versions were released on October 19 and 20, and the maintainers have not reported any attacks.<\/p>\n<p>Wasmtime runs WebAssembly code outside web browsers. Both bugs are in Cranelift, the compiler it uses by default to turn WebAssembly into machine code. Wasmtime&#8217;s maintainers at the Bytecode Alliance rated each flaw 9.9 out of 10 on the CVSS scale in advisories published on October 19.<\/p>\n<p>The sandbox is meant to keep a module inside set limits. A module can only use its own memory and the host functions it is given, and its code can only jump to checked locations.<\/p>\n<p>Because both flaws need a module the attacker controls, the risk is highest for services that compile modules written by other people. Fastly, for example, <a href=\"https:\/\/www.fastly.com\/documentation\/guides\/compute\/getting-started-with-compute\/\" target=\"_blank\">says its Compute platform runs customer code using Wasmtime<\/a>. The advisories do not name any affected services or specify what an attacker could access after escaping the sandbox.<\/p>\n<div class=\"dog_two clear\">\n<div class=\"cf\"><a href=\"https:\/\/thehackernews.uk\/ai-agent-methods-d\" rel=\"nofollow noopener sponsored\" target=\"_blank\"><img loading=\"lazy\" decoding=\"async\" class=\"lazyload\" alt=\"Cybersecurity\" src=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEh-69Sxi6ukfnlM_EpqEB_hRVymcXAcWTNAJetA9huKutPZuG0OOBUvByDCtP_HokC-gM-AzjX0ZhgneUFVzjCyIduRINFj6Yf0JXRFE17_z82UioyT9eoxH2-XQDoD_hInCxc8V2bQrmtnMN-GUR63bseKn7pLRISqlvUJlfuJq8pgCL-Fot7sQDas9D05\/s728-nu-rw-lo-l85-e365\/nudge-3-d.png\" width=\"729\" height=\"91\"\/><\/a><\/div>\n<\/div>\n<p>Neither flaw was in the Known Exploited Vulnerabilities catalog kept by the U.S. Cybersecurity and Infrastructure Security Agency (CISA) as of October 26.<\/p>\n<p><a name=\"more\"\/><\/p>\n<h3>Which Versions Are Affected<\/h3>\n<p>The two flaws were fixed at different times, so whether your version is affected depends on your release line and, for one flaw, your processor architecture.<\/p>\n<table style=\"border-collapse: collapse; border: 1px solid rgb(204, 204, 204); width: 100%;\">\n<tbody>\n<tr>\n<th scope=\"col\" style=\"border: 1px solid rgb(204, 204, 204); padding: 8px;\">Wasmtime version<\/th>\n<th scope=\"col\" style=\"border: 1px solid rgb(204, 204, 204); padding: 8px;\">CVE-2026-115889 (any architecture)<\/th>\n<th scope=\"col\" style=\"border: 1px solid rgb(204, 204, 204); padding: 8px;\">CVE-2026-115893 (ARM64 only)<\/th>\n<th scope=\"col\" style=\"border: 1px solid rgb(204, 204, 204); padding: 8px;\">What to do<\/th>\n<\/tr>\n<tr>\n<th scope=\"row\" style=\"border: 1px solid rgb(204, 204, 204); padding: 8px;\">Before 36.0.19 (includes 24.x)<\/th>\n<td style=\"border: 1px solid rgb(204, 204, 204); padding: 8px;\">Affected<\/td>\n<td style=\"border: 1px solid rgb(204, 204, 204); padding: 8px;\">Affected<\/td>\n<td style=\"border: 1px solid rgb(204, 204, 204); padding: 8px;\">Update to 36.0.19, or move to 48.0.7, 49.0.4 or 50.0.0<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\" style=\"border: 1px solid rgb(204, 204, 204); padding: 8px;\">36.0.19<\/th>\n<td style=\"border: 1px solid rgb(204, 204, 204); padding: 8px;\">Fixed<\/td>\n<td style=\"border: 1px solid rgb(204, 204, 204); padding: 8px;\">Fixed<\/td>\n<td style=\"border: 1px solid rgb(204, 204, 204); padding: 8px;\">None needed for these flaws<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\" style=\"border: 1px solid rgb(204, 204, 204); padding: 8px;\">37.0.0 through 42.x<\/th>\n<td style=\"border: 1px solid rgb(204, 204, 204); padding: 8px;\">Affected<\/td>\n<td style=\"border: 1px solid rgb(204, 204, 204); padding: 8px;\">Affected<\/td>\n<td style=\"border: 1px solid rgb(204, 204, 204); padding: 8px;\">Move to 48.0.7, 49.0.4 or 50.0.0<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\" style=\"border: 1px solid rgb(204, 204, 204); padding: 8px;\">43.0.0 through 47.x<\/th>\n<td style=\"border: 1px solid rgb(204, 204, 204); padding: 8px;\">Not affected<\/td>\n<td style=\"border: 1px solid rgb(204, 204, 204); padding: 8px;\">Affected<\/td>\n<td style=\"border: 1px solid rgb(204, 204, 204); padding: 8px;\">Move to 48.0.7, 49.0.4 or 50.0.0<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\" style=\"border: 1px solid rgb(204, 204, 204); padding: 8px;\">48.0.0 through 48.0.6<\/th>\n<td style=\"border: 1px solid rgb(204, 204, 204); padding: 8px;\">Not affected<\/td>\n<td style=\"border: 1px solid rgb(204, 204, 204); padding: 8px;\">Affected<\/td>\n<td style=\"border: 1px solid rgb(204, 204, 204); padding: 8px;\">Update to 48.0.7<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\" style=\"border: 1px solid rgb(204, 204, 204); padding: 8px;\">48.0.7<\/th>\n<td style=\"border: 1px solid rgb(204, 204, 204); padding: 8px;\">Not affected<\/td>\n<td style=\"border: 1px solid rgb(204, 204, 204); padding: 8px;\">Fixed<\/td>\n<td style=\"border: 1px solid rgb(204, 204, 204); padding: 8px;\">None needed for these flaws<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\" style=\"border: 1px solid rgb(204, 204, 204); padding: 8px;\">49.0.0 through 49.0.3<\/th>\n<td style=\"border: 1px solid rgb(204, 204, 204); padding: 8px;\">Not affected<\/td>\n<td style=\"border: 1px solid rgb(204, 204, 204); padding: 8px;\">Affected<\/td>\n<td style=\"border: 1px solid rgb(204, 204, 204); padding: 8px;\">Update to 49.0.4<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\" style=\"border: 1px solid rgb(204, 204, 204); padding: 8px;\">49.0.4, and 50.0.0 or later<\/th>\n<td style=\"border: 1px solid rgb(204, 204, 204); padding: 8px;\">Not affected<\/td>\n<td style=\"border: 1px solid rgb(204, 204, 204); padding: 8px;\">Fixed<\/td>\n<td style=\"border: 1px solid rgb(204, 204, 204); padding: 8px;\">None needed for these flaws<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Wasmtime <a href=\"https:\/\/docs.wasmtime.dev\/stability-release.html\" target=\"_blank\">supports long-term support (LTS) releases<\/a>, which are numbered in multiples of 12, for two years. Other releases get two months. Security fixes are guaranteed for supported releases.<\/p>\n<p>Only the 36, 48, 49, and 50 release lines are still supported. Every other line, including the 24.x LTS line whose support ended on August 20, 2026, got no fix.<\/p>\n<p>ARM64 hosts that updated to 36.0.7, 42.0.2, or 43.0.1 in April to fix an <a href=\"https:\/\/github.com\/bytecodealliance\/wasmtime\/security\/advisories\/GHSA-jhxm-h53p-jm7w\" target=\"_blank\">earlier Cranelift sandbox escape on ARM64<\/a> are still affected by CVE-2026-115893.<\/p>\n<h3>What to Do<\/h3>\n<p>Update to the fixed release for your line: <a href=\"https:\/\/github.com\/bytecodealliance\/wasmtime\/releases\/tag\/v36.0.19\" target=\"_blank\">36.0.19<\/a>, <a href=\"https:\/\/github.com\/bytecodealliance\/wasmtime\/releases\/tag\/v48.0.7\" target=\"_blank\">48.0.7<\/a>, or <a href=\"https:\/\/github.com\/bytecodealliance\/wasmtime\/releases\/tag\/v49.0.4\" target=\"_blank\">49.0.4<\/a>. Wasmtime 50.0.0, released on October 20, is fixed for both flaws. Hosts on an unsupported line need to move to one of these releases.<\/p>\n<p>Wasmtime can be built into other programs as a library, so updating the command-line tool does not fix them. Each program that includes Wasmtime needs to be rebuilt with a fixed version.<\/p>\n<p>Neither advisory lists a workaround. Until a host is updated, the risk comes from any module an outsider can supply.<\/p>\n<p>Both flaws are listed in RustSec, the database the <a href=\"https:\/\/rustsec.org\/\" target=\"_blank\">cargo-audit<\/a> tool uses to check Cargo.lock files, as <a href=\"https:\/\/rustsec.org\/advisories\/RUSTSEC-2026-0380.html\" target=\"_blank\">RUSTSEC-2026-0380<\/a> and <a href=\"https:\/\/rustsec.org\/advisories\/RUSTSEC-2026-0379.html\" target=\"_blank\">RUSTSEC-2026-0379<\/a>.<\/p>\n<p>As of October 26, <a href=\"https:\/\/github.com\/github\/advisory-database\" target=\"_blank\">GitHub&#8217;s advisory database<\/a> had a reviewed entry for CVE-2026-115889 but none for CVE-2026-115893. GitHub says <a href=\"https:\/\/docs.github.com\/en\/code-security\/concepts\/supply-chain-security\/about-dependabot-alerts\" target=\"_blank\">only reviewed entries trigger Dependabot alerts<\/a>, so Dependabot users should not expect an alert for the ARM64 flaw.<\/p>\n<p>Spin, an open-source tool for building serverless WebAssembly apps that runs on Wasmtime, <a href=\"https:\/\/github.com\/spinframework\/spin\/blob\/v4.2.4\/Cargo.lock\" target=\"_blank\">moved to Wasmtime 50.0.0 in version 4.2.4<\/a> on October 21.<\/p>\n<h3>How the Two Flaws Work<\/h3>\n<p>CVE-2026-115889 comes from how Cranelift stored the numbers it uses to track values inside a function. Before version 43, it packed these numbers into 24-bit fields, and in release builds, a number too large for its field overflowed without any error.<\/p>\n<p>Cranelift could then refer to the wrong value, producing incorrect machine code. A very large WebAssembly function, or one crafted to use many values, can use this to force type confusion and escape the sandbox, according to the advisory.<\/p>\n<div class=\"dog_two clear\">\n<div class=\"cf\"><a href=\"https:\/\/thehackernews.uk\/network-defense-d\" rel=\"nofollow noopener sponsored\" target=\"_blank\"><img loading=\"lazy\" decoding=\"async\" class=\"lazyload\" alt=\"Cybersecurity\" src=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEjVV2rRkX8tRMF6gCzemvQNpwFwGxRWxY1cJEYfoLLSj1EZYJOlj5WTR77t0i6kELXujYcaHTpRDqTjCbVHH5Pnh7wzxUiKP5j4dsDkWIMlp2bmpZsL0jeAsA_19pHH5UPtyBvNkZdyGEULOAsXPcraMP5CYjQRFefhXRSdEjYkrdcpUnc4ILcvcdEfAauE\/s728-nu-rw-lo-l85-e365\/tl-d.jpg\" width=\"729\" height=\"91\"\/><\/a><\/div>\n<\/div>\n<p>Wasmtime&#8217;s main development line had already removed the problem. <a href=\"https:\/\/github.com\/bytecodealliance\/wasmtime\/pull\/12613\" target=\"_blank\">A change merged on February 18<\/a> widened the fields to 32 bits and shipped in Wasmtime 43.0.0 on March 20. Its description presented it as a way to compile larger functions and did not mention security.<\/p>\n<p>The 36.x LTS line got the same change on October 19. The advisory does not say when the security impact was recognized.<\/p>\n<p>CVE-2026-115893 involves br_table, a WebAssembly instruction that jumps to one of many places in the code based on an index. An index outside the table goes to a default target. On ARM64, Cranelift sent these out-of-range indexes to the default with a branch that can only reach about 1 MiB.<\/p>\n<p>A br_table with more than about 256,000 targets made the jump table too big for that reach, so the branch silently pointed to the wrong place.<\/p>\n<p>Any Wasmtime engine on ARM64 with default settings \u00abcan be forced to jump to arbitrary code by a user-controlled Wasm module,\u00bb the advisory says. The bug has been present since Wasmtime first supported ARM64 in 2020.<\/p>\n<p><a href=\"https:\/\/github.com\/bytecodealliance\/wasmtime\/pull\/14826\" target=\"_blank\">The fix<\/a> sends out-of-range indexes through the jump table itself, so no long branch is needed. Fixed versions also refuse to compile a br_table with more than 65,520 targets.<\/p>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Two critical flaws in Wasmtime, a WebAssembly runtime that can be built into other software, could allow a malicious WebAssembly module to escape the sandbox intended to contain it, the&hellip;<\/p>\n","protected":false},"author":1,"featured_media":3781,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[58,1349,11,33,1491,3453,3939,3940],"class_list":["post-3780","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-uncategorized","tag-critical","tag-escape","tag-flaws","tag-malicious","tag-modules","tag-sandboxes","tag-wasmtime","tag-webassembly"],"_links":{"self":[{"href":"https:\/\/thedigitalfortress.us\/index.php?rest_route=\/wp\/v2\/posts\/3780","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/thedigitalfortress.us\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/thedigitalfortress.us\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/thedigitalfortress.us\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/thedigitalfortress.us\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=3780"}],"version-history":[{"count":0,"href":"https:\/\/thedigitalfortress.us\/index.php?rest_route=\/wp\/v2\/posts\/3780\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/thedigitalfortress.us\/index.php?rest_route=\/wp\/v2\/media\/3781"}],"wp:attachment":[{"href":"https:\/\/thedigitalfortress.us\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=3780"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/thedigitalfortress.us\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=3780"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/thedigitalfortress.us\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=3780"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}