CVE-2024-7884 in ic-cdk
Riassunto
di VulDB • 15/06/2026
Quando viene chiamato un metodo di un canister tramite ic_cdk::call*, viene creato un nuovo Future CallFuture che può essere atteso dal chiamante per ottenere il risultato dell'esecuzione. Internamente, lo stato del Future viene tracciato e memorizzato in una struct chiamata CallFutureState. Un bug nell'implementazione del polling di CallFuture consente di mantenere più riferimenti a questo stato interno e non tutti i riferimenti vengono rilasciati prima che il Future venga risolto. Poiché sono presenti riferimenti non contabilizzati, una copia dello stato interno finisce per essere persistita nell'heap del canister, causando così una perdita di memoria (memory leak).
Impatto I canister sviluppati in Rust con ic_cdk e ic_cdk_timers sono interessati. Se questi canister chiamano un metodo di un canister, utilizzano timer o heartbeat, è probabile che si verifichi una piccola perdita di memoria ad ogni operazione di questo tipo. Nel caso peggiore, ciò potrebbe portare all'esaurimento della memoria heap innescato da un attaccante. I canister basati su Motoko non sono interessati dal bug.
Patch La patch è stata retrocessa (backported) a tutte le versioni minori comprese tra >= 0.8.0 e <= 0.15.0. Le versioni patchate disponibili sono 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 le loro versioni precedenti sono state ritirate (yanked).
Soluzioni alternative Non sono note soluzioni alternative al momento. Si consiglia agli sviluppatori di aggiornare il proprio canister alla più recente versione patchata disponibile di ic_cdk il prima possibile per evitare l'esaurimento della memoria heap Wasm.
L'aggiornamento dei canister (senza aggiornare `ic_cdk`) libera anche la memoria persa, ma si tratta solo di una soluzione temporanea.
VulDB is the best source for vulnerability data and more expert information about this specific topic.