השפעה
תוקף יכול לגנוב נתונים רגישים ומאומתים ממשתמשים של יישום פגיע [S2]. אם משתמש מבקר באתר אינטרנט זדוני בזמן שהוא מחובר לאפליקציה הפגיעה, האתר הזדוני יכול לשלוח בקשות צולבות ל-API של האפליקציה ולקרוא את התגובות [S1][S2]. זה יכול להוביל לגניבה של מידע פרטי, כולל פרופילי משתמש, אסימוני CSRF או הודעות פרטיות [S2].
סיבת שורש
CORS הוא מנגנון מבוסס כותרות HTTP המאפשר לשרתים לציין אילו מקורות (דומיין, סכמה או יציאה) מורשים לטעון משאבים [S1]. פגיעויות מתעוררות בדרך כלל כאשר מדיניות CORS של שרת גמישה מדי או מיושמת בצורה גרועה [S2]:
- כותרת מקור משתקפת: שרתים מסוימים קוראים את הכותרת
Originמבקשת לקוח ומהדהדים אותה בחזרה בכותרת התגובהAccess-Control-Allow-Origin(ACAO) [S2]. זה למעשה מאפשר לכל אתר אינטרנט לגשת למשאב [S2]. - תווים כלליים לא מוגדרים: בעוד שהתו הכללי
*מאפשר לכל מקור לגשת למשאב, לא ניתן להשתמש בו עבור בקשות הדורשות אישורים (כמו קובצי Cookie או כותרות הרשאה) [S3]. לעתים קרובות מפתחים מנסים לעקוף זאת על ידי יצירה דינמית של כותרת ACAO בהתבסס על הבקשה [S2]. - רישום הלבן 'null': אפליקציות מסוימות נותנות לרשימת ההיתרים את מקור ה-
null, אשר יכול להיות מופעל על ידי בקשות מנותבות או קבצים מקומיים, המאפשרים לאתרים זדוניים להתחזות למקורnullכדי לקבל גישה ZXCVIXVIBETOKEN2ZVFXCVIZC. - שגיאות ניתוח: טעויות בהתאמת ביטויים regex או מחרוזות בעת אימות הכותרת
Originיכולות לאפשר לתוקפים להשתמש בדומיינים כמוtrusted-domain.com.attacker.com[S2].
חשוב לציין כי CORS אינו הגנה מפני זיוף בקשות חוצות אתרים (CSRF) [S2].
תיקוני בטון
- השתמש ברשימת היתרים סטטית: הימנע מיצירה דינמית של הכותרת
Access-Control-Allow-OriginמהכותרתOriginשל הבקשה [S2]. במקום זאת, השווה את מקור הבקשה מול רשימה מקודדת של דומיינים מהימנים [S3]. - הימנע מהמקור 'null': לעולם אל תכלול את
nullברשימת ההיתרים שלך של המקורות המותרים [S2]. - הגבלת אישורים: הגדר את
Access-Control-Allow-Credentials: trueרק אם הכרחי לחלוטין לאינטראקציה צולבת מוצא ספציפית [S3]. - השתמש באימות תקין: אם עליך לתמוך במספר מקורות, ודא שהלוגיקת האימות עבור הכותרת
Originהיא חזקה ולא ניתן לעקוף אותה על ידי תת-דומיינים או דומיינים בעלי מראה דומה [S2].
כיצד FixVibe בודק את זה
FixVibe כולל כעת זאת כבדיקה אקטיבית מגודרת. לאחר אימות הדומיין, active.cors שולח בקשות API מאותו מקור עם מקור תוקף סינתטי וסוקר את כותרות התגובה של CORS. הוא מדווח על מקורות שרירותיים שיקפו, CORS עם תווים כלליים לחיפוש ו-CORS פתוח לרווחה בנקודות קצה API שאינן ציבוריות תוך הימנעות מרעש נכסים ציבוריים.
