
تحليل تقني لـ CVE-2026-52924، وهو ثغرة استخدام بعد التحرير (use-after-free) حرجة في معالجة ملفات تعريف الارتباط المنتهية الصلاحية (stale cookie) الخاصة ببروتوكول SCTP في نواة لينكس، بما في ذلك السبب الجذري، وسير الهجوم، والإصلاح، وطرق الكشف.
.# CVE-2026-52924: استخدام بعد التحرير في SCTP في معالجة ملفات تعريف الارتباط القديمة
معرف CVE: CVE-2026-52924
الخطورة: حرجة (CVSS 9.8)
المكوّن: نواة لينكس - SCTP (بروتوكول نقل التحكم في البث)
النوع: استخدام بعد التحرير (CWE-416, CWE-825)
تاريخ النشر: 2026-06-24
الحالة: تم الإصلاح
تحدث الثغرة الأمنية في معالجة آلة الحالة الخاصة بـ SCTP لحزم COOKIE-ECHO القديمة. تتعلق المشكلة بالتنظيف غير السليم لقائمة انتظار البث الصادرة عند التراجع عن ارتباط (association).
sctp_stream_update() يحرر جدول البث القديم ويُثبّت جدولاً جديداًstream->out_curr لا يزال يشير إلى إدخال sctp_stream_out المحررout_curr->extsctp_sf_do_5_2_6_stale():
├─ استلام خطأ Stale Cookie
├─ التراجع عن حالة الارتباط
└─ استدعاء sctp_stream_update()
├─ تحرير جدول البث القديم
├─ تثبيت جدول البث الجديد
└─ خطأ: stream->out_curr لم يتم إبطاله ❌
لاحقاً عند الإزالة من قائمة الانتظار:
sctp_sched_fcfs_dequeue():
└─ الوصول إلى stream->out_curr->ext (ذاكرة محررة) 💥
BUG: KASAN: slab-use-after-free in sctp_sched_fcfs_dequeue+0x13a/0x140
Read of size 8 at addr ff1100004d4d3208 by task mini_poc/9312
CPU: 1 UID: 1001 PID: 9312 Comm: mini_poc Not tainted 7.1.0-rc1-00305-gbd3a4795d574 #5 PREEMPT(full)
Call trace:
sctp_sched_fcfs_dequeue+0x13a/0x140
sctp_outq_flush+0x1603/0x33e0
sctp_do_sm+0x31c9/0x5d30
sctp_assoc_bh_rcv+0x392/0x6f0
sctp_inq_push+0x1db/0x270
sctp_rcv+0x138d/0x3c10
قد يكون الإصلاح الساذج هو مجرد مسح stream->out_curr:
// إصلاح غير كافٍ ❌
stream->out_curr = NULL;
المشكلة: لا تزال قائمة الانتظار الصادرة تحتوي على:
ستظل هذه المراجع القديمة تسبب استخداماً بعد التحرير عند الوصول إليها.
الحل: تفريغ قائمة الانتظار الصادرة للارتباط بالكامل أثناء معالجة ملفات تعريف الارتباط القديمة.
// الإصلاح الصحيح ✓
sctp_outq_free(&asoc->outqueue);
يضمن هذا:
الملف: net/sctp/sm_statefuns.c
الدالة: sctp_sf_do_5_2_6_stale()
الإضافة: استدعاء sctp_outq_free(&asoc->outqueue) قبل sctp_stream_update()
enum sctp_disposition sctp_sf_do_5_2_6_stale(...)
{
// ... الكود الموجود ...
// تفريغ قائمة الانتظار الصادرة قبل إعادة بناء حالة البث
sctp_outq_free(&asoc->outqueue);
// الآن أصبح تحديث البث آمناً
sctp_stream_update(&asoc->stream, &asoc->c.h_init_tag);
// ... باقي الدالة ...
}
# تفعيل KASAN في إعدادات النواة
CONFIG_KASAN=y
CONFIG_KASAN_GENERIC=y
# يُظهر إخراج وقت التشغيل:
BUG: KASAN: slab-use-after-free
# البحث عن وصول غير آمن إلى stream->out_curr بدون تحقق
grep -r "out_curr->ext" net/sctp/
grep -r "out_curr->" net/sctp/sched*.c
تعطيل SCTP: إزالة وحدة SCTP أو حظر منافذ SCTP (132، 132 UDP)
echo "install sctp /bin/true" >> /etc/modprobe.d/sctp-disable.conf
قواعد جدار الحماية: حظر حركة مرور SCTP عند حدود الشبكة
iptables -A INPUT -p sctp -j DROP
إصدار النواة: الترقية إلى الإصدارات المُصححة
تطبيق تصحيح النواة الذي يستدعي sctp_outq_free() في sctp_sf_do_5_2_6_stale().
sctp_outq_free() يبطل out_curr بشكل صحيح** المؤلف : Elliot
إصدار المستند: 1.0
آخر تحديث: 2026-09-07
التصنيف: معلومات عامة