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

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

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

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

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
CVE-2022-0778 — إثبات مفهوم استغلال لـ CVE-2022-0778، ثغرة رفض الخدمة في دالة BN_mod_sqrt() في OpenSSL، مع بيئة مختبرية قائمة على Docker للاختبار والتحليل. | Kitploit
أدوات/GitHubGitHub/jeongjunsoo/cve-2022-0778
تحليل الثغرات الأمنيةالاستغلالالتشفيرالتعلم والتعليممختبرات وتدريب عملي
GitHubjeongjunsoo/cve-2022-0778

CVE-2022-0778

إثبات مفهوم استغلال لـ CVE-2022-0778، ثغرة رفض الخدمة في دالة BN_mod_sqrt() في OpenSSL، مع بيئة مختبرية قائمة على Docker للاختبار والتحليل.

عرض المستودع
1منذ 2 سنواتلم تتم المراجعة بعد

الأكثر شعبية

عرض الكل →

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

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

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

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

CVE-2022-0778

المساهمون

  • 정준수(@jeongjunsoo)

ملخص

  • تؤثر ثغرة CVE-2022-0778 على دالة BN_mod_sqrt() في OpenSSL التي تحسب الجذر التربيعي لعدد أولي.
  • عندما تعالج هذه الدالة شهادة تم التلاعب بها خبيثًا وليست مبنية على عدد أولي، فإن الخوادم غير المُصحَّحة قد تتعرض لهجوم رفض الخدمة (DoS).

الهدف

  • OpenSSL 1.0.2
  • OpenSSL 1.1.1
  • OpenSSL 3.0

قبل التصحيح

root@kitploit:~
i = 1;
if (!BN_mod_sqr(t, b, p, ctx))
    goto end;
while (!BN_is_one(t)) {
    i++;
    if (i == e) {
        ERR_raise(ERR_LIB_BN, BN_R_NOT_A_SQUARE);
        goto end;
    }
    if (!BN_mod_mul(t, t, t, p, ctx))
        goto end;
}

  • وفقًا لهذه الخوارزمية، يجب أن تنتهي الحلقة عندما تصل قيمة i إلى قيمة e. ولكن من خلال إدخال معين، يمكن جعل كل من i و e بقيمة 1، مما يتسبب في حلقة لا نهائية لا تنتهي. يؤدي ذلك إلى حدوث رفض الخدمة.

بعد التصحيح

root@kitploit:~
for (i = 1; i < e; i++) {
    if (i == 1) {
        if (!BN_mod_sqr(t, b, p, ctx))
            goto end;
    } else {
        if (!BN_mod_mul(t, t, t, p, ctx))
            goto end;
    }
    if (BN_is_one(t))
        break;
}
/* If not found, a is not a square or p is not prime. */
if (i >= e) {
    ERR_raise(ERR_LIB_BN, BN_R_NOT_A_SQUARE);
    goto end;
}

  • تم تغيير الجملة while السابقة إلى جملة for. وبالتالي، تم تصحيحها بحيث تنتهي الحلقة تلقائيًا عندما تصل قيمة i إلى e. أزال هذا التصحيح خطر الحلقة اللانهائية.

إعداد البيئة والتشغيل

  • إعداد بيئة Ubuntu
  • docker compose up -d تشغيل بيئة الاختبار
  • docker run -it --rm -p 12345:12345 yywing/cve-2022-0778 --addr 0.0.0.0:12345
  • docker compose exec curl top التحقق من حالة العمليات
  • docker compose exec curl bash تشغيل bash
  • curl -k https://172.17.0.1:12345 إرسال طلب HTTPS إلى المنفذ 12345

التشغيل

  • قم بتجهيز ثلاثة نوافذ طرفية (A, B, C) للتمرين.

  • في الطرفية A، قم بتشغيل الأمر docker run -it --rm -p 12345:12345 yywing/cve-2022-0778 --addr 0.0.0.0:12345 لبدء صورة Docker.

  • بعد ذلك، في الطرفية B، قم بتشغيل الأمر docker compose exec curl top لمراقبة حالة العمليات الجاري تشغيلها.

  • أخيرًا، في الطرفية C، أدخل docker compose exec curl bash ثم قم بإرسال طلب HTTPS إلى المنفذ 12345 باستخدام curl -k https://172.17.0.1:12345.

النتائج

  • من نتيجة أمر top المنفذ في الطرفية B، يمكن ملاحظة أن عملية curl تستهلك حوالي 100% من موارد وحدة المعالجة المركزية. يحدث هذا بسبب وقوعها في حلقة لا نهائية.

الخلاصة

  • تحدث هذه الثغرة بسبب عدم التحقق من أولية العدد. تم تصحيحها بتغيير جملة while إلى for لمنع مشكلة الحلقة اللانهائية.

المراجع

  • https://github.com/drago-96/CVE-2022-0778

  • https://hackyboiz.github.io/2022/03/19/syru/cve-2022-0778/

  • https://github.com/yywing/cve-2022-0778/


تنزيل الأداة