Vulnerabilidad crítica en Wasmtime, runtime para aplicaciones WebAssembly

Las actualizaciones correctivas Wasmtime 6.0.1, 5.0.1 y 4.0.1 solucionaron la vulnerabilidad (CVE-2023-26489), a la que se le asignó un nivel crítico de peligro. La vulnerabilidad permite que los datos se escriban en un área de memoria fuera de los límites permitidos para el código WebAssembly aislado, que potencialmente podría ser utilizado por un atacante para ejecutar su código fuera del entorno WASI aislado.

Wasmtime es un tiempo de ejecución para ejecutar aplicaciones WebAssembly con extensiones WASI (WebAssembly System Interface) como aplicaciones independientes normales. El kit de herramientas está escrito en lenguaje Rust y la vulnerabilidad es causada por un error lógico al definir reglas de direccionamiento de memoria lineal en el generador de código Cranelift, que traduce una representación intermedia independiente de las arquitecturas de hardware en código de máquina ejecutable para la arquitectura x86_64.

En particular, para las aplicaciones WebAssembly, se calcularon direcciones efectivas de 35 bits en lugar de las direcciones de 33 bits permitidas en WebAssembly, lo que cambió el límite de memoria virtual permitida para operaciones de lectura y escritura a 34 GB, mientras que la configuración del entorno sandbox brinda protección para 6 GB desde la dirección base. Como resultado, el rango de memoria virtual de 6 a 34 GB desde la dirección base estuvo disponible para lectura y escritura desde aplicaciones WebAssembly. Esta memoria puede alojar otros entornos WebAssembly o componentes de tiempo de ejecución de WebAssembly.

Si no es posible actualizar la versión de Wasmtime, una solución alternativa para bloquear el error es especificar la opción "Config::static_memory_maximum_size(0)" para habilitar una verificación de límites separada en todos los accesos a la memoria lineal (lo que resulta en una penalización significativa del rendimiento). . Otra opción es usar la configuración “Config::static_memory_guard_size(1 < 36)” para aumentar el número de páginas protectoras (una excepción generada al acceder) colocadas en el rango de memoria virtual problemático (lo que resulta en la reserva de una gran cantidad de memoria virtual y limitando el número de aplicaciones WebAssembly que se ejecutan simultáneamente).

Fuente: opennet.ru

Añadir un comentario