
مستودع بحثي لـ CVE-2026-74469 (DiagSpill)، وهو تجاوز في عدّاد نقل نظير SCTP في نواة Linux يؤدي إلى كتابة خارج الحدود، مع PoC وتحليل السبب الجذري وتفاصيل التصحيح.
DiagSpill
ثغرة في SCTP في نواة Linux ناتجة عن تجاوز سعة عدّاد النقل النظير ذي 16 بت، مما يسمح للعدّاد بالالتفاف من 65535 إلى 0. أثناء تفريغ بيانات تشخيص SCTP، يمكن أن تتسبب القيمة الملتفتة في حجز غير كافٍ لحمولة skb يتبعه كتابة خارج الحدود لبيانات عنوان النظير.
هذا المستودع مخصص للبحث الأمني المصرّح به، وتحليل ثغرات النواة، وبيئات CTF، وتصحيح أخطاء النواة، والاختبار الدفاعي فقط.
لا تستخدم كود إثبات المفهوم ضد أنظمة دون تصريح صريح.
| الحقل | التفاصيل |
|---|---|
| CVE | CVE-2026-74469 |
| الاسم الرمزي | DiagSpill |
| المكوّن | Linux Kernel |
| النظام الفرعي | SCTP / sock_diag |
| الملف المتأثر | net/sctp/associola.c |
| الدالة الأساسية | sctp_assoc_add_peer() |
| فئة الخطأ | تجاوز سعة عدد صحيح / كتابة خارج الحدود |
| التأثير | إفساد ذاكرة النواة |
| التأثير المحتمل | تصعيد الصلاحيات محليًا |
| CVSS v3.1 | 7.0 — High |
| ناقل الهجوم | محلي |
| تعقيد الهجوم | مرتفع |
| الصلاحيات المطلوبة | منخفضة |
| تفاعل المستخدم | لا يوجد |
| الحالة | تم التصحيح |
يصف استشارة CVE الخاصة بنواة Linux المشكلة على أنها تجاوز سعة عدّاد
transport_count ذي 16 بت في SCTP، يتبعه تخصيص أصغر من اللازم لـ INET_DIAG_PEERS وكتابة خارج الحدود أثناء تفريغ البيانات التشخيصية.
يحتفظ الكود المصاب بعدد النقلات النظيرة الفريدة في عدّاد ذي 16 بت:
transport_count
كل نظير فريد جديد يُضاف يزيد العداد.
الحد الفاصل الحرج هو:
65535
إضافة نقل فريد آخر يؤدي إلى:
65535 + 1
↓
0
يخلق الالتفاف الناتج تعارضًا بين:
transport_count
و:
transport_addr_list
تُثق الثقة لاحقًا في النظام الفرعي التشخيصي بالعدّاد المُغلَّف عند حساب حجم مخزن الاستجابة المؤقت، بينما لا يزال يتكرر عبر القائمة الكاملة لعناوين الأقران.
يمكن تمثيل الثغرة على النحو التالي:
SCTP Association
│
▼
Add unique peers
│
▼
transport_count
uint16_t
│
▼
65,535 peers
│
▼
+ 1 unique peer
│
▼
Integer wrap
│
▼
transport_count = 0
│
▼
SCTP sock_diag
│
▼
Reserve incorrect payload
│
▼
Iterate complete peer list
│
▼
Out-of-bounds skb write
ينص الاستشارة الأمنية الأصلية تحديدًا على أن النقل رقم 65,536 يُعيد العداد إلى الصفر.
يعتمد كود التشخيص فعليًا على رؤيتين مختلفتين للحالة نفسها.
transport_count
│
▼
payload size
transport_addr_list
│
▼
copy every peer address
بعد التفاف العدد الصحيح:
transport_count = 0
transport_addr_list =
[peer 1]
[peer 2]
[peer 3]
...
[peer 65536]
يحجز المخصص المساحة بناءً على:
0 peers
بينما لا تزال عملية النسخ قادرة على المعالجة:
65536 peer addresses
هذا التباين يُنتج انتهاكًا لسلامة الذاكرة.
تصف نشرة Linux Kernel تفريغ التشخيص الناتج بأنه يحجز حمولة فارغة ثم يكتب ما يقارب 8 MiB من عناوين الأقران بعد ذيل skb.
من حيث المفهوم:
Expected skb:
┌───────────────────────────────┐
│ INET_DIAG header │
├───────────────────────────────┤
│ Peer addresses │
└───────────────────────────────┘
▲
│
valid end
Actual vulnerable state:
┌───────────────────────────────┐
│ INET_DIAG header │
└───────────────────────────────┘
▲
│
skb tail
↓
Peer address writes
↓
Peer address writes
↓
Peer address writes
↓
OUT-OF-BOUNDS WRITE
يُصنّف Red Hat هذا العيب بأنه CWE-787: Out-of-bounds Write.
يمكن تلخيص المسار ذي الصلة على النحو التالي:
SCTP association
│
▼
sctp_assoc_add_peer()
│
▼
transport_count++
│
▼
16-bit overflow
│
▼
SCTP sock_diag
│
▼
INET_DIAG_PEERS
│
▼
skb payload reservation
│
▼
transport_addr_list iteration
│
▼
Out-of-bounds write
ملف المصدر المتأثر هو:
net/sctp/associola.c
يحدد إعلان CVE لنواة Linux هذا الملف صراحةً.
الإصلاح في المنبع هو:
bd0e9289e2642f6a5c54faad304ce0f41e926d22
ارتكاب:
sctp: prevent peer transport count overflow
يرفض الإصلاح نظيرًا فريدًا جديدًا عندما:
transport_count >= U16_MAX
من المهم أن يحدث الفحص بعد البحث عن النظير الموجود.
وهذا يحافظ على القدرة على استرجاع نقل موجود بالفعل حتى عندما يكون الارتباط قد بلغ الحد الأقصى.
New peer
│
▼
transport_count++
│
▼
Possible 16-bit wrap
│
▼
Diagnostic size mismatch
│
▼
OOB write
New peer
│
▼
Existing peer?
│
┌─┴──────────┐
│ │
YES NO
│ │
▼ ▼
Reuse Check U16_MAX
transport │
▼
Reject at limit
خاصية الأمان المهمة هي منع العدّاد من الالتفاف على الإطلاق مع الحفاظ على دلالات البحث العادية لنظير موجود.
| خاصية الأمان | الثغرة | المُرقَّع |
|---|---|---|
| فرض حد النقل 16-بت | ❌ | ✅ |
| منع التفاف العدّاد | ❌ | ✅ |
| بقاء النظراء الحاليين قابلين للاستخدام | ✅ | ✅ |
| موثوقية حجم الحمولة التشخيصية | ❌ | ✅ |
| منع الكتابة خارج الحدود في skb | ❌ | ✅ |
| التخفيف من إفساد ذاكرة النواة | ❌ | ✅ |