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

Vulnerabilidad en Wasmtime (CVE-2022-24791)

Gravedad CVSS v3.1:
CRÍTICA
Tipo:
CWE-416 Utilización después de liberación
Fecha de publicación:
31/03/2022
Última modificación:
08/04/2022

Descripción

Wasmtime es un tiempo de ejecución independiente de estilo JIT para WebAssembly, usando Cranelift. Se presenta una vulnerabilidad de uso de memoria previamente liberada en Wasmtime cuando es ejecutado Wasm que usa externrefs y es habilitada la interrupción de época en Wasmtime. Si no está habilitando explícitamente la interrupción de época (está deshabilitada por defecto) entonces no está afectado. Si está deshabilitando explícitamente la propuesta de tipos de referencia de Wasm (está habilitada por defecto) entonces tampoco le afecta. El uso de memoria previamente liberada es causado por Cranelift que no emite mapas de pila cuando se presentan puntos de seguridad dentro de los bloques fríos. Los bloques fríos son producidos cuando la interrupción de la época está habilitada. Los bloques fríos son emitidos al final de las funciones compiladas, y cambian el orden en que son emitidos los bloques frente a los definidos. Esta reordenación causó accidentalmente que Cranelift omitiera la emisión de algunos mapas de pila porque esperaba emitir los mapas de pila en orden de definición de bloques, en lugar de en orden de emisión de bloques. Cuando Wasmtime recogía finalmente la basura, no encontraba referencias vivas en la pila debido a los mapas de pila faltantes, pensaba que eran basura no referenciada y, por tanto, los reclamaba. Entonces, una vez terminada la recolección, el código Wasm podía usar las referencias recuperadas demasiado pronto, lo cual es un uso de memoria previamente liberada. Han sido publicados parches en versiones 0.34.2 y 0.35.2, que corrigen la vulnerabilidad. Es recomendado a todos los usuarios de Wasmtime actualizar a estas versiones parcheadas. Si actualizar no es una opción para ti en este momento, puedes evitar la vulnerabilidad: deshabilitando la propuesta de tipos de referencia de Wasm, config.wasm_reference_types(false); o deshabilitando la interrupción de época si la estabas habilitando previamente. config.epoch_interruption(false)

Productos y versiones vulnerables

CPE Desde Hasta
cpe:2.3:a:bytecodealliance:wasmtime:*:*:*:*:*:rust:*:* 0.34.0 (incluyendo) 0.34.2 (excluyendo)
cpe:2.3:a:bytecodealliance:wasmtime:*:*:*:*:*:rust:*:* 0.35.0 (incluyendo) 0.35.2 (excluyendo)