CVE-2026-35186
Official description Straight from the sourceThe vendor's or NVD's own wording, published unedited. Authoritative, but often terse — it says what broke, rarely what to do.
NVD · uneditedWasmtime is a runtime for WebAssembly. From 25.0.0 to before 36.0.7, 42.0.2, and 43.0.1, Wasmtime's Winch compiler backend contains a bug where translating the table.grow operator causes the result to be incorrectly typed. For 32-bit tables this means that the result of the operator, internally in Winch, is tagged as a 64-bit value instead of a 32-bit value. This invalid internal representation of Winch's compiler state compounds into further issues depending on how the value is consumed. The primary consequence of this bug is that bytes in the host's address space can be stored/read from. This is only applicable to the 16 bytes before linear memory, however, as the only significant return value of table.grow that can be misinterpreted is -1. The bytes before linear memory are, by default, unmapped memory. Wasmtime will detect this fault and abort the process, however, because wasm should not be able to access these bytes. Overall this this bug in Winch represents a DoS vector by crashing the host process, a correctness issue within Winch, and a possible leak of up to 16-bytes before linear memory. Wasmtime's default compiler is Cranelift, not Winch, and Wasmtime's default settings are to place guard pages before linear memory. This means that Wasmtime's default configuration is not affected by this issue, and when explicitly choosing Winch Wasmtime's otherwise default configuration leads to a DoS. Disabling guard pages before linear memory is required to possibly leak up to 16-bytes of host data. This vulnerability is fixed in 36.0.7, 42.0.2, and 43.0.1.
Technical summary Written by usOur analysis, written from the advisory, the CVSS vector and the affected-version data. It adds context the advisory leaves out, and never invents facts that are not in the source.
dbcve analysis · high confidenceThe Winch compiler backend in Wasmtime versions 25.0.0 through 36.0.7/42.0.2/43.0.0 incorrectly types the result of the table.grow operator as 64-bit instead of 32-bit for 32-bit tables. This causes the value -1 to be misinterpreted, potentially reading up to 16 bytes before linear memory. When guard pages are disabled (required for the leak), this results in DoS via process crash; with guard pages enabled (default), only a DoS occurs.
Verify against the referenced sources before acting — the references below are authoritative for this CVE, this summary is not.
Affected products & versions What the vendor confirmedThe version ranges the vendor confirmed as vulnerable. If your version sits inside a range here, treat yourself as exposed until you have upgraded.
NVD · CPE data>= 25.0.0, < 36.0.7>= 37.0.0, < 42.0.2= 43.0.0CVSS breakdown How the score is builtThe industry scoring standard. It rates how the flaw is reached, what it takes to exploit, and what an attacker gains — the score is derived from those, not the other way round.
From the vector- Attack vector
- Network
- Complexity
- Low
- Privileges
- None
- User interaction
- None
- Scope
- Unchanged
- Confidentiality
- None
- Integrity
- None
- Availability
- High
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
Am I affected? How to checkSteps we derive from the advisory and the affected-version data, so you can decide whether this CVE reaches your setup. They are a guide, not a scan — your own configuration is the authority.
dbcve checksWork through these to decide whether this CVE applies to you.
-
Identify Wasmtime versionRun `wasmtime --version` or check the installed Wasmtime package/versionAffected if The version falls within >= 25.0.0 and < 36.0.7, OR >= 37.0.0 and < 42.0.2, OR equals 43.0.0
-
Determine if Winch compiler backend is in useInspect the Wasmtime configuration or runtime flags for explicit selection of the Winch compiler (e.g., look for `--compile winch` or similar compiler selection parameters in your runtime configuration)Affected if Winch compiler backend is explicitly configured or is the default compiler in the affected version range
-
Check guard page configurationInspect the Wasmtime runtime configuration or environment for settings controlling memory guard pages (typically a flag like `--disable-guard-mem` or a config option `GuardMemory` set to false)Affected if Guard pages are explicitly disabled in the runtime configuration (the default setting has guard pages enabled)
-
Verify table.grow usage in WebAssembly modulesAnalyze deployed WebAssembly modules for usage of the table.grow instruction, particularly on 32-bit table typesAffected if WebAssembly modules using table.grow on 32-bit tables are executed with the affected Wasmtime version and Winch compiler
A user is affected if they run Wasmtime versions 25.0.0-36.0.7, 37.0.0-42.0.2, or 43.0.0 with the Winch compiler backend enabled and are executing WebAssembly modules that use the table.grow operator on 32-bit tables.
Generated from the published advisory. Verify against your own configuration.
Remediation Closing itWhat it takes to close this. Where a vendor fix exists we point at it; where none exists we say so plainly, and can build one. Effort estimates are scoped from the advisory, not from your codebase.
dbcve · scoped36.0.742.0.2
Upgrade to Wasmtime 36.0.7, 42.0.2, or 43.0.1, or continue using the default Cranelift compiler, or ensure guard pages before linear memory remain enabled.
Wasmtime 43.0.1 (or latest stable version beyond 43.0.1)
- 1. Identify current Wasmtime version by checking your project's dependency manifest or running: cargo tree -p wasmtime (if using Cargo)
- 2. Verify if Winch compiler is explicitly enabled in your Wasmtime configuration (this is not the default)
- 3. Upgrade Wasmtime to version 43.0.1 (or the latest stable version) using your package manager: cargo update -p wasmtime or update your Cargo.toml version constraint to 43.0.1
- 4. If you cannot upgrade immediately and are using Winch, consider temporarily switching to the default Cranelift compiler as a mitigation
- 5. Verify the upgrade by rebuilding and testing your application
Generated from the published advisory — verify against the referenced sources before acting.
- Consultation1.0 h
- Implementation1.0 h
- Testing2.0 h
- Review / QA1.0 h
An estimate, not a bill — we confirm scope with you before any work starts. Need it this week? Rush from $1,376.
Scan for this in your stack
Free · runs locallyCheck whether your project pulls in CVE-2026-35186 — or any other known-vulnerable package — straight from your lock files. Free and open source; it runs locally and uploads nothing.
References Go to the primary sourcePrimary sources — vendor advisories, patches and trackers. Where our summary and a reference disagree, the reference wins.
Primary sourcesPractitioner notes
ContributedPeer-ranked notes from engineers who’ve handled CVE-2026-35186 in production — separate from our analysis above.
The advisory tells you what broke. It rarely tells you what actually worked. If you’ve dealt with this one, that detail is what the next engineer is searching for.
- The version that genuinely resolved it — not the one the vendor claimed
- A config change or rule that shut the vector down
- A gotcha in the upgrade path that cost you an afternoon
No notes yet
Be the first to add a field note for this CVE — a mitigation you’ve verified, a version caveat, or a link to a working fix. Sign in above to contribute.
A place for practitioners to share what actually worked: a mitigation you’ve tested, a configuration change, a version- or environment-specific caveat, or a link to a verified patch. The most useful notes rise to the top as peers upvote them, so the signal stays high.
- Verified mitigations, workarounds, and config changes
- Version or environment caveats, and links to real fixes
- No weaponised exploit code, or anything meant to cause harm
- No spam, self-promotion, credentials, or personal data