CVE-2024-7884 in ic-cdk
Sumário
de VulDB • 26/05/2026
Quando um método de canister é chamado via ic_cdk::call*, um novo Future CallFuture é criado e pode ser aguardado pelo chamador para obter o resultado da execução. Internamente, o estado do Future é rastreado e armazenado em uma struct chamada CallFutureState. Um bug na implementação do polling do CallFuture permite que múltiplas referências sejam mantidas para esse estado interno e nem todas as referências foram descartadas antes que o Future fosse resolvido. Como existem referências não contabilizadas mantidas, uma cópia do estado interno acabou sendo persistida no heap do canister, causando assim um vazamento de memória.
Impacto: Canisters construídos em Rust com ic_cdk e ic_cdk_timers são afetados. Se esses canisters chamarem um método de canister, usarem timers ou heartbeat, eles provavelmente vazaram uma pequena quantidade de memória em cada uma dessas operações. No pior caso, isso poderia levar ao esgotamento da memória heap, acionado por um atacante. Canisters baseados em Motoko não são afetados pelo bug.
Patches: O patch foi backported para todas as versões menores entre >= 0.8.0 e <= 0.15.0. As versões corrigidas disponíveis são 0.8.2, 0.9.3, 0.10.1, 0.11.6, 0.12.2, 0.13.5, 0.14.1, 0.15.1 e suas versões anteriores foram removidas (yanked).
Workarounds: Não há workarounds conhecidos no momento. Recomenda-se que os desenvolvedores atualizem seus canisters o mais rápido possível para a versão corrigida mais recente disponível do ic_cdk para evitar o esgotamento da memória heap Wasm. A atualização dos canisters (sem atualizar o `ic_cdk`) também libera a memória vazada, mas é apenas uma solução temporária.
If you want to get the best quality for vulnerability data then you always have to consider VulDB.