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

Vulnerabilidad en la API de las APIs "Linker::func_*" en Wasmtime (CVE-2021-39219)

Gravedad CVSS v3.1:
MEDIA
Tipo:
No Disponible / Otro tipo
Fecha de publicación:
17/09/2021
Última modificación:
07/11/2023

Descripción

Wasmtime es un tiempo de ejecución de código abierto para WebAssembly y WASI. Wasmtime versiones anteriores a 0.30.0, está afectado por una vulnerabilidad de confusión de tipo. Como librería de Rust, la caja "wasmtime" marca claramente qué funciones son seguras y cuáles son "unsafe", garantizando que si los consumidores nunca usan "unsafe" no debería ser posible tener problemas de inseguridad de memoria en sus inserciones de Wasmtime. Se ha detectado un problema en la API segura de las APIs "Linker::func_*". Estas APIs no eran seguras cuando un "Engine" era usado para crear el "Linker" y luego otro "Engine" era usado para crear un "Store" y luego el "Linker" era usado para instanciar un módulo en ese "Store". Un uso cruzado de funciones de "Engine" no está soportado en Wasmtime y esto puede resultar en una confusión de tipo de los punteros de las funciones, resultando en poder llamar de forma segura a una función con el tipo equivocado. Desencadenar este bug requiere el uso de al menos dos valores de "Engine" en una inserción y, además, el uso de dos valores diferentes con un "Linker" (uno en el momento de la creación del "Linker" y otro cuando se instancie un módulo con el "Linker"). Se espera que el uso de más de un "Engine" en una inserción sea relativamente raro ya que un "Engine" está destinado a ser un recurso compartido globalmente, por lo que se espera que el impacto de este problema sea relativamente pequeño. La corrección implementada es cambiar este comportamiento a "panic!()" en Rust en lugar de permitirlo silenciosamente. El uso de diferentes instancias de "Engine" con un "Linker" es un error de programación que "wasmtime" detecta en tiempo de ejecución. 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 y estás usando más de un "Engine" en tu inserción, se recomienda usar sólo un "Engine" para todo el programa si es posible. Un "Engine" está diseñado para ser un recurso globalmente compartido que es adecuado para tener sólo uno durante el tiempo de vida de un proceso entero. Si se requiere el uso de múltiples "Engines" entonces el código debe ser auditado para asegurar que el "Linker" sólo se usa con un "Engine"

Productos y versiones vulnerables

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