Skip to content
KitploitKITPLOIT
أدواتعمليات الاستغلالالمدونة
Log in
إرسال
أدواتعمليات الاستغلالالمدونة
إرسال

أدوات الاختراق واختبار الاختراق والأمن السيبراني لترسانتك الأمنية!

Kitploit هو دليل لأدوات الاختراق والأمن السيبراني واختبار الاختراق. اكتشف آخر تحديثات المشاريع للعثور على الثغرات وتحليل الأنظمة وأتمتة الاختبارات وتعزيز أمنك.

الخلاصاتاتصالالخصوصية© 2026 Kitploit

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
cve-2026-52910-poc — أداة إعادة إنتاج السباق واختبار الإجهاد لـ CVE-2026-52910، وهو use-after-free في نواة Linux ضمن برامج محدد cBPF الخاصة بـ reuseport، مع فحوصات dmesg والتسريب. | Kitploit
أدوات/GitHubGitHub/yolkfull/cve-2026-52910-poc
أدوات دفاعيةتحليل الثغرات الأمنيةالاستغلالالاختبار العشوائيالأوراق والأبحاثاستغلال الملفات الثنائية
GitHubyolkfull/cve-2026-52910-poc

cve-2026-52910-poc

أداة إعادة إنتاج السباق واختبار الإجهاد لـ CVE-2026-52910، وهو use-after-free في نواة Linux ضمن برامج محدد cBPF الخاصة بـ reuseport، مع فحوصات dmesg والتسريب.

عرض المستودع
1133منذ 20 أياملم تتم المراجعة بعد

الأكثر شعبية

عرض الكل →

اكتشف الأدوات الأكثر استخدامًا من قبل مجتمعنا.

استكشف جميع الأدوات

تصفح مجموعتنا من الأدوات

عرض جميع الأدوات →
مشاركة

CVE-2026-52910 — مُعيد إنتاج use-after-free في reuseport cBPF

CI

أداة إعادة إنتاج سباق (race) ومجموعة اختبار إجهاد لـ CVE-2026-52910، وهو use-after-free (UAF) في معالجة نواة Linux لـ برامج محدِّد classic BPF (cBPF) الخاصة بـ reuseport، تم إصلاحه في المنبع بواسطة الالتزام "bpf: Free reuseport cBPF prog after RCU grace period".

CVECVE-2026-52910
النوعUse-after-free / قراءة خارج الحدود (CWE-125)، CVSS 3.1 7.8 HIGH AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
أُدخل فيv4.5 (مع دعم reuseport cBPF)
أُصلح في5.10.259, 5.15.210, 6.1.176, 6.6.143, 6.12.94, 6.18.36, 7.0.13 (stable); mainline v7.1
تقرير المنبعBUG: KASAN: vmalloc-out-of-bounds in reuseport_select_sock (net/core/sock_reuseport.c:596)
أبلغ عنهEulgyu Kim

[!WARNING] هذه أداة إجهاد للنواة. على نواة مصابة فإنها توسّع عمداً نافذة سباق use-after-free؛ أي إصابة قد تُسقط الجهاز أو تُفسده. شغّلها فقط على أجهزة تملكها أو لديك تفويض صريح باختبارها (أجهزة اختبار افتراضية، أجهزة CI مؤقتة)، وليس أبداً على أنظمة الإنتاج.

الخلل في دقيقة واحدة

SO_REUSEPORT يسمح لعدة sockets بربط نفس منفذ UDP؛ ولكل حزمة واردة تختار النواة أحد sockets المجموعة في reuseport_select_sock() (net/core/sock_reuseport.c). يمكن للمجموعة تثبيت برنامج محدِّد (selector program) — وهو برنامج classic BPF يُرفق عبر setsockopt(SO_ATTACH_REUSEPORT_CBPF) — يقرر لكل حزمة أي socket من المجموعة يستقبلها. يُنفَّذ البرنامج في RX softirq (معالجة استقبال الشبكة) داخل قسم حرج للقراءة من RCU.

الخلل: عند استبدال البرنامج أو فصله عبر setsockopt() (reuseport_attach_prog() / reuseport_detach_prog())، يُحرَّر برنامج cBPF القديم فوراً بواسطة sk_reuseport_prog_free()، دون انتظار قُرّاء RCU الجاريين. وحدة معالجة مركزية لا تزال تمرّ على تعليمات البرنامج المحرَّر تقرأ ذاكرة vmalloc محرَّرة:

sequenceDiagram
    autonumber
    participant C as CPU0 — churner thread
    participant K as setsockopt() path
    participant R as CPU1 — RX softirq

    R->>R: rcu_read_lock()
    R->>R: prog = rcu_dereference(reuse->prog)
    C->>K: setsockopt(SO_ATTACH_REUSEPORT_CBPF, progB)
    K->>K: swap progA → progB
    K->>K: sk_reuseport_prog_free(progA)
    Note right of K: unfixed kernels: bpf_prog_free()<br/>runs NOW — no RCU grace period
    R->>R: execute progA->insns (run_bpf_filter)
    Note right of R: progA was already freed<br/>KASAN: vmalloc-out-of-bounds
    Note over K: fix: call_rcu(sk_reuseport_prog_free_rcu) —<br/>free deferred by one RCU grace period

مسار محدِّد eBPF (SO_ATTACH_REUSEPORT_EBPF) غير متأثر: فهو يحرّر البرامج بالفعل عبر مراحل bpf_prog_put() المؤجلة. يمنح الإصلاح مسار cBPF المعاملة نفسها — فترة سماح RCU واحدة قبل تحرير البرنامج القديم.

تقرير KASAN من المنبع (على نواة تصحيح 7.0):

BUG: KASAN: vmalloc-out-of-bounds in reuseport_select_sock+0xedc/0x1220
Read of size 4 at addr ffffc9000051e004 by task slowme/10208
 net/core/sock_reuseport.c:596

ما يوجد في هذا المستودع

الملفالغرض
reuseport_race_hammer.cمُعيد الإنتاج: أداة hammer متعددة الخيوط تُقلّب محدِّد cBPF تحت حمل UDP كامل، ثم تتحقق من سلامة التسليم.
run_hammer.shغلاف تشغيل واحد: يرفع net.core.optmem_max، يشغّل الـ hammer، ثم يفحص dmesg بحثاً عن splats، و/proc/vmallocinfo بحثاً عن تخصيصات bpf_prog المسرَّبة، واختيارياً kmemleak.
livepatch_cycle.shيطبّق/يتراجع عن livepatch يحمل الإصلاح أثناء تشغيل الـ hammer — يبحث عن مخاطر دورة حياة livepatch في الإصلاح القائم على call_rcu().
Makefileيبني الـ hammer.
.github/workflows/ci.ymlCI: بناء + shellcheck (لا اختبارات نواة وقت التشغيل؛ انظر CI).

البدء السريع

على جهاز اختبار Linux:

$ make
$ sudo ./run_hammer.sh 600        # 10-minute run
...
== result: RC=0 (0 clean / 1 setup / 2 splat / 3 leak / 4 integrity) ==

المتطلبات:

  • جهاز اختبار Linux يمكنك إسقاطه (VM أو عتاد حقيقي). يُوصى بشدة بـ نواة مُفعَّلة بـ KASAN — بدون KASAN، قد تمرّ إصابة السباق دون أن تُلاحظ تماماً.
  • gcc وbash.
  • صلاحية root لفحوصات الغلاف (dmesg، /proc/vmallocinfo، sysctl)؛ الـ hammer نفسه يعمل بدون صلاحيات (شُغّل مُعيد إنتاج المنبع بمعرّف UID 1000).
  • جهاز خامل: حركة المرور في الخلفية ومستخدمو BPF الآخرون يضيفون ضوضاء إلى فحص التسريب.
  • يربط الـ hammer منافذ UDP بدءاً من 21000 (منفذ واحد لكل مجموعة reuseport) — تأكد من أنها حرة.

النتائج المتوقعة:

  • نواة مصابة — KASAN splat في dmesg → RC=2؛ وأحياناً يشتعل فحص سلامة الـ hammer أولاً → RC=4.
  • نواة مُصلَحة — تشغيل نظيف، RC=0، عدد vmalloc لـ bpf_prog مستقر.

نافذة السباق ضيقة جداً (التحرير مقابل تنفيذ RX الجاري)، لذا اعتبر تشغيلاً نظيفاً واحداً غير حاسم. للاختبار الحقيقي شغّله ساعات، مثلاً:

$ sudo ./run_hammer.sh 86400 512 8 16 4 127.0.0.1 0

الـ hammer: reuseport_race_hammer

$ ./reuseport_race_hammer [dur_sec] [insns] [nports] [nsocks] [nsenders] [ip] [ebpf]
المعاملالافتراضيالمعنى
dur_sec300 (min 45)إجمالي ثواني التشغيل
insns256تعليمات حشو في برنامج cBPF المُقلَّب؛ البرنامج الأكبر يعني منطقة محرَّرة أكبر للإصابة. إذا فشل الإرفاق بـ ENOMEM، ارفع net.core.optmem_max (الغلاف يفعل هذا لك).
nports4 (max 64)مجموعات reuseport (منفذ UDP واحد لكل منها، من 21000)
nsocks8 (max 512)sockets لكل مجموعة
nsenders4 (max 32)خيوط مُرسِل UDP لكل مجموعة
ip127.0.0.1العنوان الهدف؛ استخدم عنوان NIC فعلي لتوزيع RX softirqs عبر وحدات المعالجة (RSS)
ebpf01 = أيضاً قلّب إرفاق/فصل SO_ATTACH_REUSEPORT_EBPF (يحتاج CAP_BPF/CAP_NET_ADMIN)؛ هذا المسار غير مصاب، وهذا للمقارنة/التغطية

تشغّل كل مجموعة خيط churner واحداً يبدّل ويفصل محدِّد cBPF عبر setsockopt() في حلقة محكمة، وخيوط sender تُغرق المجموعة بحزم UDP بحجم 64 بايت بينما يعدّ المستقبلون التسليم لكل socket.

مراحل التشغيل (T = dur_sec):

time ──────────────────────────────────────────────────────────────►
 [0 ──────────── T-15s)   [T-15s ── T-10s)   [T-10s ─────────── T]
       CHURN + FLOOD             SETTLE               MEASURE
 churner swaps/detaches    churn frozen,       deterministic program
 the selector prog at      final program       (selects the LAST
 max rate under full       attached             socket): EVERY packet
 UDP flood — THE           (selects LAST        must land on the LAST
 race window open          socket)              socket; snapshot A →
                                               run → snapshot B

فحص السلامة: خلال مرحلة القياس يختار البرنامج النهائي بشكل حتمي آخر socket في المجموعة. إذا لم تهبط كل الحزم التي استقبلتها المجموعة خلال تلك النافذة على ذلك الـ socket، فقد أخطأ الاختيار (تأثير UAF محتمل حتى بدون KASAN) → رمز الخروج 2.

رموز خروج الـ hammer: 0 نجاح · 1 خطأ إعداد/وقت تشغيل · 2 تحذير سلامة.

run_hammer.sh — غلاف تشغيل واحد

يشغّل الـ hammer ويضيف الفحوصات التي تجعل تشغيلاً واحداً ذا معنى:

  1. يأخذ لقطة لعدد تخصيصات bpf_prog في /proc/vmallocinfo؛
  2. يرفع net.core.optmem_max حتى تُرفق برامج cBPF متعددة الكيلوبايت بنظافة؛
  3. يشغّل الـ hammer؛
  4. ينتظر DRAIN (افتراضياً 30 ثانية) حتى تنتهي عمليات التحرير المؤجلة لـ RCU/workqueue؛
  5. يفحص dmesg بحثاً عن splats جديدة (BUG:، Oops:، WARNING:، RIP:، leaked، stuck)؛
  6. يقارن عدد vmalloc لـ bpf_prog قبل/بعد (فحص التسريب)، و اختيارياً يفحص kmemleak إذا وُجد /sys/kernel/debug/kmemleak.
متغير البيئةالافتراضيالمعنى
HAMMER./reuseport_race_hammerملف الـ hammer التنفيذي
DRAIN30ثواني الانتظار بعد التشغيل قبل الفحص
OPTMEM_MAX131072قيمة net.core.optmem_max؛ 0 = لا تلمسها

رموز الخروج: 0 نظيف · 1 خطأ إعداد (بما في ذلك فشل إعداد الـ hammer) · 2 splat في النواة · 3 تسريب bpf_prog محتمل · 4 تحذير سلامة من الـ hammer.

تنزيل الأداة