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)
Impacto
Puntuación base 3.x
9.80
Gravedad 3.x
CRÍTICA
Puntuación base 2.0
6.80
Gravedad 2.0
MEDIA
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) |
Para consultar la lista completa de nombres de CPE con productos y versiones, ver esta página