השפעת התוקף
אימות JWT לא תקין מאפשר לתוקפים לעקוף מנגנוני אימות על ידי זיוף תביעות או שימוש חוזר באסימונים שפג תוקפם [S1]. אם שרת מקבל אסימונים ללא חתימה חוקית, תוקף יכול לשנות את המטען כדי להסלים הרשאות או להתחזות לכל משתמש [S1]. יתר על כן, אי אכיפת תביעת התפוגה (exp) מאפשרת לתוקף להשתמש באסימון שנפרץ ללא הגבלת זמן [S1].
סיבת שורש
אסימון אינטרנט של JSON (JWT) הוא מבנה מבוסס JSON המשמש לייצוג תביעות בחתימה דיגיטלית או מוגנות בשלמות [S1]. כשלי אבטחה נובעים בדרך כלל משני פערי יישום ראשוניים:
- קבלת JWTs לא מאובטחים: אם שירות אינו אוכף בקפדנות את אימות החתימה, הוא עשוי לעבד "JWTs לא מאובטחים" כאשר החתימה נעדרת והאלגוריתם מוגדר ל-"none" [S1]. בתרחיש זה, השרת סומך על התביעות במטען מבלי לאמת את תקינותן [S1].
- אימות תביעה חסרה: תביעת
exp(זמן תפוגה) מזהה את הזמן שבו או אחריו אין לקבל את ה-JWT לעיבוד [S1]. הטענהaud(קהל) מזהה את הנמענים המיועדים של האסימון [S1]. אם אלה לא מסומנים, השרת עשוי לקבל אסימונים שפג תוקפם או שנועדו ליישום אחר [S1].
תיקוני בטון
- אכוף חתימות קריפטוגרפיות: הגדר את היישום כדי לדחות כל JWT שאינו משתמש באלגוריתם חתימה מאושר מראש וחזק (כגון RS256).
- אמת תפוגה: בצע בדיקה חובה כדי לוודא שהתאריך והשעה הנוכחיים הם לפני השעה המצוינת בתביעה
exp[S1]. - אמת קהל: ודא שהתביעה
audמכילה ערך המזהה את השירות המקומי; אם השירות אינו מזוהה בתביעתaud, יש לדחות את האסימון [S1]. - מנע הפעלה חוזרת: השתמש בתביעה
jti(מזהה JWT) כדי להקצות מזהה ייחודי לכל אסימון, מה שמאפשר לשרת לעקוב ולדחות אסימונים שנעשה בהם שימוש חוזר [S1].
אסטרטגיית איתור
ניתן לזהות פגיעויות בטיפול JWT על ידי ניתוח מבנה האסימון והתנהגות תגובת השרת:
- בדיקת כותרת: בדיקת הכותרת
alg(אלגוריתם) כדי לוודא שהיא לא מוגדרת ל"ללא" ומשתמשת בתקני הצפנה צפויים [S1]. - אימות תביעה: אישור נוכחות ותוקפן של תביעות
exp(תפוגה) ו-aud(קהל) בתוך מטען ה-JSON [S1]. - בדיקת אימות: בדיקה אם השרת דוחה כהלכה אסימונים שפג תוקפם בהתאם לטענת
expאו שמיועדים לקהל אחר כפי שהוגדר על ידי תביעתaud[S1].
