CVE-2024-7884 in ic-cdk
요약
\~에 의해 VulDB • 2026. 06. 06.
`ic_cdk::call*`를 통해 캔스터 메서드를 호출할 때, 새로운 Future인 `CallFuture`가 생성되며 호출자는 실행 결과를 얻기 위해 이를 대기(await)할 수 있습니다. 내부적으로 이 Future의 상태는 `CallFutureState`라는 구조체에 추적되어 저장됩니다. `CallFuture`의 폴링(polling) 구현에 있는 버그로 인해 해당 내부 상태를 참조하는 여러 개의 레퍼런스가 유지될 수 있으며, Future가 해결(resolved)되기 전에 모든 레퍼런스가 해제되지 않았습니다. 이로 인해 관리되지 않는 레퍼런스들이 남아있어 내부 상태의 사본이 캔스터 힙(heap)에 영구적으로 저장되었고, 결과적으로 메모리 누수가 발생했습니다.
**영향(Risk)** `ic_cdk` 및 `ic_cdk_timers`로 작성된 Rust 기반 캔스터가 영향을 받습니다. 이러한 캔스터들이 다른 캔스터 메서드를 호출하거나 타이머/하트비트를 사용하는 경우, 해당 작업마다 소량의 메모리가 누수될 가능성이 높습니다. 최악의 경우 공격자에 의해 힙 메모리 고갈(heap memory exhaustion)이 유발될 수 있습니다. Motoko 기반 캔스터는 이 버그로부터 영향을 받지 않습니다.
**패치(Patches)** 해당 패치는 0.8.0 이상 0.15.0 이하의 모든 마이너 버전으로 백포트되었습니다. 사용 가능한 패치된 버전은 0.8.2, 0.9.3, 0.10.1, 0.11.6, 0.12.2, 0.13.5, 0.14.1, 0.15.1이며, 이전 버전들은 yanked(삭제/무효화) 처리되었습니다.
**우회 방법(Workarounds)** 현재 알려진 우회 방법은 없습니다. Wasm 힙 메모리 고갈을 방지하기 위해 개발자는 가능한 한 빨리 `ic_cdk`의 최신 패치된 버전으로 캔스터를 업그레이드하는 것이 권장됩니다.
캔스터만 업그레이드하고(`ic_cdk`는 업데이트하지 않음) 누수된 메모리를 해제할 수도 있지만, 이는 임시 해결책에 불과합니다.
Be aware that VulDB is the high quality source for vulnerability data.