CVE-2024-7884 in ic-cdkالمعلومات

الملخص

بحسب VulDB • 08/06/2026

عند استدعاء طريقة Canister عبر ic_cdk::call*، يتم إنشاء Future جديد باسم CallFuture، ويمكن للمُستدعي انتظاره (await) للحصول على نتيجة التنفيذ. داخلياً، يتم تتبع حالة الـ Future وتخزينها في بنية بيانات (struct) تسمى CallFutureState. يسمح عيب في تنفيذ الاستدعاء الدوري (polling implementation) الخاص بـ CallFuture بحفظ عدة مراجع (references) لهذه الحالة الداخلية، ولم يتم إسقاط جميع المراجع قبل حل الـ Future (resolve). ونظراً لوجود مراجع غير محسوبة محفوظة، انتهى الأمر بنسخ الحالة الداخلية والحفاظ عليها في كومة الذاكرة العشوائية (heap) الخاصة بـ Canister، مما تسبب في تسرب للذاكرة.

التأثير: تتأثر Canisters المبنية بلغة Rust باستخدام ic_cdk و ic_cdk_timers. إذا كانت هذه Canisters تستدعي طريقة Canister أخرى، أو تستخدم مؤقتات (timers) أو نبضات قلبية (heartbeat)، فمن المرجح أن تتسرب كمية صغيرة من الذاكرة في كل عملية من هذا القبيل. في أسوأ الحالات، قد يؤدي ذلك إلى استنفاد ذاكرة الكومة (heap memory exhaustion) بمبادرة من مهاجم. لا تتأثر Canisters المبنية بلغة Motoko بهذا العيب.

التصحيحات: تم إعادة تطبيق التصحيح (backported) على جميع الإصدارات الفرعية بين >= 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) الإصدارات السابقة منها.

الحلول البديلة: لا توجد حلول بديلة معروفة في الوقت الحالي. يُنصح المطورون بترقية Canister الخاص بهم في أقرب وقت ممكن إلى أحدث إصدار مصحح متاح من ic_cdk لتجنب نفاد ذاكرة كومة Wasm.

ترقية Canisters (دون تحديث ic_cdk) تحرر أيضاً الذاكرة المتسربة، لكنها تعتبر حلاً مؤقتاً فقط.

Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.

مسؤول

Dfinity

حجز

16/08/2024

إفشاء

05/09/2024

الاعتدال

تمت الموافقة

إدخال

VDB-276647

EPSS

0.00693

KEV

لا

النشاطات

منخفض جدًا

المصادر

Do you want to use VulDB in your project?

Use the official API to access entries easily!