CVE-2026-52924 — تحليل تقني لـ CVE-2026-52924، وهو ثغرة استخدام بعد التحرير (use-after-free) حرجة في معالجة ملفات تعريف الارتباط المنتهية الصلاحية (stale cookie) الخاصة ببروتوكول SCTP في نواة لينكس، بما في ذلك السبب الجذري، وسير الهجوم، والإصلاح، وطرق الكشف. | Kitploit
تحليل تقني لـ 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 الحالة: تم الإصلاح
الإصدارات المتأثرة
نواة لينكس < 5.10.259
نواة لينكس < 5.15.210
نواة لينكس < 6.1.176
نواة لينكس < 6.6.143
نواة لينكس < 6.12.94
نواة لينكس < 6.18.36
نواة لينكس < 7.0.13
نواة لينكس < 7.1
التفاصيل الفنية
السبب الجذري
تحدث الثغرة الأمنية في معالجة آلة الحالة الخاصة بـ SCTP لحزم COOKIE-ECHO القديمة. تتعلق المشكلة بالتنظيف غير السليم لقائمة انتظار البث الصادرة عند التراجع عن ارتباط (association).
تسلسل الهجوم
التشغيل العادي: ينتقل الارتباط إلى حالة COOKIE_ECHOED
وضع بيانات المستخدم في قائمة الانتظار: يرسل التطبيق بيانات، يتم وضعها في قائمة الانتظار للإرسال
خطأ ملف تعريف الارتباط القديم: يرسل النظير البعيد خطأ Stale Cookie
يتراجع الارتباط من COOKIE_ECHOED ← COOKIE_WAIT
تشغيل التراجع:
تحديث حالة البث:sctp_stream_update() يحرر جدول البث القديم ويُثبّت جدولاً جديداً
مؤشر غير صالح:stream->out_curr لا يزال يشير إلى إدخال sctp_stream_out المحرر
وصول الإزالة من قائمة الانتظار: عندما يحاول المجدول الإزالة من قائمة الانتظار (FCFS, RR, PRIO)، يصل إلى out_curr->ext
استخدام بعد التحرير: الوصول إلى ذاكرة محررة ← انهيار النواة عبر اكتشاف KASAN
تدفق الكود الإشكالي
root@kitploit:~
sctp_sf_do_5_2_6_stale():
├─ استلام خطأ Stale Cookie
├─ التراجع عن حالة الارتباط
└─ استدعاء sctp_stream_update()
├─ تحرير جدول البث القديم
├─ تثبيت جدول البث الجديد
└─ خطأ: stream->out_curr لم يتم إبطاله ❌
لاحقاً عند الإزالة من قائمة الانتظار:
sctp_sched_fcfs_dequeue():
└─ الوصول إلى stream->out_curr->ext (ذاكرة محررة) 💥
مثال على الانهيار
root@kitploit:~
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
لماذا تحديث out_curr وحده غير كافٍ
قد يكون الإصلاح الساذج هو مجرد مسح stream->out_curr:
root@kitploit:~
// إصلاح غير كافٍ ❌
stream->out_curr = NULL;
المشكلة: لا تزال قائمة الانتظار الصادرة تحتوي على:
كتل بيانات في قائمة الانتظار تشير إلى حالة البث القديمة
إدخالات قائمة إعادة الإرسال تشير إلى البث القديم
كتل تحكم مرفوعة مع بيانات وصفية للبث القديم
ستظل هذه المراجع القديمة تسبب استخداماً بعد التحرير عند الوصول إليها.
الإصلاح الصحيح
الحل: تفريغ قائمة الانتظار الصادرة للارتباط بالكامل أثناء معالجة ملفات تعريف الارتباط القديمة.
إبطال المؤشرات المخزنة مؤقتاً في المجدول (out_curr، وغيرها)
إمكانية إعادة بناء حالة البث بأمان أثناء إعادة تشغيل COOKIE_WAIT
عدم وجود مراجع معلقة لإدخالات البث المحررة
موقع التنفيذ
الملف:net/sctp/sm_statefuns.c الدالة:sctp_sf_do_5_2_6_stale() الإضافة: استدعاء sctp_outq_free(&asoc->outqueue) قبل sctp_stream_update()
root@kitploit:~
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);
// ... باقي الدالة ...
}
تحليل التأثير
عوامل الخطورة (CVSS 9.8)
متجه الهجوم: شبكة (CVSS:3.1/AV:N)
تعقيد الهجوم: منخفض (CVSS:3.1/AC:L)
الصلاحيات المطلوبة: لا شيء (CVSS:3.1/PR:N)
تفاعل المستخدم: لا شيء (CVSS:3.1/UI:N)
النطاق: غير متغير (CVSS:3.1/S:U)
تأثير السرية: مرتفع (CVSS:3.1/C:H)
تأثير السلامة: مرتفع (CVSS:3.1/I:H)
تأثير التوافر: مرتفع (CVSS:3.1/A:H)
متطلبات الاستغلال
وصول شبكي إلى النظام المستهدف (منفذ SCTP مفتوح)
القدرة على إرسال حزم SCTP لإنشاء اتصال
إرسال خطأ Stale Cookie في توقيت محدد (حالة COOKIE_ECHOED)
تشغيل عملية إزالة من قائمة انتظار المجدول
سيناريوهات الهجوم
حرمان من الخدمة: انهيار النواة بشكل متكرر ← DoS
كشف المعلومات: قراءة ذاكرة النواة عبر UAF
تصعيد الصلاحيات: محتمل عبر التلاعب بالذاكرة
تنفيذ كود عن بُعد: ممكن مع استغلال تلف الذاكرة
طرق الكشف
كشف KASAN (وقت التشغيل)
root@kitploit:~
# تفعيل KASAN في إعدادات النواة
CONFIG_KASAN=y
CONFIG_KASAN_GENERIC=y
# يُظهر إخراج وقت التشغيل:
BUG: KASAN: slab-use-after-free
التحليل الثابت
root@kitploit:~
# البحث عن وصول غير آمن إلى stream->out_curr بدون تحقق
grep -r "out_curr->ext" net/sctp/
grep -r "out_curr->" net/sctp/sched*.c
الكشف الشبكي
مراقبة حزم خطأ Stale Cookie الخاصة بـ SCTP (النوع 3، الرمز 1)
تتبع أنماط التراجع عن الاتصال
التنبيه على الانتقالات السريعة COOKIE_ECHOED ← COOKIE_WAIT
استراتيجيات التخفيف
تخفيفات مؤقتة (حتى التحديث)
تعطيل SCTP: إزالة وحدة SCTP أو حظر منافذ SCTP (132، 132 UDP)