
إثبات المفهوم (PoC)
توفر CryptoLib حلاً برمجياً خالصاً يستخدم بروتوكول أمان روابط البيانات الفضائية CCSDS - الإجراءات الموسعة (SDLS-EP) لتأمين الاتصالات بين مركبة فضائية تعمل بنظام الطيران الأساسي (cFS) ومحطة أرضية. في الإصدارات 1.3.3 والإصدارات السابقة، تحدث ثغرة تجاوز سعة الكومة (Heap Overflow) في الدالة Crypto_TM_ProcessSecurity (crypto_tm.c:1735:8). عند معالجة طول الترويسة الثانوية لحزمة بروتوكول TM، إذا تجاوز طول الترويسة الثانوية الطول الإجمالي للحزمة، يتم تفعيل تجاوز سعة الكومة أثناء عملية memcpy التي تنسخ بيانات الحزمة إلى المخزن المؤقت المخصص ديناميكياً p_new_dec_frame. وهذا يسمح للمهاجم بالكتابة فوق ذاكرة الكومة المجاورة، مما قد يؤدي إلى تنفيذ كود عشوائي أو عدم استقرار النظام.
الأثر: يمكن لحزمة مصممة بعناية أن تسبب تلفاً في ذاكرة الكومة أثناء عمليات memcpy إلى المخزن المؤقت p_new_dec_frame، مما قد يؤدي إلى:
الإصدار المُصحَّح: 810fd66d592c883125272fef123c3240db2f170f
poc.py - نص برمجي بايثون ثنائي الوضع:
./poc.py generate [overflow_amount]
المعلمات:
overflow_amount: عدد البايتات المراد تجاوزها (الافتراضي: 1024)مثال:
# Generate packet with 2048-byte overflow
./poc.py generate 2048 > evil_packet.hex
./poc.py check <hex_packet>
المعلمات:
<hex_packet>: سلسلة سداسية عشرية لحزمة TMمثال:
# Analyze generated packet
./poc.py check $(cat evil_packet.hex)
[6-byte Primary Header][2-byte Secondary Header Length][Payload]
ينشئ النص البرمجي حزماً حيث:
Secondary Header Length > (Total Packet Length - Header Offset)memcpy نسخ بايتات أكثر من المتاحavailable_space = total_length - (offset + length_field_size)
if claimed_length > available_space:
trigger_alert()
هذا البرنامج مخصص لـ:
لا تستخدم هذا البرنامج على أنظمة الإنتاج أو دون إذن صريح. لا يتحمل القائمون على الصيانة أي مسؤولية عن إساءة استخدام هذه الأداة.