CVE و CWE: أسماء الثغرات

جارٍ التحميل…

01 / ملخص الدرس

CVE و CWE: أسماء الثغرات

يعني إيه CVE ومين بيدّيه، وشكل رقمه، والفرق بينه وبين CWE، وإزاي تطلّع أرقام CVE من أي نص بـ Python.

02 / شرح الدرس مكتوبًا

نص شرح المعلم والكود الذي كتبه ونتيجة تشغيله، بنفس ترتيب الدرس.

تخيّل إن كل شركة سمّت نفس الثَغْرة باسم مختلف. هتبقى فوضى. علشان كده فيه نظام عالمي اسمه CVE، بيدّي كل ثَغْرة رقم واحد ثابت.

الـ CVE معناها Common Vulnerabilities and Exposures. الشكل: CVE، وبعدها السنة، وبعدها رقم. مثلاً CVE twenty twenty one forty one seven seven three. والأرقام دي بتدّيها جهات معتمدة اسمها CNA، زي Microsoft و Red Hat، تحت إشراف MITRE.

أما CWE، فمعناها Common Weakness Enumeration. الـ CVE ثَغْرة معيّنة في برنامج معيّن. الـ CWE نوع الغلطة نفسها. مثلاً CWE twenty two يعني Path Traversal، و CWE eighty nine يعني SQL Injection. يعني آلاف الـ CVEs ممكن يبقوا من نفس الـ CWE. عندنا نص من advisory فيه أرقام CVE، وواحد منهم مكتوب small. نستخدم regular expression بتدوّر على شكل الـ CVE، ونخلّيها capital، ونشيل التكرار. نشغّل… تلات CVEs، مترتّبين، وكل واحد بسنته.

main.py
import re

text = """Apache 2.4.49 is affected by CVE-2021-41773 (CWE-22).
The fix in 2.4.50 was incomplete: see cve-2021-42013.
vsFTPd 2.3.4 shipped with a backdoor, CVE-2011-2523 (CWE-506)."""

cves = re.findall(r"CVE-\d{4}-\d{4,}", text, flags=re.I)
cves = sorted({c.upper() for c in cves})

for cve in cves:
    year = cve.split("-")[1]
    print(cve, "published around", year)

المخرجات

CVE-2011-2523 published around 2011
CVE-2021-41773 published around 2021
CVE-2021-42013 published around 2021

دورك: بنفس الطريقة، طلّع أرقام الـ CWE من النص، واطبعها.

تمرين

cwes = sorted(set(re.findall(r"CWE-\d+", text)))

الحل: نشغّل… CWE twenty two و CWE five oh six.

main.py
import re

text = """Apache 2.4.49 is affected by CVE-2021-41773 (CWE-22).
The fix in 2.4.50 was incomplete: see cve-2021-42013.
vsFTPd 2.3.4 shipped with a backdoor, CVE-2011-2523 (CWE-506)."""

cves = re.findall(r"CVE-\d{4}-\d{4,}", text, flags=re.I)
cves = sorted({c.upper() for c in cves})

for cve in cves:
    year = cve.split("-")[1]
    print(cve, "published around", year)

cwes = sorted(set(re.findall(r"CWE-\d+", text)))
print("weakness types:", cwes)

المخرجات

CVE-2011-2523 published around 2011
CVE-2021-41773 published around 2021
CVE-2021-42013 published around 2021
weakness types: ['CWE-22', 'CWE-506']

الدرس الجاي: عرفنا اسم الثَغْرة، بس خطيرة قد إيه؟ نراجع CVSS، ونضيف عليه EPSS و KEV. يلا بينا.

03 / دروس المسار (16)
  1. 01يعني إيه ثغرة؟ ومن الـ Recon للـ Vulnerabilities
  2. 02CVE و CWE: أسماء الثغراتانت هنا
  3. 03الخطورة: CVSS و EPSS و KEV
  4. 04البحث في NVD
  5. 05Exploit-DB و searchsploit
  6. 06GitHub و Metasploit
  7. 07الفحص بـ Nmap NSE
  8. 08الفحص بـ Nuclei
  9. 09الفحص بـ Nikto
  10. 10الفحص بـ OpenVAS
  11. 11فحص بصلاحيات ومن غيرها
  12. 12تجميع وتنظيم النتايج
  13. 13False Positives والتأكد اليدوي
  14. 14ترتيب الأولويات
  15. 15أتمتة الفحص بـ Python
  16. 16مراجعة شاملة