CVEReports
CVEReports

Automated vulnerability intelligence platform. Comprehensive reports for high-severity CVEs generated by AI.

Product

  • Home
  • Sitemap
  • RSS Feed

Company

  • About
  • Contact
  • Privacy Policy
  • Terms of Service

© 2026 CVEReports. All rights reserved.

Made with love by Amit Schendel & Alon Barad



CVE-2026-34946

CVE-2026-34946: Host Panic Denial of Service in Wasmtime Winch Compiler

Amit Schendel
Amit Schendel
Senior Security Researcher

Apr 10, 2026·5 min read·22 visits

Executive Summary (TL;DR)

Wasmtime's Winch compiler fails to properly translate global table indices to defined table indices during `table.fill` operations, allowing a guest module to crash the host runtime (DoS) by triggering a bounds check panic.

A moderate-severity vulnerability in the Wasmtime Winch compiler backend allows a malicious WebAssembly guest module to trigger a host panic via an out-of-bounds array access. The flaw stems from a regression during table index refactoring where Winch was not updated to distinguish between global and defined table indices.

Vulnerability Overview

Wasmtime is an open-source runtime for WebAssembly, featuring multiple compiler backends. The Winch compiler backend is designed as a baseline compiler optimizing for compilation speed over execution performance. It operates alongside the primary Cranelift optimizing compiler.

The vulnerability, identified as CVE-2026-34946, resides within the Winch compiler's handling of the table.fill WebAssembly instruction. When a compiled guest module executes this specific instruction, the host runtime may encounter an unhandled Rust panic. This defect is classified under CWE-670 (Always-Incorrect Control Flow Implementation).

The primary consequence is a reliable Denial of Service (DoS) against the host application embedding Wasmtime. An alternative consequence involves spec-incorrect execution where the guest modifies an unintended table memory region. Memory safety is not compromised due to Rust's bounds checking guarantees.

Root Cause Analysis

The defect originates from a desynchronization between Wasmtime's core runtime data structures and the code emitted by the Winch compiler. A prior structural refactoring in Wasmtime (PR #11254) altered the internal representation of WebAssembly tables. This update introduced a strict distinction between global module table indices (TableIndex) and instance-specific defined table indices (DefinedTableIndex).

When executing table operations, host-side library calls expect the caller to provide a DefinedTableIndex. This index is used to look up metadata within a defined tables array specific to the executing instance. The Winch compiler was omitted from the updates associated with this refactoring.

Consequently, Winch's code generation logic continued to emit instructions that pass the global TableIndex to the host libcalls. If a guest module imports tables, the global indices for locally defined tables are shifted upward. This shifting causes the global TableIndex to numerically exceed the corresponding DefinedTableIndex.

Code Analysis

To understand the failure state, we examine the expected behavior of table interactions in WebAssembly. When a module imports tables, the global table index space reserves the lowest indices for the imports. Locally defined tables occupy the subsequent indices. When Winch passes a local table's global index to a host function expecting an array offset starting from zero, the index is artificially inflated.

The host runtime performs a strict bounds check on the defined tables metadata array using this supplied index. Because the index incorporates the offset of the imported tables, it routinely points beyond the end of the array. This out-of-bounds access immediately triggers a standard Rust bounds check failure (panic!).

The fix implementation addresses the semantic gap between logical module indices and runtime implementation offsets. The patch modifies the Winch compiler to correctly translate the logical index before invoking host functions.

Commit 96dde3aa67a5c456e4091ed60a9e3e774f0efd85 introduces internal helper functions to handle table resolution correctly. These helpers determine whether a table is imported or defined, and translate the logical TableIndex into the correct DefinedTableIndex runtime offset before the value is utilized by the host logic.

Exploitation and Attack Methodology

Exploitation requires the attacker to supply a crafted WebAssembly module to a host environment using the Winch compiler backend. The environment must accept and execute untrusted WebAssembly binaries. No authentication is inherently required unless enforced by the specific host application.

The attack vector relies on the inclusion of specific WebAssembly instructions and a targeted module structure. The attacker constructs a module that imports at least one table, effectively shifting the global index of subsequent locally defined tables. The module then invokes the table.fill instruction targeting a locally defined table.

The regression test provided by the maintainers serves as a clear proof-of-concept. The module imports a table $t1 and defines a second table $t2. When table.fill is executed against $t2, the unpatched Winch compiler passes the global index (1) instead of the defined index (0) to the host.

(module
  (import "t" "t" (table $t1 1 funcref))
  (table $t2 2 funcref)
  
  (func (export "fill2") (param i32 funcref i32)
    local.get 0
    local.get 1
    local.get 2
    table.fill $t2)
)

Impact Assessment

The primary impact of CVE-2026-34946 is a Denial of Service condition affecting the Wasmtime host application. Because the out-of-bounds read triggers an unhandled Rust panic, the entire host process terminates abruptly. This abrupt termination provides a reliable mechanism for an attacker to disrupt services relying on the Wasmtime engine.

This vulnerability achieves a CVSS v4.0 score of 5.9. The vector string CVSS:4.0/AV:N/AC:L/AT:P/PR:L/UI:P/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N reflects high availability impact against the vulnerable system, with no confidentiality or integrity consequences. The attack complexity is low, but relies on the host exposing module compilation capabilities.

In specific edge cases where the index bounds check does not fail (e.g., the module defines a sufficiently large number of tables), the mismatch results in the host modifying the incorrect table. This creates spec-incorrect behavior within the WebAssembly guest environment but does not compromise host memory or execution context.

Remediation and Mitigation Guidance

The maintainers of the Bytecode Alliance have released official patches addressing this vulnerability in Wasmtime versions 36.0.7, 42.0.2, and 43.0.1. Administrators must update the host application's Wasmtime dependency to a secure version to prevent the host panic condition.

If immediate patching is not feasible, mitigation can be achieved by disabling the Winch compiler backend entirely. Reverting to Wasmtime's default Cranelift compiler removes the vulnerable code path, as Cranelift correctly implements the table index translation logic required by the host runtime.

Additionally, host applications can implement pre-compilation validation modules. Security engineers can configure static analysis checks to reject incoming WebAssembly modules containing both imported tables and the table.fill instruction, effectively neutralizing the required exploitation preconditions.

Official Patches

Bytecode AllianceWasmtime's April 9, 2026 Security Advisories
GitHubGitHub Security Advisory GHSA-q49f-xg75-m9xw

Fix Analysis (2)

Technical Appendix

CVSS Score
5.9/ 10
CVSS:4.0/AV:N/AC:L/AT:P/PR:L/UI:P/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N

Affected Systems

Wasmtime RuntimeWasmtime Winch Compiler Backend

Affected Versions Detail

Product
Affected Versions
Fixed Version
Wasmtime
Bytecode Alliance
>= 25.0.0, < 36.0.736.0.7
Wasmtime
Bytecode Alliance
>= 37.0.0, < 42.0.242.0.2
Wasmtime
Bytecode Alliance
>= 43.0.0, < 43.0.143.0.1
AttributeDetail
CWE IDCWE-670
Attack VectorNetwork / Local Module Execution
CVSS v4.0 Score5.9 (Moderate)
ImpactDenial of Service (Host Panic)
Exploit StatusProof of Concept Available
RemediationPatch Available

MITRE ATT&CK Mapping

T1499Endpoint Denial of Service
Impact
T1204User Execution
Execution
CWE-670
Always-Incorrect Control Flow Implementation

Always-Incorrect Control Flow Implementation

Vulnerability Timeline

Security audit commenced utilizing LLM tooling
2026-03-20
Wasmtime published advisory GHSA-q49f-xg75-m9xw
2026-04-09
Patches released in Wasmtime versions 43.0.1, 42.0.2, 36.0.7
2026-04-09
CVE-2026-34946 officially published
2026-04-09

References & Sources

  • [1]CVE.org Record for CVE-2026-34946

Attack Flow Diagram

Press enter or space to select a node. You can then use the arrow keys to move the node around. Press delete to remove it and escape to cancel.
Press enter or space to select an edge. You can then press delete to remove it or escape to cancel.

More Reports

•1 day ago•CVE-2026-63462
7.5

CVE-2026-63462: Unauthenticated Stack Overflow Denial of Service in Unleash Server

An unauthenticated remote denial of service vulnerability exists in the Unleash feature management platform. By submitting a crafted JSON payload containing deeply nested structures to an OpenAPI-validated endpoint, an attacker can trigger uncontrolled recursion within the error formatting module. This leads to a call-stack exhaustion (RangeError: Maximum call stack size exceeded) inside the Node.js runtime, causing the service to crash immediately without recovery.

Alon Barad
Alon Barad
8 views•6 min read
•1 day ago•CVE-2026-63004
5.5

CVE-2026-63004: Server-Side Request Forgery in Unleash Addon and Integration Subsystem

CVE-2026-63004 is a server-side request forgery (SSRF) vulnerability in the Unleash feature management platform. Authenticated administrators with CREATE_ADDON or UPDATE_ADDON privileges can exploit this vulnerability to initiate requests to loopback addresses, private networks, and cloud metadata endpoints, potentially leading to information disclosure and credential extraction.

Amit Schendel
Amit Schendel
7 views•8 min read
•1 day ago•CVE-2026-63466
4.1

CVE-2026-63466: Process-Wide Security Degradation via Global Module Mutation in Unleash

Prior to version 8.0.3, Unleash's Markdown event formatter directly mutated the global template-escaping function of the shared mustache Node.js module, resulting in a process-wide security degradation where HTML/Markdown escaping was permanently disabled for the application lifetime.

Alon Barad
Alon Barad
3 views•6 min read
•1 day ago•CVE-2026-76904
9.8

CVE-2026-76904: Unauthenticated SQL Injection in GeoTools PostGIS DataStore Component

A critical SQL injection vulnerability exists in the GeoTools open-source Java library. This vulnerability is situated within the post-processing phase of OGC Filter conversion inside the PostGIS DataStore module. Specifically, the `jsonArrayContains` function does not validate or sanitize its arguments before constructing PostgreSQL SQL/JSON path evaluation queries. An unauthenticated remote attacker can exploit this weakness by submitting crafted filters via standard OGC services like WFS or WMS to execute arbitrary SQL commands on the underlying database system.

Alon Barad
Alon Barad
9 views•5 min read
•1 day ago•CVE-2026-61824
8.2

CVE-2026-61824: High-Severity Cross-Site Scripting (XSS) via Unsanitized Site Extractors in Defuddle

CVE-2026-61824 is a high-severity Cross-Site Scripting (XSS) vulnerability in kepano/defuddle before version 0.19.1. Custom site extractors for platforms such as X/Twitter, Substack, and YouTube constructed HTML representations via template string interpolation without output escaping. This allowed malicious pages to bypass standard parser sanitization routines and execute arbitrary JavaScript.

Amit Schendel
Amit Schendel
5 views•7 min read
•1 day ago•CVE-2026-63421
7.5

CVE-2026-63421: Query Limit Bypass via Negative Integer Input in KeystoneJS core resolvers

A high-severity vulnerability exists in KeystoneJS, a popular Node.js CMS and GraphQL framework, where the query resolution engine fails to validate signed negative integers within the pagination subsystem. Unauthenticated remote attackers can leverage this flaw to bypass the 'graphql.maxTake' safety boundary. By sending large negative values in the 'take' query parameter, the underlying Prisma ORM interprets the value as an instruction to fetch rows from the end of the collection, allowing malicious actors to bypass pagination limits, trigger database resource exhaustion, and execute application-level Denial of Service (DoS) attacks.

Alon Barad
Alon Barad
6 views•6 min read