Instituto Nacional de ciberseguridad. Sección Incibe
Instituto Nacional de Ciberseguridad. Sección INCIBE-CERT

Vulnerabilidad en "externrefs" no nulos en Wasmtime (CVE-2021-39218)

Gravedad CVSS v3.1:
MEDIA
Tipo:
CWE-125 Lectura fuera de límites
Fecha de publicación:
17/09/2021
Última modificación:
07/11/2023

Descripción

Wasmtime es un runtime de código abierto para WebAssembly y WASI. En Wasmtime desde la versión 0.26.0 y versiones anteriores a 0.30.0, está afectado por una vulnerabilidad por falta de memoria. Se presentaba un error de lectura y escritura no válida y fuera de límites cuando se ejecutaba Wasm que usa "externref"s en Wasmtime. Para desencadenar este fallo, Wasmtime necesita estar ejecutando Wasm que usa "externref"s, el host crea "externrefs" no nulos, Wasmtime lleva a cabo una recolección de basura (GC), y tiene que presentar un marco Wasm en la pila que está en un punto de seguridad de GC donde no hay referencias vivas en este punto de seguridad, y presenta un punto de seguridad con referencias vivas antes en la función de este marco. Bajo este escenario, Wasmtime usaría incorrectamente el mapa de pila de la GC para el punto de seguridad de antes en la función en lugar del punto de seguridad vacío. Esto resultaría en que Wasmtime tratara ranuras de pila arbitrarias como "externref"s que debían ser enraizadas para la GC. En la *next* GC, se determinaría que nada hacía referencia a estas falsas "externref"s (porque nada podría hacer referencia a ellas, ya que no son realmente "externref"s) y entonces Wasmtime las desasignaría y ejecutaría "(ExternRef as Drop)::drop" sobre ellas. Esto resulta en una liberación de memoria que no está necesariamente en la pila (y no debería ser liberada en este momento incluso si lo estuviera), así como potenciales lecturas y escrituras fuera de límites. Aunque el soporte para "externref"s (por medio de la propuesta de tipos de referencia) está habilitado por defecto, a menos que estés creando "externref"s no nulos en tu código anfitrión o activando explícitamente GCs, no puedes ser afectado por este error. Tenemos razones para creer que el impacto efectivo de este bug es relativamente pequeño porque el uso de "externref" es actualmente bastante raro. Este bug ha sido parcheado y los usuarios deberían actualizar a la versión 0.30.0 de Wasmtime. Si no puedes actualizar Wasmtime en este momento, puedes evitar este bug al desactivar la propuesta de tipos de referencia pasando "false" a "wasmtime::Config::wasm_reference_types"

Productos y versiones vulnerables

CPE Desde Hasta
cpe:2.3:a:bytecodealliance:wasmtime:*:*:*:*:*:rust:*:* 0.26.0 (incluyendo) 0.30.0 (excluyendo)
cpe:2.3:o:fedoraproject:fedora:34:*:*:*:*:*:*:*
cpe:2.3:o:fedoraproject:fedora:35:*:*:*:*:*:*:*