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"
Impacto
Puntuación base 3.x
6.30
Gravedad 3.x
MEDIA
Puntuación base 2.0
3.30
Gravedad 2.0
BAJA
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:*:*:*:*:*:*:* |
Para consultar la lista completa de nombres de CPE con productos y versiones, ver esta página
Referencias a soluciones, herramientas e información
- https://crates.io/crates/wasmtime
- https://github.com/bytecodealliance/wasmtime/commit/398a73f0dd862dbe703212ebae8e34036a18c11c
- https://github.com/bytecodealliance/wasmtime/security/advisories/GHSA-4873-36h9-wv49
- https://lists.fedoraproject.org/archives/list/package-announce%40lists.fedoraproject.org/message/WAVBRYDDUIY2ZR3K3FO4BVYJKIMJ5TP7/
- https://lists.fedoraproject.org/archives/list/package-announce%40lists.fedoraproject.org/message/Z2Z33FTXFQ6EOINVEQIP4DFBG53G5XIY/