אינטרנט זה אינטרנט, וועד בית זה ועד בית

איך לגלות את סיסמת המשתמש בשירות הדואר של וואלה!

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

איך זה עובד? קלי קלות:

  1. מקליקים על "אפשרויות", מתחת ללוגו של "וואלה! דואר"

  2. ממשיכים ל "עריכת פרטי חשבון משתמש"

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

  4. בעצם, אם נסתכל על קוד ה-HTML של הדף (view page source) ונחפש בו את המילה password, נגלה שהסיסמה מופיעה שם כחול על גבי לבן (בפיירפוקס). באמת אופס.

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

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

בואו נסתכל רגע על ה-URL:

http://friends.walla.co.il/?tsscript=login&theme=&ReturnURL=http://friends.walla.co.il/?w=/@reg&edit=1

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

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

מסתבר שבוואלה! בחרו בפתרון פשוט מאוד. לא משנה באיזה אתר אתם נמצאים, אם תלחצו על קישור כדי לעבור לדף אחר, הדפדפן שלכם יצרף לבקשה לקבלת הדף החדש את כתובת הדף ההנוכחי. כך למעשה יכול וובמאסטר לדעת מהיכן הגיעו גולשים אל האתר שלו: אם הוא רואה שהשדה הזה - שנקרא Referer (הטעות במקור) - מכיל כתובת מסוימת, הוא יודע שהגולש הגיע דרכה אל האתר שלו. זה קורה תמיד, אלא אם הגולש הקליד את כתובת האתר ישירות או הגיע דרך בוקמרק או לינק שמחוץ לדפדפן (כמו לינק שהופיע בשיחת מסנג'ר).

כדי להוכיח את זה, נשתמש בתוסף לפיירפוקס בשם Modify Headers*. תוסף זה מאפשר לשחק עם המידע שהדפדפן שולח אל השרת (במקרה הזה, השרת של וואלה!), ולגרום לו להתנהג בצורה שונה מברירת המחדל. נבקש ממנו לשנות את שדה ה -Referer לכתובת של דף ההתחברות, כך:

לאחר מכן נגלוש אל דף פרטי עריכת החשבון (http://friends.walla.co.il/?w=/@reg&edit=1) ונקבל אותו ללא הצורך בהזנת הסיסמה. זה אומר שאם לפני ה"תיקון" היה לוקח 10 שניות לגלות את הסיסמה, עכשיו זה לוקח דקה.

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

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

זה מלמד אותנו שהסיסמאות בוואלה! שמורות בבסיס הנתונים בצורה לא מוצפנת. מערכת שדואגת לשמירה על סיסמאות המשתמשים שלה תשתמש בפונקציית גיבוב חד כיוונית, כך שאם מישהו יקבל גישה לנתונים השמורים בשרת, הוא לא יוכל לגלות את סיסמת המשתמש עצמה, אלא רק את תוצר ההצפנה. אם בוואלה! היו עושים את זה הם לא היו יכולים להציג את הסיסמה למשתמש***. זה אומר שאם מישהו ימצא פירצת SQL Injection באתר (ולפי איך שהם מתייחסים לקלט מהמשתמש, אני בטוח שיש לפחות אחת), הוא אולי יוכל לקבל את רשימת כל שמות המשתמשים וסיסמאותיהם. כיף גדול.

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

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

פירצת האבטחה בשירות הדואר של וואלה! נחשפת

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

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

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

afrom=new Array();
afrom.email="johndoe@example.com";
afrom.name="John Doe";

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

אם, לדוגמה, שם השולח היה John " + "123″ + " Doe, התוצאה בקוד הג'אווהסקריפט היתה נראית כך:

afrom.name="John " + "123" + " Doe";

ושם השולח היה מוצג בחלון התצוגה כ "John 123 Doe".

ואפשר גם משהו כזה:

afrom.name="John " + function(){alert("Boo!");}() + " Doe";

שיגרום להודעה "Boo!" לקפוץ בעת קריאת הדואר.

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

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

איך וואלה! היו צריכים להגן על משתמשיהם? פשוט להחליף את התו " בסימן ;quot& שמייצג מרכאות, מה שהם כבר עשו עם נושא ההודעה.

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

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

למה בלוגים רבים מבוססי וורדפרס (סתם דוגמה אקראית, יש עוד הרבה ונראה לי שזה תלוי תבנית) מבקשים ממני לבחור באיזה פורמט סינדיקציה אני מעוניין להשתמש? למה שאצרטך להחליט בין RSS 2.0, RSS 0.92 או Atom 0.3? וזה כמובן קורה רק בלחיצה על כפתור הרסס שליד שורת הכתובת. הקישור "רסס פוסטים" מקשר כמעט תמיד ל RSS 2.0.

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

אסור להסביר בדיחות

אני: עזבי, את לא תביני.

המזכירה: נו די, אני רוצה לנסות.

אני: זה לא בשבילך, זה לא יגיד לך כלום.

היא: <קוראת> לא הבנתי.

אני: אמרתי לך שלא תביני.

היא: תסביר לי.

אני: זה סתם יישמע מטומטם.

היא: נו, תסביר.

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

היא: נו!

אני: <נאנח> sudo זו פקודה בלינוקס שנותנת לך הרשאות לעשות הכל.

היא: <בוהה בי במשך כמה שניות> … זה מפגר. אתה מוזר.

 

 

זה תלוי לי מעל השולחן כבר שלושה חודשים ורק היא שמה לב?

 

 

Proper User Policy apparently means Simon Says.

הנה הסיסמה שלך

התקן של HTML מגדיר יפה מאוד כיצד להוסיף לדף שדה להכנסת סיסמה:

password
Like "text", but the input text is rendered in such a way as to hide the characters (e.g., a series of asterisks). This control type is often used for sensitive input such as passwords.

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

מפתיע, כנראה, אלא אם אתה מפרסם מודעה ב"הומלס":

הומלס

וכמובן ש"יד2″, שעשו עבודה כל כך טובה בהעתקת הממשק של "הומלס", לא פספסו גם הפעם:

יד2

אגב, אם מישהו מחפש דירת 2.5 חדרים ליד גן העיר, עכשיו זה הזמן.

FireStats icon Powered by FireStats