כותרת Penligent

פענוח חתימת JSON באינטרנט: השער לפגיעויות קריטיות באימות

למי שלא מכיר, פענוח חתימת JSON באינטרנט הפעולה נראית טריוויאלית — פעולת פענוח Base64URL פשוטה כדי להציג את הטענות בתוך אסימון. אך עבור מהנדסי אבטחה, בודקי חדירות וחוקרי אבטחת AI, "פענוח" הוא רק שלב הסיור בשדה קרב מורכב הרבה יותר.

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

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

פענוח חתימת JSON באינטרנט Penligent

האנטומיה של JWS: יותר מסתם Base64

לפני שננתח את הניצולים, עלינו להתאים את עצמנו למבנה המוגדר ב- RFC 7515. חתימת אינטרנט JSON (JWS) מייצגת תוכן המאובטח באמצעות חתימה דיגיטלית או קוד אימות הודעה (MAC).

מחרוזת JWS קומפקטית מורכבת משלושה חלקים המופרדים על ידי נקודות (.):

כותרת.תוכן.חתימה

הלוגיקה של פענוח

כאשר אתה מבצע פענוח חתימת אינטרנט json, אתה למעשה ממיר את שני הקטעים הראשונים מפורמט Base64URL בחזרה ל-JSON.

להלן יישום Python גולמי עבור חוקרי אבטחה המעדיפים CLI על פני כלים מבוססי אינטרנט העלולים לרשום אסימונים רגישים:

פייתון

`import sys import json import base64

def padding_fix(data): missing_padding = len(data) % 4 if missing_padding: data += ‘=’ * (4 – missing_padding) return data

def decode_jws(token): try: header_b64, payload_b64, signature_b64 = token.split(‘.’)

    header = json.loads(base64.urlsafe_b64decode(padding_fix(header_b64))) payload = json.loads(base64.urlsafe_b64decode(padding_fix(payload_b64)))
    
    return header, payload except ValueError: print("[-] פורמט אסימון לא חוקי") sys.exit(1)

הקשר השימוש

header, payload = decode_jws(sys.argv[1])

print(json.dumps(header, indent=2))`

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

פרמטר כותרתתיאורהשלכות ביטחוניות
אלגאלגוריתם (לדוגמה, HS256, RS256)קובע את פרימיטיב ההצפנה. יעד עיקרי להתקפות הורדת דירוג.
טיפוססוג האסימון (לדוגמה, JWT)לעתים קרובות מתעלמים ממנו, אך ניתן להשתמש בו לבלבול בין סוגי נתונים.
ילדמזהה מפתחרמזים לגבי איזה מקש להשתמש. ניתן לשנות את ההגדרה עבור מעבר בין ספריות או הזרקת SQL במקרים נדירים.
jku / x5uכתובת URL של מפתח אינטרנט JSONמצביע על כתובת ה-URL של המפתח הציבורי. יעד ל-SSRF או לאירוח מפתחות זדוניים.
פענוח חתימת JSON באינטרנט Penligent

הפער בין "פענוח" ל"אימות": היכן נמצאות נקודות התורפה

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

1. עקיפת האלגוריתם "אין"

זהו ה"Hello World" של ניצולי JWS, אך הוא עדיין קיים במערכות ישנות. אם יישום backend מסתמך על אלג כותרת מהאסימון המפוענח כדי לקבוע את לוגיקת האימות, תוקף יכול לשנות את האסימון:

  1. פענוח הכותרת.
  2. שינוי אלג אל אף אחד (או אף אחד, אין).
  3. הסר את החתימה.

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

2. בלבול באלגוריתם (בלבול במפתח)

זוהי מתקפה מתוחכמת יותר. היא מתרחשת כאשר שרת תומך בחתימה סימטרית (HMAC) ובחתימה א-סימטרית (RSA/ECDSA), אך אינו מצליח לאמת איזו חתימה משמשת למפתח ספציפי.

  • תרחיש: השרת מצפה לאסימון RS256 (חתום במפתח פרטי, מאומת במפתח ציבורי).
  • התקפה: התוקף מבצע פענוח חתימת אינטרנט json, שינויים אלג אל HS256 (HMAC), ומחתים את האסימון באמצעות השרת מפתח ציבורי כסוד HMAC.
  • תוצאה: מכיוון שהמפתח הציבורי זמין לעתים קרובות ללקוח (או נגיש בקלות), התוקף יכול לזייף חתימה תקפה שהשרת מאמת באמצעות המפתח הציבורי שלו (ומתייחס אליו כסוד HMAC).

מחקר מקרה: CVE-2022-21449 ("Psychic Paper")

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

CVE-2022-21449 (CVSS 7.5), המכונה "Psychic Paper", השפיע על יישום חתימות ECDSA ב-Java. זוהי דוגמה מובהקת לכך שאימות פשוט של "קיום חתימה" אינו מספיק.

המנגנון

ב-ECDSA, האימות כרוך במשוואה מתמטית: $v = R’$ (בפשטות). הפגיעות הייתה ב-Java. ECDSA יישום שבו אם חלקי החתימה $r$ ו-$s$ הוגדרו שניהם כ- 0, לוגיקת האימות תחזיר באופן שגוי נכון עבור כלשהו מטען.

תוקף יכול:

  1. פענוח JWS לגיטימי.
  2. שנה את המטען (לדוגמה, {"admin": true}).
  3. בנה חתימה שבה $r=0$ ו-$s=0$.
  4. שלח אותו לשרת אחורי מבוסס Java (הפועל ב-Java 15, 16, 17 או 18).

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

ביקורת JWS מבוססת בינה מלאכותית: הגישה של Penligent

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

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

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

  1. פענוח קונטקסטואלי: הוא מיירט תעבורה, מפענח אסימוני JWS ומבין את ההקשר (לדוגמה, "אסימון זה משמש לשער התשלומים, ולא רק לכניסה").
  2. יצירת מטען אדפטיבי: זה לא רק מנסה alg: אין. הוא מנתח את תגובות השגיאה של השרת כדי להסיק את ספריית ה-backend. אם הוא מזהה סביבת Java, הוא עשוי לנסות וריאציות של CVE-2022-21449. אם הוא רואה ילד פרמטרים, הוא בודק אם יש הזרקת SQL או הזרקת פקודה באמצעות מזהה מפתח.
  3. ניתוח זרימת לוגיקה: Penligent יכול לזהות אם אסימון אומת כהלכה בנקודת קצה אחת, אך פשוט פוענח והוא נותן אמון ללא אימות בשירות מיקרו משני — פגם ארכיטקטוני נפוץ.

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

הנחיות הקשחה למהנדסים

כדי להגן על יישומים מפני התקפות JWS, עלינו לעבור מ"אמון מובלע" ל"אימות מפורש".

1. אכיפת רשימת הלבנים של האלגוריתם

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

JavaScript

// גישה מאובטחת (ספריית jose של Node.js) const verified = await jose.jwtVerify(token, secretKey, { algorithms: ['RS256'], // הוסף במפורש לרשימת ההיתרים רק RS256 });

2. אמת את ילד (מזהה מפתח) בקפדנות

אם ההתקנה שלך משתמשת במספר מפתחות (JWKS), ודא שה- ילד הכותרת תואמת למפתח ברשימת ההיתרים שלך. אל תעביר את ילד ערך ישירות לשאילתת מסד נתונים או לקריאה למערכת הקבצים.

3. השתמש בספריות מודרניות

הימנע מכתיבת עטיפות קריפטוגרפיות משלך. השתמש בספריות שנבדקו בקרב, כגון חוסה (Node.js), PyJWT (Python), או jjwt (Java). עם זאת, ודא שאתה מנוי על עלוני אבטחה עבור ספריות אלה.

4. הפרד בין פענוח לאימות (מבחינה לוגית)

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

סיכום

היכולת פענוח חתימת אינטרנט json היא מיומנות בסיסית, אך היא רק קצה הקרחון. עבור מהנדס האבטחה, ה-JSON הגולמי הוא מפה של תצורות שגויות פוטנציאליות. מהאלגוריתם הקלאסי "None" ועד לעקיפות מתמטיות כמו CVE-2022-21449, שלמות האינטרנט תלויה באימות קפדני, ולא רק בפענוח מוצלח.

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

הפניות:

שתף את הפוסט:
פוסטים קשורים