Skip to content
KitploitKITPLOIT
أدواتالمدونة
إرسال
أدواتالمدونة
إرسال

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

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

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

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
CVE-2025-38502-Linux-LPE — مستودع بحثي لـ CVE-2025-38502، وهو وصول خارج الحدود في التخزين المحلي لمجموعة BPF cgroup في نواة Linux عبر الاستدعاءات الخلفية (tail calls) مما يتيح تصعيد الصلاحيات محليًا. | Kitploit
أدوات/GitHubGitHub/abraxas/cve-2025-38502-linux-lpe
تصعيد الامتيازاتتحليل الذاكرة الجنائيتحليل الثغرات الأمنيةالاستغلالالهندسة العكسيةالأوراق والأبحاثالتعلم والتعليماستغلال الملفات الثنائية

الأكثر شعبية

عرض الكل →

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

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

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

عرض جميع الأدوات →
مشاركة
GitHub
abraxas/cve-2025-38502-linux-lpe

CVE-2025-38502-Linux-LPE

مستودع بحثي لـ CVE-2025-38502، وهو وصول خارج الحدود في التخزين المحلي لمجموعة BPF cgroup في نواة Linux عبر الاستدعاءات الخلفية (tail calls) مما يتيح تصعيد الصلاحيات محليًا.

عرض المستودع
منذ 9س 35دلم تتم المراجعة بعد

ABRAXAS LABS — CVE-2025-38502

Abraxas Labs · abraxaslabs.tech · github.com/abraxas · @abraxas_null

CVE-2025-38502

وصول خارج الحدود إلى التخزين المحلي لـ cgroup في نواة Linux عبر BPF باستخدام tail calls

CVECVE-2025-38502
CWECWE-125 — قراءة خارج الحدود
المورّدLinux kernel
المكوّنkernel/bpf/core.c, include/linux/bpf.h (التخزين المحلي لـ cgroup + tail calls)
التأثيرتلف في ذاكرة النواة المحلية؛ تصعيد الصلاحيات وارد على الأنوية غير المُرقّعة
ناقل الهجوممحلي (AV:L)
الصلاحياتمنخفضة (PR:L) — عملية قادرة على تحميل برامج BPF من النوع CGROUP_SKB (أو برامج مكافئة مرتبطة بـ cgroup)
تفاعل المستخدملا يوجد
CVSS 3.1 (kernel.org CNA)7.8 HIGH — CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
CVSS 3.1 (NVD)7.1 HIGH — CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:H
الإفصاح العام16 أغسطس 2025
الإصلاح في المنبعabad3d0 في 6.17-rc1؛ تم نقله إلى 6.16.1، 6.12.46، 6.6.105، 6.1.151، 5.15.192

للبحث / الاستخدام التعليمي فقط. لا تقم بتشغيل أو نشر أو استخدام المواد الموجودة في هذا المستودع ضد أي مضيف ما لم يكن لديك إذن كتابي صريح من كلٍّ من الجهة المستضيفة لهذا المستودع ومالك الأنظمة المستهدفة. تم العثور عليه في البرية.

اسم الملف المصدري CVE-2025-3850-Linux-LPE-Abaraxas-Labs.c يقتطع المعرّف. السجل المنشور هو CVE-2025-38502. لا يوجد CVE في Linux بالمعرّف CVE-2025-3850.


المحتويات

  • الملخص
  • التأثير
  • السبب الجذري
  • إصدارات النواة المتأثرة
  • حالة التوزيعات
  • الشروط المسبقة
  • الإصلاح
  • فحص نظام قيد التشغيل
  • التخفيف
  • هيكل المستودع
  • المراجع
  • التواصل
  • إخلاء المسؤولية

الملخص

أبلغ Lonial أن التخزين المحلي لـ cgroup BPF يمكن الوصول إليه خارج الحدود عبر tail call.

يتحقق مُدقّق eBPF من نوع كل برنامج على حدة. في وقت التشغيل، لا تبحث bpf_get_local_storage() عن خريطة البرنامج قيد التنفيذ. بل تقرأ مؤشر تخزين cgroup من current->bpf_ctx → bpf_cg_run_ctx → prog_item->cgroup_storage[]. تُملأ هذه الخانة من البرنامج المرتبط أصلاً، وليس من البرنامج الذي تم استدعاؤه عبر tail call.

إذا استدعى البرنامج A (بحجم قيمة صغير لـ BPF_MAP_TYPE_CGROUP_STORAGE) البرنامج B (بحجم قيمة كبير) عبر tail call، فإن bpf_get_local_storage() في B لا تزال تُعيد مخزن A الأصغر. عندئذٍ تتجاوز عمليات الوصول التي سمح بها المُدقّق مقابل خريطة B نهاية تخصيص A.

أُدخل هذا العيب في Linux 5.9 عبر 7d9c342 (bpf: Make cgroup storages shared between programs on the same cgroup). وتم إصلاحه بتوسيع bpf_map_owner بحقل storage_cookie[] بحيث لا تُقبل تركيبات tail-call إلا عندما يستخدم البرنامج المُستدعى نفس خرائط تخزين cgroup التي يستخدمها المُستدعي، أو لا يستخدم أيًّا منها.


التأثير

هذا وصول خارج الحدود إلى كومة النواة محليًا. تتفاوت درجات الخطورة حسب المورّد لأنهم يختلفون حول ما إذا كانت البدائية "حجب خدمة للقراءة فقط" أم تلف كامل للذاكرة:

ما يعنيه ذلك عمليًا:

  • السرية. قراءة خارج الحدود لكائن kmalloc المجاور قد تسرّب مؤشرات النواة (إزاحة KASLR)، وكوكيز الكومة، ومحتويات البُنى المجاورة.
  • السلامة. نفس عدم التطابق هو كتابة بحجم محدد نسبةً إلى خريطة البرنامج المُستدعى، مقابل مخزن المُستدعي الأصغر. يمكن إتلاف كائنات الكومة المجاورة (على سبيل المثال struct bpf_array المرشوش في نفس الـ slab/order).
  • التوافر. الكتابة الخاطئة الهدف تؤدي مباشرة إلى oops / panic في النواة.
  • الصلاحيات. على نواة غير مُرقّعة حيث يمكن تحميل برامج BPF الخاصة بـ cgroup، استُخدمت هذه الفئة من تجاوزات كومة خارج الحدود كبدائية لتصعيد الصلاحيات محليًا (استبدال map->ops، اختطاف helper، commit_creds / تبديل namespace). لهذا تُصنّف هذه الشجرة المشكلة كـ LPE. تعكس درجة Red Hat الأدنى تقييمهم الخاص بمنتجاتهم، وليس غياب العلّة.

لا تتطلب العلّة خدمة مواجهة للشبكة. إنها محلية. ولا تتطلب TTY، ولا مساعد setuid، ولا تفاعل مستخدم.


السبب الجذري

المُدقّق مقابل وقت التشغيل

برنامجان لـ cgroup BPF، لكلٍّ منهما BPF_MAP_TYPE_CGROUP_STORAGE خاص به (النوع المشترك، BPF_CGROUP_STORAGE_SHARED):

البرنامجالدورحجم قيمة التخزين
Aمرتبط / مُستدعي tail-callصغير (مثلاً يناسب رتبة kmalloc معينة)
Bهدف tail-callكبير (يسمح المُدقّق بعمليات وصول حتى هذا الحجم)

يتحقق المُدقّق من A مقابل خريطة A ومن B مقابل خريطة B. كلاهما يمر.

في وقت التشغيل يقوم الـ helper بما يلي:

root@kitploit:~
ctx = container_of(current->bpf_ctx, struct bpf_cg_run_ctx, run_ctx);
storage = ctx->prog_item->cgroup_storage[stype];
if (stype == BPF_CGROUP_STORAGE_SHARED)
    ptr = &READ_ONCE(storage->buf)->data[0];
else
    ptr = this_cpu_ptr(storage->percpu_buf);

prog_item هو مدخل المصفوفة الخاص بالبرنامج الذي بدأ تشغيل cgroup، وليس البرنامج قيد التنفيذ حاليًا بعد bpf_tail_call. لذلك يعمل B على كائن تخزين A.

لماذا تهمّ الأحجام

يحدد bpf_cgroup_storage_alloc() حجم المخزن الداعم من value_size الخاص بالخريطة. مخزن A أصغر من أن يستوعب عمليات الوصول المُتحقَّق منها في B. النتيجة هي التباس نوعي لهوية الخريطة عبر نقل التحكم — نفس عائلة العلل الأخرى في BPF من نوع "الـ helper يرى خريطة مختلفة عن التي رآها المُدقّق".

التخزين المشترك على cgroup

جعل الـ commit 7d9c342 تخزينات cgroup مشتركة بين البرامج المرتبطة بنفس cgroup. هذا التشارك هو ما يجعل خانة سياق التشغيل مؤشرًا واحدًا بدلاً من بحث لكل برنامج، وهو السبب في أن الأنوية قبل 5.9 غير متأثرة.

الكائنات المجاورة

BPF_PROG_TEST_RUN على برنامج من النوع BPF_PROG_TYPE_CGROUP_SKB يخصص تخزين cgroup طوال مدة الاختبار. يقع هذا التخصيص على كومة النواة بجوار أي شيء آخر تم تحريره مؤخرًا في نفس فئة الحجم — بما في ذلك خرائط struct bpf_array التي اختير value_size الخاص بها ليقع في نفس رتبة kmalloc. لذلك يمكن لتجاوز خارج الحدود من مخزن التخزين أن يصل إلى حقول bpf_map (ops، قائمة RCU، value[]) الخاصة بخريطة مصفوفة مجاورة.

هذه التفصيلة في تخطيط الكومة هي السبب في أن تحذيرًا بـ "مجرد قراءة خارج الحدود" وكتابة عن LPE يمكن أن يصفا نفس الـ CVE.


إصدارات النواة المتأثرة

أُدخلت في: Linux 5.9 (7d9c3427894fe70d1347b4820476bf37736d2ff0)
غير متأثرة: جميع الأنوية قبل 5.9

سطر واحد:

root@kitploit:~
/* CVE-2025-38502: affected 5.9–5.15.191, 5.16–6.1.150, 6.2–6.6.104, 6.7–6.12.45, 6.13–6.16.0; fixed in 5.15.192, 6.1.151, 6.6.105, 6.12.46, 6.16.1, 6.17-rc1 */

لا تزال مفتوحة في بعض الفروع المستقرة: أدرج متتبع نواة Debian الإصدار 5.10 upstream-stable / bullseye 5.10 كـ needed. لا تفترض أن كل إصدار 5.10.y مُرقّع.

أرقام ABI الخاصة بالتوزيعات مضللة. Ubuntu 5.15.0-163 هو 5.15 مُرقّع رغم أن 5.15.0 يبدو أقدم من upstream 5.15.192. قارن سجل تغييرات الحزمة / USN / DSA / ALAS / RHSA، وليس uname -r مقابل الجدول أعلاه.


حالة التوزيعات

أي توزيعة شحنت نواة ضمن النطاقات أعلاه كانت ضمن النطاق حتى نقلت abad3d0 (أو الـ commit المستقر المطابق). هذا كود BPF عام، وليس تصحيحًا خاصًا بتوزيعة.

متأثرة عادةً حتى الترقيع

غير متأثرة (نواة GA أقدم من 5.9)

  • Ubuntu 20.04 GA (5.4)، 18.04، 16.04
  • RHEL 8 الافتراضية (4.18)
  • Amazon Linux 1؛ Amazon Linux 2 core / 5.4 extra

إصدارات الحزم المُرقّعة المعروفة (أمثلة)

Ubuntu 26.04 / 25.10 مُدرجة غير متأثرة (تفرّعت بعد الإصلاح). Ubuntu 25.04 وصلت EOL وهي لا تزال needed.


الشروط المسبقة

قد يطابق مضيف إصدارًا متأثرًا ومع ذلك لا يكون قابلاً للوصول. فحوصات مفيدة:

unprivileged_bpf_disabled=1 ليس إصلاحًا كاملاً — يمكن لمستخدم يمتلك صلاحية BPF أن يصطدم بالعلّة — لكنه يزيل المسار غير المُتميّز.


الإصلاح

الـ commit في المنبع abad3d0bad72a52137e0c350c59542d75ae4f513 (bpf: Fix oob access in cgroup local storage، Daniel Borkmann).

يكتسب struct bpf_map_owner مصفوفة storage_cookie[]. عند تحديث هدف tail-call، تقوم النواة الآن بما يلي:

  1. إذا استخدم البرنامج المُستدعى bpf_get_local_storage() — اشترط أن تكون خرائط تخزين cgroup الخاصة به مطابقة تمامًا لخرائط المُستدعي (نفس الكوكيز).
  2. إذا لم يستخدم البرنامج المُستدعى أي تخزين محلي لـ cgroup — اسمح بتركيبة tail-call.

لم يعد من الممكن تركيب أحجام قيم غير متطابقة خلف ظهر المُدقّق. لا يزال كل برنامج يُتحقق منه منفردًا؛ الفحص الجديد على الحافة بينهما.

لا تقم بـ cherry-pick للـ commit على شجرة عشوائية دون مساعدات owner/cookie المحيطة بـ BPF. استخدم النقل المستقر الخاص بسلسلتك.


فحص نظام قيد التشغيل

root@kitploit:~
uname -r
# Compare against the table above, then against your distro advisory —
# Ubuntu/Debian ABI numbers are not upstream stable numbers.

grep -E 'CONFIG_BPF_SYSCALL|CONFIG_CGROUP_BPF' \
  /boot/config-$(uname -r) /proc/config.gz 2>/dev/null

sysctl kernel.unprivileged_bpf_disabled
# 0  = unprivileged bpf allowed (widest exposure)
# 1  = disabled after first privileged use, or fully disabled depending on kernel
# 2  = disabled (admin can re-enable)

أكّد الحزمة، وليس فقط سلسلة الإصدار:

root@kitploit:~
# Debian / Ubuntu
apt changelog linux-image-$(uname -r) 2>/dev/null | grep -i 38502

# RHEL family
rpm -q --changelog kernel | grep -i 38502

نواة ≥ 6.17، أو إصدار مستقر مُدرج في عمود "أول إصلاح"، أو حزمة توزيعة من جدول الإشعارات، هي الإغلاق الفعلي.


التخفيف

  1. الترقيع. ثبّت نواة التوزيعة التي تحتوي على abad3d0 / المكافئ المستقر. هذا هو الإصلاح الكامل الوحيد.
  2. حتى تتمكن من الترقيع:
    • اضبط kernel.unprivileged_bpf_disabled=1 (أو 2) لإسقاط المحمّلات غير المُتميّزة.
    • قيّد CAP_BPF و CAP_PERFMON و CAP_SYS_ADMIN على المستخدمين والحاويات غير الموثوقة.
    • في user namespaces / الحاويات غير المُتميّزة، عطّل BPF (seccomp، LSM، أو إسقاط تلك الصلاحيات في وقت التشغيل).
  3. لا تعتبر "نحن لا نربط برامج cgroup SKB بأنفسنا" أمانًا. BPF_PROG_TEST_RUN كافٍ لتفعيل مسار التخصيص؛ والمهاجم المحلي هو من يوفّر البرامج.

هيكل المستودع

root@kitploit:~
CVE-2025-38502/
├── README.md
├── banner.png
├── CVE-2025-3850-Linux-LPE-Abaraxas-Labs.c
└── ebpf_lpe.h
الملفما هو
banner.pngلافتة README (Abraxas Labs / CVE-2025-38502)
CVE-2025-3850-Linux-LPE-Abaraxas-Labs.cمصدر بحثي تم استرجاعه في البرية (اسم الملف يقتطع معرّف CVE)
ebpf_lpe.hبواني تعليمات BPF المشتركة، ومساعدات الخرائط، وماكرو إزاحات النواة المستخدمة في ذلك المصدر

يوثّق هذا الدليل الثغرة ويحتوي على شجرة البحث المقابلة. إنه ليس مجموعة استغلال جاهزة: رموز gadgets النواة (ARRAY_MAP_OPS_OFF، COMMIT_CREDS، …) هي مدخلات وقت الترجمة لـ vmlinux محدد، وتشغيل البرنامج ضد نواة حية خارج نطاق هذا الـ README.


المراجع

CVE / NVD

  • CVE-2025-38502
  • NVD
  • GitHub Advisory GHSA-x96j-4m6x-jcvx

المنبع

  • أُدخلت: 7d9c342 — bpf: Make cgroup storages shared between programs on the same cgroup
  • أُصلحت: abad3d0 — bpf: Fix oob access in cgroup local storage
  • linux-cve-announce

النقل المستقر

  • 6.16.1 19341d5c
  • 6.12.46 41688d1f
  • 6.6.105 7acfa07c
  • 6.1.151 66da7cee
  • 5.15.192 c1c74584

التوزيعات

  • صفحة CVE على Ubuntu
  • متتبع أمان Debian
  • Debian kernel-sec
  • Red Hat
  • Amazon Linux ALAS
  • SUSE

التواصل

Abraxas Labs — للبحث / الاختبار المصرّح به فقط

الموقعhttps://abraxaslabs.tech
GitHubhttps://github.com/abraxas
X@abraxas_null

إخلاء المسؤولية

هذا المستودع للبحث والتعليم.

لا تقم بترجمة أو تشغيل أو نشر أو استخدام الكود هنا بأي شكل ضد أي نظام ما لم يكن لديك تفويض كتابي صريح من كلٍّ من الجهة المستضيفة لهذا المستودع ومالك الهدف. الوصول غير المصرّح به إلى أنظمة الحاسوب جريمة.

يوفّر المؤلفون و Abraxas Labs هذه المواد كما هي، دون أي ضمان بأنها كاملة أو صحيحة أو آمنة للتنفيذ. يمكن أن يتسبب بحث استغلال النواة في تعطّل الجهاز، وإتلاف أنظمة الملفات، وفقدان البيانات. أنت تتحمل هذا الخطر.

تم العثور عليه في البرية.

تنزيل الأداة
المصدرالدرجةالسلامةملاحظات
kernel.org CNA / cve.org7.8 HIGHعاليةC:H/I:H/A:H — يعامل العلّة كتأثير محلي كامل
NVD7.1 HIGHلا يوجدC:H/I:N/A:H — السرية + التوافر
Ubuntuمتوسط (7.1)—USN-7909
Red Hat4.0 LOWلا يوجدC:N/I:N/A:L — مُقيَّم كتوافر محدود
Amazon Linux4.0 متوسطلا يوجدنفس متجه Red Hat
SUSE6.1 معتدللا يوجدبعض إصدارات SLE 15 مُعلَّمة WONTFIX
السلسلةمتأثرةأول إصلاح
5.9 – 5.155.9 حتى 5.15.1915.15.192 (c1c74584…)
5.16 – 6.15.16 حتى 6.1.1506.1.151 (66da7cee…)
6.2 – 6.66.2 حتى 6.6.1046.6.105 (7acfa07c…)
6.7 – 6.126.7 حتى 6.12.456.12.46 (41688d1f…)
6.13 – 6.166.13 حتى 6.16.06.16.1 (19341d5c…)
mainlineحتى وصول الإصلاح6.17-rc1 (abad3d0b…)
التوزيعةالإصدارات / الأنوية التي كانت ضمن النطاق
Ubuntu22.04 LTS (5.15)، 24.04 LTS (6.8)، 25.04 (EOL لا تزال needed). 20.04 HWE 5.15.
Debian11 bullseye (5.10)، 12 bookworm (6.1)، 13 trixie (6.12)
RHEL 9 / 10، Rocky، Alma، FedoraRHEL 9 ≈ 5.14؛ RHEL 10 ≈ 6.12؛ Fedora المتجددة 5.9–6.16
SUSE / openSUSESLE Micro 5.3/5.4؛ بعض إصدارات SLE 15 WONTFIX
Amazon Linux 2023النواة الافتراضية و kernel6.12
Amazon Linux 2 extras5.10 extra (لا إصلاح مخطط) و 5.15 extra
Arch، Gentoo، Tumbleweedأنوية متجددة بين 5.9 وإصلاح 6.16.1 / 6.17-rc1
التوزيعةالحزمة المُصلَحة (إرشادية)الإشعار
Ubuntu 22.04linux 5.15.0-163.173USN-7909
Ubuntu 24.04linux 6.8.0-106.106نفسه
Debian 12linux 6.1.153-1DSA-6009-1
Debian 13linux 6.12.48-1DSA-6008-1
Debian 11 (نقل 6.1)linux-6.1 6.1.153-1~deb11u1DLA-4328-1
Amazon Linux 2023kernel / kernel6.12، 2025-09-29ALAS2023-2025-1210 / 1208
Amazon Linux 2 5.15 extra2025-09-29ALAS2KERNEL-5.15-2025-091
الشرطلماذا يهم
CONFIG_BPF_SYSCALL=yيجب أن توجد bpf(2)
CONFIG_CGROUP_BPF=yالبرامج المرتبطة بـ cgroup والتخزين المحلي لـ cgroup
kernel.unprivileged_bpf_disabled0 يسمح بتحميل برامج غير مُتميّزة؛ 1/2 تتطلب CAP_BPF / CAP_PERFMON / CAP_SYS_ADMIN
Lockdown / LSM / seccompقد تحجب BPF_PROG_LOAD أو BPF_PROG_TEST_RUN
BPF_PROG_TYPE_CGROUP_SKB (أو أنواع برامج cgroup أخرى تحمل تخزينًا محليًا)سياق التشغيل الذي يحمل cgroup_storage[]