Vulnerabilidad en Future CallFuture (CVE-2024-7884)
Gravedad CVSS v3.1:
ALTA
Tipo:
No Disponible / Otro tipo
Fecha de publicación:
05/09/2024
Última modificación:
12/09/2024
Descripción
Cuando se llama a un método de contenedor a través de ic_cdk::call* , se crea un nuevo Future CallFuture y el llamador puede esperar para obtener el resultado de la ejecución. Internamente, el estado del Future se rastrea y se almacena en una estructura llamada CallFutureState. Un error en la implementación de sondeo de CallFuture permite que se mantengan múltiples referencias para este estado interno y no todas las referencias se descartaron antes de que se resolviera el Future. Dado que tenemos referencias no contabilizadas retenidas, una copia del estado interno terminó siendo persistente en el montón del contenedor y, por lo tanto, causó una pérdida de memoria. Impacto Los contenedores creados en Rust con ic_cdk e ic_cdk_timers se ven afectados. Si estos contenedores llaman a un método de contenedor, usan temporizadores o latidos, es probable que pierdan una pequeña cantidad de memoria en cada una de esas operaciones. En el peor de los casos, esto podría provocar el agotamiento de la memoria del montón activado por un atacante. Los contenedores basados en Motoko no se ven afectados por el error. ParchesEl parche ha sido retroportado a todas las versiones menores entre >= 0.8.0, <= 0.15.0. Las versiones parcheadas disponibles son 0.8.2, 0.9.3, 0.10.1, 0.11.6, 0.12.2, 0.13.5, 0.14.1, 0.15.1 y sus versiones anteriores han sido eliminadas. Workarounds, no hay soluciones workarounds en este momento. Se recomienda a los desarrolladores que actualicen su contenedor lo antes posible a la última versión parcheada disponible de ic_cdk para evitar quedarse sin memoria del montón de Wasm. Actualizar los contenedores (sin actualizar `ic_cdk`) también libera la memoria filtrada, pero es solo una solución temporal.
Impacto
Puntuación base 3.x
7.50
Gravedad 3.x
ALTA
Productos y versiones vulnerables
CPE | Desde | Hasta |
---|---|---|
cpe:2.3:a:dfinity:canister_developer_kit_for_the_internet_computer:*:*:*:*:*:rust:*:* | 0.8.0 (incluyendo) | 0.8.2 (excluyendo) |
cpe:2.3:a:dfinity:canister_developer_kit_for_the_internet_computer:*:*:*:*:*:rust:*:* | 0.9.0 (incluyendo) | 0.9.3 (excluyendo) |
cpe:2.3:a:dfinity:canister_developer_kit_for_the_internet_computer:*:*:*:*:*:rust:*:* | 0.11.0 (incluyendo) | 0.11.6 (excluyendo) |
cpe:2.3:a:dfinity:canister_developer_kit_for_the_internet_computer:*:*:*:*:*:rust:*:* | 0.12.0 (incluyendo) | 0.12.2 (excluyendo) |
cpe:2.3:a:dfinity:canister_developer_kit_for_the_internet_computer:*:*:*:*:*:rust:*:* | 0.13.0 (incluyendo) | 0.13.5 (excluyendo) |
cpe:2.3:a:dfinity:canister_developer_kit_for_the_internet_computer:0.10.0:*:*:*:*:rust:*:* | ||
cpe:2.3:a:dfinity:canister_developer_kit_for_the_internet_computer:0.14.0:*:*:*:*:rust:*:* | ||
cpe:2.3:a:dfinity:canister_developer_kit_for_the_internet_computer:0.15.0:*:*:*:*:rust:*:* |
Para consultar la lista completa de nombres de CPE con productos y versiones, ver esta página