חוקרים בחברת אבטחת קידוד האינטרנט SALT פרסמו זה עתה תיאור מרתק כיצד הם מצאו באג אימות דיבוב CVE-2023-28131 בערכת כלים פופולרית מקוונת לבניית אפליקציות המכונה Expo.
חדשות הטובות הן כי אקספו הגיב ממש מהר לדוח הבאגים של SALT, עם תיקון תוך מספר שעות בלבד מרגע החשיפה האחראית של SALT.
למרבה המזל, התיקון לא הסתמך על שלקוחות יורידו שום דבר, מכיוון שהתיקון הוטמע בתוך שירות הענן של Expo, ולא דרש תיקונים לאפליקציות מותקנות מראש או לקוד בצד הלקוח.
אקספו ייעוץ לא רק הסביר מה קרה וכיצד החברה תיקנה את זה, אלא גם הציעה עצות תכנות ללקוחותיה כיצד להימנע מפגיעות אפשרית מסוג זה בשירותים מקוונים אחרים.
לאחר מכן, SALT חיכתה שלושה חודשים לפני פרסום הדו"ח שלה, במקום להאיץ אותו למטרות פרסום בהקדם האפשרי, ובכך נתנה למשתמשי Expo הזדמנות לעכל ולפעול על פי תגובתה של Expo.
לשמור על זה פשוט
תהליך אימות הבאגי מוסבר בפירוט ב הדוח של SALT, אבל נציג כאן תיאור מאוד פשוט של מה השתבש בשירות OAUTH של Expo.
OAUTH, קיצור ל Open Authorization Framework, הוא תהליך המאפשר לך לגשת לנתונים פרטיים בשירות מקוון (כגון עריכת הפרופיל המקוון שלך, הוספת מאמר חדש בבלוג או אישור לשירות אינטרנט לפרסם עבורך פוסטים ברשתות חברתיות), מבלי להגדיר סיסמה עם , או התחברות ישירות לשירות זה עצמו.
כאשר אתה רואה שירותי אינטרנט המציעים לך א התחבר עם גוגל או פייסבוק אפשרות, למשל, הם כמעט תמיד משתמשים ב-OAUTH ברקע, כך שאינך צריך ליצור שם משתמש חדש וסיסמה חדשה עם אתר אחר, או לתת את מספר הטלפון שלך לשירות מקוון אחר.
באופן קפדני, אתה מאמת בעקיפין, רק מכניס את האישורים שלך לגוגל או פייסבוק באחד מאותם אתרים.
חלק מהמשתמשים לא אוהבים את זה, כי הם לא רוצים לבצע אימות לגוגל או לפייסבוק רק כדי להוכיח את זהותם לאתרים אחרים שאינם קשורים. אחרים אוהבים את זה מכיוון שהם מניחים שלאתרים כמו פייסבוק וגוגל יש יותר ניסיון בטיפול בתהליך ההתחברות, אחסון גיבוב של סיסמא בצורה מאובטחת וביצוע 2FA, מאשר אתר בוטיק שניסה לסרוג תהליכי אבטחה קריפטוגרפיים משלו.
אימות במיקור חוץ
בפשטות רבה, התחברות בסגנון OAUTH, דרך חשבון הפייסבוק שלך לאתר שנקרא example.com
, הולך בערך כך:
- האתר
example.com
אומר לאפליקציה או לדפדפן שלך, "שלום, X, לך וקבל אסימון גישה קסם לאתר הזה מפייסבוק." - אתה מבקר בכתובת אתר מיוחדת של פייסבוק, מתחבר אם עדיין לא עשית זאת, ותגיד, "תן לי אסימון גישה קסם עבור
example.com
". - אם פייסבוק תהיה מרוצה שאתה מי שאתה טוען, הוא עונה, "שלום, X, הנה אסימון הגישה הקסום שלך."
- אתה מוסר את אסימון הגישה ל
example.com
, אשר לאחר מכן תוכל ליצור קשר עם פייסבוק בעצמה כדי לאמת את האסימון.
שימו לב שרק פייסבוק רואה את סיסמת פייסבוק וקוד 2FA שלכם, במידת הצורך, כך ששירות פייסבוק פועל כמתווך אימות בינכם לבין example.com
.
מאחורי הקלעים, יש אימות סופי, כמו זה:
- האתר
example.com
אומר לפייסבוק, "האם הנפקת את האסימון הזה, והאם הוא מאמת את המשתמש X?" - אם פייסבוק תסכים, זה אומר
example.com
, "כן, אנו רואים במשתמש זה אימות."
רצף חתרני
הבאג שמצאו חוקרי SALT בקוד Expo יכול להיות מופעל על ידי ערעור זדוני של הטיפול של Expo במה שאפשר לכנות תהליך "תיווך אימות".
נקודות המפתח הן כדלקמן:
- Expo עצמה מוסיפה מעטפת סביב תהליך האימות, כך שהוא יטפל עבורך באימות ובאימות, ובסופו של דבר יעביר אסימון גישה קסם לאתר הרצוי (
example.com
בבורסה למעלה) בחזרה לאפליקציה או לאתר שממנו אתה מתחבר. - הפרמטרים המשמשים לטיפול באימות ארוזים בכתובת URL גדולה שנשלחת לשירות Expo.
- אחד מהפרמטרים הללו נשמר באופן זמני בקובץ cookie באינטרנט שמציין את כתובת האתר שאליה יישלח אסימון האבטחה הסופי של הקסם כדי לאפשר גישה.
- לפני מסירת אסימון האבטחה, חלון קופץ מבקש ממך לאמת את כתובת האתר שעומדת להיות מאושרת, כדי שתוכל לתפוס את כל מי שמנסה להחליף כתובת URL מזויפת בתהליך הכניסה.
- אם תאשר את החלון הקופץ, Expo מפנה אותך לתהליך האימות בפייסבוק.
- אם פייסבוק תאשר את האימות, זה מחזיר אסימון גישה קסם לשירות Expo, ו-Expo מעביר אותו לכתובת האתר שאישרת זה עתה בחלון הקופץ, המכונה
returnURL
. - האפליקציה או האתר מקשיבים לפי המפורט
returnURL
מקבל התקשרות חוזרת של אקספו, רוכש את אסימון הגישה, ולכן הוא מאומת כמוך.
למרבה הצער, חוקרי SALT גילו שהם יכולים לשנות את תהליך ההתחברות באמצעות קוד JavaScript כדי להפעיל גישה לכתובת ה-URL לכניסה הראשונית של Expo, אך לאחר מכן להרוג את חלון האימות הקופץ לפני שהספקת לקרוא אותו או לאשר אותו בעצמך.
אולם בשלב זה, השירות של אקספו כבר הגדיר עוגייה בשם ru
(קיצור ל returnURL
) כדי לומר לו לאן להתקשר בחזרה עם אסימון הגישה הקסום שלך בסוף.
משמעות הדבר היא שפושעי סייבר יכול להערים על הקוד של Expo כדי "לזכור" את א returnURL
כמו https://roguesite.example
, מבלי שראית אי פעם את תיבת הדו-שיח כדי להזהיר אותך שמתקפה יוצאת לדרך, שלא לדבר על אישורה בטעות.
אחר כך השתמשו החוקרים בגוש שני של קוד JavaScript כדי לדמות את ההפניה מחדש של Expo לתהליך האימות של פייסבוק, שיצליח באופן אוטומטי אם (כמו אנשים רבים) כבר היית מחובר לפייסבוק עצמה.
האימות של Facebooks, בתורו, יפנה את תהליך הכניסה ל-Expo בחזרה לקוד JavaScript של Expo...
... מה שיתפוס באופן בוטח אך בטעות את המעולם לא מאומת returnURL
על ההתקשרות שלו מהקסם הזה ru
קובץ cookie שהוא הגדיר בהתחלה, ללא אישורך או ידיעתך.
כשל פתוח או כשל סגור?
כפי שניתן לראות מהתיאור שלמעלה, הפגיעות נגרמה כתוצאה מהכשל של הקוד של Expo באופן בלתי הולם.
קוד אימות צריך בדרך כלל כישלון סגור, בז'רגון, כלומר התהליך לא אמור להצליח אלא אם כן אותת איזשהו אישור אקטיבי.
אנחנו מנחשים שאקספו לא התכוונה למערכת להיכשל פתוח, בהתחשב בכך שהדוח של SALT מראה שדו-שיח האישור הקופץ שלו נראה כך:
האפליקציה בכתובת https://roguesite.example מבקשת ממך להיכנס לחשבון הפייסבוק שלך. האם אתה סומך לחלוטין על https://roguesite.example ומסכים לתת לזה: [לא] [כן]
תשובת ברירת המחדל, כפי שהיית מצפה, הוגדרה ל [No]
, אבל זה יגרום לסגירת המערכת רק אם תשתמש באדיקות בקוד צד הלקוח של Expo כדי לשלוט בתהליך האימות.
על ידי אספקת JavaScript משלהם כדי להפעיל את רצף בקשות האימות, החוקרים הצליחו להתייחס לתיבת הדו-שיח של האישור כאילו נאמר בו:
אם לא תגיד לנו במפורש לחסום את https://roguesite.example מכניסה דרך חשבון הפייסבוק שלך, אנו ניתן לו לעשות זאת: [אפשר] [חסום]
הפתרון, בין שאר השינויים, היה שקוד הכניסה הראשוני של Expo יקבע את הקסם הזה ru
עוגייה רק לאחר שאישרת במפורש את מה שנקרא returnURL
, כך שקוד ההתחברות המאוחר יותר של Expo יכשל בסגירה אם דילוג על חלון האימות הקופץ, במקום לסמוך באופן עיוור על כתובת URL שמעולם לא ראית או אישרת.
במובנים רבים, באג זה דומה ל- Belkin Wemo Smart Plug באג שכתבנו לפני כשבועיים, למרות שהסיבה השורשית במקרה של בלקין הייתה הצפת חוצץ, לא התקשרות סוררת לאינטרנט.
הקוד של בלקין הקצה מאגר זיכרון של 68 בתים בקוד בצד השרת שלו, אך הסתמך על בדיקת הקוד בצד הלקוח שלא ניסית לשלוח יותר מ-68 בתים, ובכך הותיר את השרת נתון לחסדי התוקפים שהחליטו לדבר עם השרת באמצעות קוד משלהם בצד הלקוח שעקף את תהליך האימות.
מה לעשות?
- בעת דיווח וכתיבה של באגים, שקול לעקוב אחר SALT's דוגמה. לחשוף באחריות, לתת לספק זמן סביר לתקן את הפגיעות, בתוספת זמן סביר לייעץ למשתמשים שלו, לפני פרסום פרטים שיאפשרו לכל אחד אחר ליצור ניצול משלו.
- בעת קבלת דוחות באגים, שקול לעקוב אחר האקספו דוגמה. השב במהירות, שמור על קשר עם המדווח של הבאג, תקן את הפגיעות בהקדם האפשרי, ספק דוח חקירה מועיל עבור המשתמשים שלך ושמור על אובייקטיביות. (תתנגד להצעות של צוות השיווק שלך כדי לשבח את עצמך על "התייחסות לאבטחה ברצינות" או לדחות את הנושא כלא חשוב. זה למשתמשים שלך להחליט, בהתבסס על המהירות והרלוונטיות של התגובה שלך, והערכת הסיכון שלהם).
- ודא שקוד האימות שלך נכשל סגור. ודא שאין לך שלבי אימות או אישור שניתן לנטרל פשוט על ידי התעלמות או ביטול שלהם.
- לעולם אל תניח שקוד צד הלקוח שלך ישלוט בתהליך האימות. נניח שתוקפים יבצעו הנדסה לאחור של הפרוטוקול שלך ויצרו קוד לקוח משלהם כדי לעקוף כמה שיותר בדיקות.
- התנתק מחשבונות אינטרנט כאשר אינך משתמש בהם באופן פעיל. אנשים רבים מתחברים לחשבונות כמו גוגל, אמזון, פייסבוק, אפל ואחרים, ואז נשארים מחוברים ללא הגבלת זמן, כי זה נוח. יציאה מונעת מפעולות רבות (כולל אימותים, פוסטים, לייקים, שיתופים ועוד הרבה) להתרחש כאשר אינך מצפה להן - במקום זאת תראה בקשת התחברות.
אל תשכח שעל ידי יציאה משירותי האינטרנט בכל עת שאתה יכול, ועל ידי ניקוי כל העוגיות בדפדפן ונתוני האינטרנט המאוחסנים לעתים קרובות, אתה גם מפחית את כמות מידע המעקב שהאתרים יכולים לאסוף עליך בזמן הגלישה.
אחרי הכל, אם אתה לא מחובר, ולא נשארו לך עוגיות מעקב מקודם, האתרים כבר לא יודעים בדיוק מי אתה, או מה עשית בפעם האחרונה שביקרת.
- הפצת תוכן ויחסי ציבור מופעל על ידי SEO. קבל הגברה היום.
- PlatoAiStream. Web3 Data Intelligence. הידע מוגבר. גישה כאן.
- הטבעת העתיד עם אדריאן אשלי. גישה כאן.
- קנה ומכירה של מניות בחברות PRE-IPO עם PREIPO®. גישה כאן.
- מקור: https://nakedsecurity.sophos.com/2023/05/30/serious-security-verification-is-vital-examining-an-oauth-login-bug/
- :יש ל
- :הוא
- :לֹא
- :איפה
- $ למעלה
- 1
- 15%
- 2FA
- a
- יכול
- אודות
- מֵעַל
- מוּחלָט
- גישה
- חֶשְׁבּוֹן
- חשבונות
- רוכש
- לפעול
- פעולות
- פעיל
- באופן פעיל
- מעשים
- מוסיף
- מוסיף
- עצה
- לייעץ
- לאחר
- לִפנֵי
- תעשיות
- מוּקצֶה
- להתיר
- מאפשר
- לבד
- כְּבָר
- גם
- תמיד
- אמזון בעברית
- בין
- כמות
- an
- ו
- אחר
- לענות
- כל
- כל אחד
- דבר
- האפליקציה
- תפוח עץ
- הסכמה
- לאשר
- מאושר
- אפליקציות
- ARE
- סביב
- מאמר
- AS
- הערכה
- At
- לתקוף
- לאמת
- מאומת
- אימות
- מחבר
- מורשה
- אישור
- המכונית
- באופן אוטומטי
- לְהִמָנַע
- בחזרה
- רקע
- רקע תמונה
- מבוסס
- BE
- כי
- היה
- לפני
- בֵּין
- גָדוֹל
- בעיוורון
- לחסום
- בלוג
- גבול
- תַחתִית
- ברוקר
- דפדפן
- עוגיות דפדפן
- חיץ
- הצפת מאגר
- חרק
- באגים
- אבל
- by
- שיחה
- נקרא
- CAN
- מקרה
- היאבקות
- לגרום
- גרם
- מרכז
- סיכוי
- שינויים
- בדיקה
- בדיקות
- לטעון
- קרחת יער
- לקוחות
- סגור
- ענן
- קוד
- סִמוּל
- לגבות
- צֶבַע
- מגיע
- חברה
- מקשר
- לשקול
- צור קשר
- לִשְׁלוֹט
- נוֹחַ
- עוגייה
- עוגיות
- יכול
- לכסות
- לִיצוֹר
- אישורים
- קריפטוגרפי
- לקוחות
- פושע רשת
- נתונים
- להחליט
- החליט
- בְּרִירַת מֶחדָל
- נתן
- תיאור
- רצוי
- פרט
- פרטים
- דיאלוג
- DID
- תקציר
- ישירות
- לחשוף
- חשיפה
- לפטר
- לְהַצִיג
- do
- עושה
- עושה
- דון
- לא
- דיבוב
- עריכה
- אחר
- לאפשר
- סוף
- אֲפִילוּ
- אי פעם
- בדיוק
- בוחן
- דוגמה
- חליפין
- לצפות
- ניסיון
- מוסבר
- לנצל
- אקספו
- פייסבוק
- FAIL
- אי
- נכשל
- מקסים
- מעטים
- סופי
- לסדר
- קבוע
- הבא
- כדלקמן
- בעד
- מצא
- בתדירות גבוהה
- החל מ-
- לגמרי
- בדרך כלל
- לקבל
- לתת
- נתן
- נתינה
- Go
- Goes
- טוב
- לתפוס
- מאוד
- היה
- יד
- מטפל
- טיפול
- קרה
- מתרחש
- יש
- גובה
- מועיל
- כאן
- שעות
- לרחף
- איך
- איך
- אולם
- HTTPS
- זהות
- if
- יושם
- in
- כולל
- בעקיפין
- מידע
- בתחילה
- במקום
- בכוונת
- אל תוך
- תחקיר
- סוגיה
- IT
- שֶׁלָה
- עצמו
- בז'רגון
- JavaScript
- רק
- שמור
- מפתח
- לִסְרוֹג
- לדעת
- ידע
- ידוע
- אחרון
- מאוחר יותר
- עזיבה
- עזבו
- כמו
- האזנה
- ll
- מחובר
- רישום
- התחבר
- עוד
- נראה
- קסם
- לעשות
- רב
- הרבה אנשים
- שולים
- שיווק
- max-width
- משמעות
- התכוון
- מדיה
- זכרון
- יכול
- טעות
- חודשים
- יותר
- הרבה
- שם
- צורך
- נחוץ
- לעולם לא
- חדש
- חדשות
- לא
- נוֹרמָלִי
- מספר
- oauth
- מטרה
- of
- כבוי
- הַצָעָה
- מוצע
- on
- ONE
- באינטרנט
- רק
- לפתוח
- אפשרות
- or
- אחר
- אחרים
- הַחוּצָה
- יותר
- שֶׁלוֹ
- ארוז
- פרמטרים
- מעברי
- חולף
- סיסמה
- תיקון
- טלאים
- פול
- אֲנָשִׁים
- טלפון
- אפלטון
- מודיעין אפלטון
- אפלטון נתונים
- ועוד
- נקודה
- נקודות
- פופולרי
- עמדה
- אפשרי
- הודעות
- להציג
- מונע
- פְּרָטִי
- תהליך
- תהליכים
- פּרוֹפִיל
- תכנות
- פרוטוקול
- להוכיח
- לספק
- פִּרסוּם
- לאור
- הוצאה לאור
- למטרות
- מכניס
- מהירות
- במקום
- חומר עיוני
- בֶּאֱמֶת
- סביר
- מקבל
- קבלה
- הפניה
- להפחית
- לסמוך
- תשובה
- לדווח
- כתב
- דווח
- דוחות לדוגמא
- בקשות
- לדרוש
- חוקרים
- תגובה
- אחראי
- החזרות
- תקין
- הסיכון
- שורש
- הפעלה
- אמר
- מלח
- מרוצה
- לומר
- אומר
- סצנות
- שְׁנִיָה
- מאובטח
- אבטחה
- בטח
- לִרְאוֹת
- ראות
- לראות
- רואה
- לשלוח
- נשלח
- רצף
- רציני
- שרות
- שירותים
- סט
- הצבה
- שיתופים
- קצר
- צריך
- הופעות
- סִימָן
- דומה
- פשוט
- בפשטות
- אתר
- אתרים
- חכם
- So
- חֶברָתִי
- מדיה חברתית
- פוסטים ברשתות החברתיות
- מוצק
- פִּתָרוֹן
- כמה
- משהו
- בקרוב
- מדבר
- מיוחד
- מפורט
- התחלה
- להשאר
- צעדים
- מאוחסן
- הוגש
- להצליח
- כזה
- אספקה
- SVG
- מערכת
- לדבר
- לספר
- אומר
- מֵאֲשֶׁר
- זֶה
- השמיים
- שֶׁלָהֶם
- אותם
- אז
- לכן
- אלה
- הֵם
- זֶה
- אלה
- אם כי?
- שְׁלוֹשָׁה
- זמן
- ל
- אסימון
- ארגז כלים
- חלק עליון
- מעקב
- מַעֲבָר
- שָׁקוּף
- טיפול
- ניסיתי
- להפעיל
- מופעל
- סומך
- בוטח
- לנסות
- תור
- שתיים
- בסופו של דבר
- תחת
- על
- כתובת האתר
- us
- מְשׁוּמָשׁ
- משתמש
- משתמשים
- באמצעות
- לְאַמֵת
- אימות
- מוכר
- אימות
- לאמת
- באמצעות
- לְבַקֵר
- ביקר
- חיוני
- פגיעות
- רוצה
- היה
- דֶרֶך..
- דרכים
- we
- אינטרנט
- שירותי אינטרנט
- אתר
- שבועות
- הלכתי
- היו
- מה
- מתי
- בכל פעם
- אשר
- מי
- יצטרך
- עם
- בתוך
- לְלֹא
- היה
- כתיבה
- טעות
- X
- כן
- עוד
- אתה
- עצמך
- זפירנט