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

מתקפת XSS באתר שליחת שנה טובה לאתר התפוצות יכולה לעשות לכם שנה ממש רעה

בכל פעם כשאני מדבר על חורי אבטחה משנת תרפפ״ו, תמיד יש מישהו שקופץ ואומר – ״למה אתה מדבר על זה? זה מזמן לא רלוונטי כי זו פרצה בת 25 שנה״. אבל מה שאני מתעקש להסביר הוא שיש מקומות שבהם עדיין חיים בשנות השמונים. היכן המקומות האלו נמצאים? טוב, בממשלת ישראל. המתנה שלא מפסיקה לתת. והיום? היום על הגריל אתר של משרד התפוצות שמאפשר לשלוח שנה טובה לכל יהודי בעולם. כן, כן. האמת היא שבמקרה הזה הערבים צריכים לברך על מזלם הטוב שמשרד התפוצות לא מאפשר לשלוח אליהם שנה טובה כי השנה הזו יכולה להפוך לשנה רעה במיוחד עקב פרצת XSS שיש באתר השנה הטובה.

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

בואו נדמיין שיש לנו מנוע חיפוש. כן, ממש כמו גוגל.

מנוע החיפוש שבניתי - מכניסים טקסט, לוחצים על חיפוש והוא מחפש
מנוע החיפוש שבניתי – מכניסים טקסט, לוחצים על חיפוש והוא מחפש

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

מנוע החיפוש שבניתי - הטקסט שמישהו חיפש מודפס ממש - שימו לב לחלק המודגש
מנוע החיפוש שבניתי – הטקסט שמישהו חיפש מודפס ממש – שימו לב לחלק המודגש

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

כל מי שיקבל את הקישור ויכנס לתוכו, יראה את האתר המותקף – הדומיין שלו, ה-https שלו הכל תקין – אבל התוכן שלו השתנה לגמרי והוא בשליטת התוקף. הקישור יכול להיות מופץ באופן המוני באמצעות סמסים, דואר אלקטרוני ועוד – כל מי שיכנס אליו יראה את התוכן של התוקף באתר של המותקף.

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

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

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

בגדול, מה שקורה הוא שהאתר לוקח את פרמטר id ושותל אותו ישירות בקוד בתוך תגית img ללא ולידציה או סניטציה. כך לשל, אם אני מכניס את הכתובת:

https://diasporashanatova.org.il/id.php?id=5b910edc35bca.png"><script>alert(22)</script>

אז בקוד אני אראה משהו כזה:

<img src="./API/uploads/5b910edc35bca.png"><script>alert(1)</script>" />

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

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

פוסטים נוספים שכדאי לקרוא

צילום מסך של סוואגר
יסודות בתכנות

openAPI

שימוש בתשתית הפופולרית למיפוי ותיעוד של API וגם הסבר בסיסי על מה זה API

פיתוח ב-JavaScript

Axios interceptors

תכנון נכון של קריאות AJAX באפליקציה ריאקטית וניהול השגיאות או ההצלחות עם פיצ׳ר נחמד של axios

עבודה בהיי טק

איך מראיינים סניורים?

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

גלילה לראש העמוד