דילוג לתוכן
New

DeepSeek V4.1 Flash free for 7 days: 10M tokens a day after a top-up of $10 or more. Until Nov 30.

How it works

קריאת CVE: מה רשומת CVE אומרת ומה היא לא אומרת

רשומת CVE נותנת שם לפגם ומפנה לספק, וההודעה של הספק היא שקובעת את הגרסה המתוקנת.

מתחילים10 דקות קריאהמאת NotHoly

כתבה בחדשות מספרת שפגם עם מספר CVE מנוצל. עשר דקות אחר כך עמית שואל אם המערכות שלך כבר מעודכנות. המספר הוא העובדה היחידה שעליה שני הצדדים מסכימים. הוא נותן שם לפגם אחד. הוא לא אומר עד כמה הפגם חמור עבור המערכות שלך, אילו גרסאות שלך מושפעות או מה להתקין.

המאמר הזה מסביר מהו מזהה CVE, מי מקצה אותו, מה המשמעות של כל שדה ברשומת CVE, ואיך National Vulnerability Database ‏(NVD) מוסיף לרשומה הזאת. החלק המעשי קורא רשומה מוכרת אחת, CVE-2021-44228 ‏(Log4Shell), שדה אחר שדה, מ-cve.org ומה-API של NVD. אחר כך הוא פותח את הודעת הספק שהרשומה מפנה אליה. העיקר לזכור: רשומת ה-CVE מפנה להודעת הספק, והודעת הספק היא מקור האמת לגרסאות המתוקנות.

מי שקרא את מהי חולשה יזהה את המונחים. המעבדה שולחת בקשות קריאה בלבד לשני שירותים ציבוריים ולדף web ציבורי אחד.

מהו מזהה CVE

CVE הוא ראשי תיבות של Common Vulnerabilities and Exposures. CVE Program, לפי הסקירה שלו, מזהה, מגדיר ומקטלג חולשות סייבר שנחשפו בפומבי. כל חולשה מקבלת רשומה אחת, שנקראת CVE Record, והמזהה הוא הדרך לפנות לרשומה הזאת. הוא בנוי בצורה CVE-YEAR-NUMBER. השנה היא השנה שבה המזהה שוריין, ולעיתים קרובות זו לא השנה שבה הבאג נכתב או תוקן.

המזהה הוא שם. הוא מאפשר לשני אנשים, או לשני כלים, להגיד "הזה" ולהתכוון לאותו פגם. אין בו ציון חומרה, רשימת מוצרים מושפעים, תיקון או סטטוס ניצול. כל אלה נמצאים ברשומה, וחלקם מגיעים מארגונים אחרים.

מי מקצה את המזהים

CVE Program עובד דרך CVE Numbering Authorities, או CNAs. אתר CVE מתאר אותן כספקים, חוקרים, פרויקטי קוד פתוח, CERTs, שירותים מאוחסנים, ספקי באג באונטי וקונסורציומים. כל אחת מורשית להקצות מזהים ולפרסם רשומות בתוך הסקופ שלה. כשבדקנו את דף ה-CNA ב-2026-11-08, הוא מנה 564 CNAs, כולל 3 CNA-LRs (‏CNAs של מוצא אחרון, עבור מוצרים שאף CNA אחרת לא מכסה). המספר משתנה, ולכן כדאי לבדוק בדף את המספר הנוכחי.

סקופ היא המילה שכדאי לזכור. Apache Software Foundation היא ה-CNA של פרויקטי Apache, ולכן הרשומה של CVE-2021-44228 נוקבת בשמה כ-CNA. ה-CNA כותבת את הכותרת, התיאור, המוצרים המושפעים, ההפניות וסוגי הבעיה. גורמים אחרים יכולים להוסיף נתונים מאוחר יותר, וכאן נכנס NVD.

השדות של רשומת CVE

שמות השדות בהמשך מגיעים מפורמט הרשומה CVE JSON. תצוגת ה-JSON ב-cve.org וה-JSON מה-CVE API משתמשים באותו מבנה.

מצב ותאריכים

המצב אומר אם הרשומה חיה. הרשומה במעבדה הזאת מציגה "state": "PUBLISHED". קיימות גם רשומות שנדחו, ולכן בודקים קודם את המצב.

ה-CVE JSON נושא שלושה תאריכים: dateReserved, ‏datePublished וגם dateUpdated. עבור CVE-2021-44228 הם 2021-11-26, ‏2021-12-10 ו-2025-10-21. ל-NVD יש תאריכים משלו. הערך published שלו הוא 2021-12-10, והערך lastModified שלו הוא 2026-08-11 בתגובה שהורדנו. דף cve.org מציג תאריך "Updated" נפרד של 2023-04-03 מתוך ה-provider metadata של ה-CNA. שלושה מקורות, שלושה תאריכי "updated". משווים ביניהם לפני שמחליטים שהטקסט העדכני ביותר נמצא בידיך.

תיאור

התיאור הוא טקסט מה-CNA. הוא אמור לומר מה הפגם, מה מפעיל אותו ובאילו גרסאות הוא נוגע. התיאור של Log4Shell נותן את הטווח המושפע, נוקב ביכולת המעורבת (JNDI lookups בקונפיגורציה, בהודעות לוג ובפרמטרים), אומר מתי ההתנהגות כובתה כברירת מחדל, וקובע ש-log4net ופרויקטי logging אחרים של Apache לא מושפעים. המשפט האחרון הזה חוסך אחר צהריים של תיקון הדבר הלא נכון.

מוצרים וגרסאות מושפעים

הבלוק הזה הוא החלק השימושי ביותר ברשומה, והקל ביותר לקריאה שגויה. כל הצהרת גרסה אומרת אם טווח מושפע, לא מושפע או לא ידוע, והיא יכולה לתאר שינויים במספרי גרסה מסוימים.

דף cve.org מציג את הרשומה של Log4j2 כציר זמן: מושפע מ-2.0-beta9, לא מושפע מ-2.3.1, מושפע מ-2.4, לא מושפע מ-2.12.2, מושפע מ-2.13.0, ולא מושפע מ-2.15.0. גרסה מקבלת את הסטטוס של נקודת השינוי האחרונה שלפניה. הפערים הם העיקר. "כל מה שמתחת ל-2.15.0 פגיע" שגוי כאן, כי 2.3.1 ו-2.12.2 מופיעות כלא מושפעות.

השדה lessThan נוקב ברכיב, log4j-core*. הודעת Apache אומרת שאפליקציה שמשתמשת רק ב-JAR של log4j-api לא מושפעת. קוראים את הרכיב ליד הגרסה. הרשימה גם מלאה רק במידה שה-CNA מילאה אותה. מוצרים שמצרפים את הספרייה עלולים להיות חסרים, ושם הודעת הספק ונתוני הקונפיגורציה של NVD עוזרים.

הפניות

הפניות הן קישורים להודעות ספק, לפוסטים ברשימות תפוצה, לכתבות של צד שלישי ולפעמים לדפים על ניצול. דף cve.org מציג 53 הפניות עבור CVE-2021-44228, כל אחת עם תג כמו vendor-advisory, mailing-list, third-party-advisory או exploit. קוראים קודם את הקישורים של vendor-advisory. דפי צד שלישי נותנים הקשר, לא גרסאות מתוקנות. העותק של הרשומה הזאת ב-NVD שומר את ההפניות בסדר משלו, וחמש הרשומות הראשונות שלו הן כולן דפים של Packet Storm.

פגמים (CWE)

CWE הוא Common Weakness Enumeration, קטלוג של סוגי פגמים. CWE-20 הוא Improper Input Validation, ו-CWE-502 הוא Deserialization of Untrusted Data. CWE אומר איזה סוג של טעות הוביל לפגם. הוא לא נוקב בשם של מוצר.

ה-CNA מציינת את CWE-20, ‏CWE-400 ו-CWE-502. רשומת NVD מציינת את אותם שלושה, עם ייחוס לכתובת האבטחה של Apache, ומוסיפה את CWE-917, עם ייחוס ל-NVD. כדאי לשים לב לעמודת המקור. אפשר לא להסכים עם המיפוי של אנליסט, וצריך לדעת איזה מיפוי קוראים. CWE שימושי גם לקיבוץ. חיפוש CWE מוצא כל פגם deserialization במוצרים שונים, וזה עוזר בסקירת קוד ובמידול איומים.

מדדים

מדדים מחזיקים ציונים והערכות ממקורות שונים.

CVSS ‏(Common Vulnerability Scoring System) נותן ציון בסיס מ-0 עד 10, תווית חומרה ומחרוזת וקטור שמפרטת את הקלטים: וקטור תקיפה, מורכבות, הרשאות, מעורבות משתמש, סקופ והשפעה. רשומת CVSS v3.1 של NVD עבור הרשומה הזאת היא 10.0, ‏CRITICAL, עם הווקטור CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H. לרשומה יש גם ציון CVSS v2.0 של NVD של 9.3. הציון מתאר את הפגם תחת הנחות מוצהרות. הוא לא מתאר את החשיפה שלך.

SSVC היא שיטת החלטה ששואלת אם הניצול פעיל, אם אפשר לבצע את התקיפה אוטומטית ועד כמה גדולה ההשפעה הטכנית. לרשומה הזאת יש ערך SSVC ממקור מתאם של CISA שמסמן ניצול active, ‏automatable yes והשפעה טכנית total.

KEV הוא הקטלוג CISA Known Exploited Vulnerabilities. הרשומה מציגה תאריך הוספה (2021-12-10), תאריך יעד לפעולה (2021-12-24) ופעולה נדרשת: להחיל עדכונים, או להסיר את הנכסים המושפעים מהרשת. KEV אומר שנצפה ניצול. זו שאלה אחרת מעד כמה הפגם חמור.

מדדים משתנים. עם כל מספר קוראים גם את המקור ואת התאריך.

איך NVD מעשיר רשומה

את NVD מפעיל NIST, והוא פרויקט נפרד מ-CVE Program. הוא לוקח רשומות CVE ומוסיף מה שה-CNA אולי לא סיפקה: ציוני CVSS שהוא מחשב או מאשר, מיפוי CWE, קונפיגורציות CPE (התאמות מוצר וגרסה קריאות למכונה), תגי הפניות ושדה סטטוס. ה-API של NVD בכתובת services.nvd.nist.gov מגיש את הרשומות המועשרות האלה. דף לוח הבקרה של NVD ב-NIST נמצא לצד תיעוד ה-API, ולכן כדאי לבדוק בו הודעות לפני שמניחים שההעשרה עדכנית.

בלוק הקונפיגורציה הוא החלק שרוב האנשים אף פעם לא פותחים. לרשומה הזאת יש 20 בלוקי קונפיגורציה עם 396 רשומות התאמת CPE. הרשומה הראשונה היא חבילת קושחה של Siemens, וזה מראה שהרשימה מכסה מוצרים שמטמיעים את הספרייה, ולא רק את הגרסאות של Apache עצמה. קונפיגורציה ריקה או דלה יכולה להעיד שהניתוח לא הסתיים, ולא שהמוצר בטוח.

הסטטוס כאן הוא Analyzed. פירוש הדבר ש-NVD עיבד את הרשומה. אין פירושו ש-NVD בדק משהו ברשת שלך. התאריך lastModified הוא 2026-08-11, הרבה אחרי הפרסום, כך שרשומה שנקראה בשנה שעברה אולי השתנתה.

תרגיל מעשי: קריאת CVE-2021-44228 שדה אחר שדה

דרישות. דפדפן, curl (‏Git Bash ב-Windows כולל אותו) ו-Python 3.12. jq לא חובה. כל בקשה כאן היא קריאה משירות ציבורי. לא מריצים לולאה על ה-API של NVD. בלי מפתח API, ‏NVD מגביל בקשות בפרק זמן קצר, ולכן מריצים כל פקודה פעם אחת.

שלב 1: קריאת דף רשומת ה-CVE

פותחים את https://www.cve.org/CVERecord?id=CVE-2021-44228 וקוראים מלמעלה למטה. ביום שבו המעבדה הורצה, הדף הציג:

  • CNA: ‏Apache Software Foundation
  • Published 2021-12-10, עם תאריך "Updated" נפרד של 2023-04-03
  • Title: ‏Apache Log4j2 JNDI features do not protect against attacker controlled LDAP and other JNDI related endpoints
  • CWE: סך הכול 3
  • Product: ‏Apache Log4j2, עם הצהרות הגרסה שתוארו למעלה
  • References: סך הכול 53

שלב 2: הורדת רשומת NVD וסינון השדות

פקודת המעבדה, כפי שנכתבה עבור jq:

bash
curl -s 'https://services.nvd.nist.gov/rest/json/cves/2.0?cveId=CVE-2021-44228' | jq '.vulnerabilities[0].cve | {id, published, descriptions: .descriptions[0].value, weaknesses, references: [.references[0:5][].url]}'

jq לא היה מותקן במחשב שבו נבדקה המעבדה, ולכן אותו סינון רץ ב-Python 3.12. אם גם אצלך אין jq, אפשר להשתמש בזה:

bash
curl -s 'https://services.nvd.nist.gov/rest/json/cves/2.0?cveId=CVE-2021-44228' -o nvd.json
python -c "import json; c=json.load(open('nvd.json', encoding='utf8'))['vulnerabilities'][0]['cve']; print(json.dumps({'id': c['id'], 'published': c['published'], 'descriptions': c['descriptions'][0]['value'], 'weaknesses': c['weaknesses'], 'references': [r['url'] for r in c['references'][0:5]]}, indent=2, ensure_ascii=False))"

הפלט שהתקבל מהפקודה הזאת:

json
{
  "id": "CVE-2021-44228",
  "published": "2021-12-10T10:15:09.143",
  "descriptions": "Apache Log4j2 2.0-beta9 through 2.15.0 (excluding security releases 2.12.2, 2.12.3, and 2.3.1) JNDI features used in configuration, log messages, and parameters do not protect against attacker controlled LDAP and other JNDI related endpoints. An attacker who can control log messages or log message parameters can execute arbitrary code loaded from LDAP servers when message lookup substitution is enabled. From log4j 2.15.0, this behavior has been disabled by default. From version 2.16.0 (along with 2.12.2, 2.12.3, and 2.3.1), this functionality has been completely removed. Note that this vulnerability is specific to log4j-core and does not affect log4net, log4cxx, or other Apache Logging Services projects.",
  "weaknesses": [
    {
      "source": "[email protected]",
      "type": "Secondary",
      "description": [
        { "lang": "en", "value": "CWE-20" },
        { "lang": "en", "value": "CWE-400" },
        { "lang": "en", "value": "CWE-502" }
      ]
    },
    {
      "source": "[email protected]",
      "type": "Secondary",
      "description": [
        { "lang": "en", "value": "CWE-917" }
      ]
    }
  ],
  "references": [
    "http://packetstormsecurity.com/files/165225/Apache-Log4j2-2.14.1-Remote-Code-Execution.html",
    "http://packetstormsecurity.com/files/165260/VMware-Security-Advisory-2021-0028.html",
    "http://packetstormsecurity.com/files/165261/Apache-Log4j2-2.14.1-Information-Disclosure.html",
    "http://packetstormsecurity.com/files/165270/Apache-Log4j2-2.14.1-Remote-Code-Execution.html",
    "http://packetstormsecurity.com/files/165281/Log4j2-Log4Shell-Regexes.html"
  ]
}

שלושה דברים לשים לב אליהם. הערך published של NVD נושא שעה, 10:15, בלי אזור זמן, בעוד שה-JSON של ה-CNA נותן חצות לאותו יום. רשומת ה-CWE שהוסיף NVD נמצאת בבלוק משלה. וחמש ההפניות הראשונות הן דפי צד שלישי, ולכן את הקישור לספק צריך לקחת משלב מאוחר יותר.

שלב 3: קריאת הציונים וסטטוס NVD

bash
python -c "import json; c=json.load(open('nvd.json', encoding='utf8'))['vulnerabilities'][0]['cve']; print('lastModified', c['lastModified'], '| vulnStatus', c['vulnStatus']); [print(k, m['source'], m['type'], m['cvssData']['version'], m['cvssData']['baseScore'], m['cvssData'].get('baseSeverity'), m['cvssData']['vectorString']) for k in ('cvssMetricV31', 'cvssMetricV2') for m in c['metrics'][k]]"

הפלט שהתקבל:

text
lastModified 2026-08-11T19:33:44.513 | vulnStatus Analyzed
cvssMetricV31 [email protected] Primary 3.1 10.0 CRITICAL CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H
cvssMetricV31 134c704f-9b21-4f2e-91b3-4a467353bcc0 Secondary 3.1 10.0 CRITICAL CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H
cvssMetricV2 [email protected] Primary 2.0 9.3 None AV:N/AC:M/Au:N/C:C/I:C/A:C

לרשומת ה-v2 אין תווית חומרה, וזה רגיל ב-CVSS v2. המקור המשני של v3.1 הוא מזהה ולא שם. אותו מזהה מופיע בנתוני ה-SSVC ליד תפקיד מתאם של CISA, כך שאפשר להסיק יותר ממה שהשדה אומר. כותבים מה אפשר לאשר ומציינים איזה חלק הוא הסקה.

שלב 4: השוואה ל-CVE JSON של ה-CNA

bash
curl -s 'https://cveawg.mitre.org/api/cve/CVE-2021-44228' -o cve5.json
python -c "import json; d=json.load(open('cve5.json', encoding='utf8')); print(json.dumps(d['cveMetadata'], indent=2))"

הפלט שהתקבל:

json
{
  "state": "PUBLISHED",
  "cveId": "CVE-2021-44228",
  "assignerOrgId": "f0158376-9dc2-43b6-827c-5f631a4d8d09",
  "assignerShortName": "apache",
  "dateUpdated": "2025-10-21T23:25:23.121Z",
  "dateReserved": "2021-11-26T00:00:00.000Z",
  "datePublished": "2021-12-10T00:00:00.000Z"
}

השדה assignerShortName נוקב ב-CNA. בבלוק המדדים של ה-CNA עצמה אין ציון CVSS, רק רשומת other שאומרת critical. ציון ה-CVSS שרואים מגיע מ-NVD.

שלב 5: פתיחת הודעת הספק

פותחים את https://logging.apache.org/log4j/2.x/security.html. הוא מפנה לכתובת logging.apache.org/security.html. בדף יש סעיף לכל CVE. הסעיף של CVE-2021-45046 נמצא מעל זה של CVE-2021-44228.

בטקסט שהורדנו ב-2026-11-08, הסעיף של CVE-2021-44228 נותן את הטווח המושפע כ-[2.0-beta9, 2.3.1), ‏[2.4, 2.12.2) ו-[2.13.0, 2.15.0), ואת הגרסאות המתוקנות כ-2.3.1 עבור Java 6, ‏2.12.2 עבור Java 7 ו-2.15.0 עבור Java 8 ואילך. הסעיף של CVE-2021-45046 אומר שהתיקון של CVE-2021-44228 ב-2.15.0 לא היה שלם בחלק מהקונפיגורציות שאינן ברירת מחדל. שורת המיטיגציה שלו ממליצה על 2.3.1 עבור Java 6, ‏2.12.3 עבור Java 7, או 2.16.0 עבור Java 8 ואילך.

מניחים את המקורות זה לצד זה:

שאלה רשומת CVE ‏(cve.org) NVD הודעת הספק
איזה רכיב? Apache Log4j2, log4j-core סך הכול 396 רשומות התאמת CPE log4j-core בלבד; log4j-api לבדו לא מושפע
איזו גרסה מתוקנת? לא מושפע מ-2.15.0 משקף את הטווחים המושפעים כהתאמות CPE 2.15.0 עבור Java 8 ואילך, ובהמשך נמצא לא שלם; מומלץ 2.16.0
עד כמה חמור? מדד CNA "critical", בלי ציון CVSS v3.1 10.0 CRITICAL, v2 9.3 אין ציון בטקסט שקראנו
מנוצל? אין שדה ניצול ב-JSON של ה-CNA שקראנו רשומת KEV נוספה ב-2021-12-10 לא צוין בטקסט שקראנו

קורא שעצר ב-"unaffected from 2.15.0" של הרשומה היה בוחר ב-2.15.0 כיעד. ההודעה אומרת שהתיקון של 2.15.0 לא היה שלם ומפנה ל-2.16.0 עבור Java 8 ואילך. הרשומה הציגה את הצהרות הגרסה של ה-CNA מהזמן שבו נכתבו. ההודעה מציגה מה הספק אומר להתקין עכשיו.

טעויות נפוצות

קריאת ציון ה-CVSS כסיכון שלך. הציון מניח גישה והשפעה. החשיפה שלך תלויה בשאלה אם אפשר להגיע לרכיב ואם ההגדרה דלוקה. משתמשים בציון כדי למיין עבודה, ואז בודקים נגישות.

עצירה בטווח הגרסאות של הרשומה. ההודעה היא המקור לגרסה שצריך להתקין. בודקים אותה בכל פעם.

התייחסות לסימון "לא מופיע" כאילו הוא אומר "לא מושפע". מוצר שחסר ברשימה עדיין יכול להיות מושפע. הרשימה תלויה בעבודת ה-CNA ובניתוח של NVD, ושניהם לוקחים זמן.

ציפייה ל-CVE על כל בעיה. תיקונים רבים של ספקים יוצאים בלי מזהה. היעדר CVE הוא לא הוכחה לבטיחות.

בלבול בין תאריכים. שריון, פרסום, עדכון אחרון ושינוי אחרון הם אירועים שונים ממקורות שונים. מציינים את המקור ליד כל תאריך שמצטטים.

בדיקת CVE מול מערכות שאינן בבעלותך. המעבדה היא לקריאה בלבד. שחזור של פגם על יעד שאינו בשליטתך דורש הרשאה בכתב מהבעלים שלו. משתמשים במעבדה שבנית, עם גרסת התוכנה שנלמדת.

איך ממשיכים

קוראים את הודעת הספק לכל מוצר שרץ אצלך ונרשמים לפיד האבטחה שלו. במערכות פרודקשן, דף הספק הוא המסמך שבקרת השינויים שלך צריכה לצטט.

מקבצים סוגי CWE בין ה-CVEs שעוקבים אחריהם, ובודקים את קטלוג CISA KEV כשמגיעה רשימה ארוכה של CVEs חדשים בשבוע אחד. KEV הוא רשימה קצרה של פגמים עם ניצול מאושר, ולכן הוא מסנן שימושי.

הבא בסדרה, מה זה CVSS, מסביר איך בנוי ה-10.0 שברשומה הזאת, ולמה ציון בסיס הוא רק קלט אחד להחלטת תעדוף.

מקורות

מקורות

  1. CVE Program overview
  2. CVE Numbering Authorities
  3. CVE Record CVE-2021-44228
  4. NVD vulnerability API documentation
  5. NVD dashboard
  6. Apache Log4j security page

עוד בנושא מודיעין חולשות

מודיעין חולשות

CISA KEV ו-EPSS: תעדוף לפי ראיות לניצול

דירוג CVEs עם קטלוג KEV של CISA וציוני EPSS של FIRST לצד CVSS, ובניית טבלת עדיפויות משני הפידים החינמיים.

מתחילים10 דקות קריאה