Search

The Power of Cross-Site Scripting

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


קיימים שלושה סוגים עיקריים של הזרקות XSS:

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

· מסוג Reflected - זהו הסוג הנפוץ ביותר מבין פרצות ה-XSS. פרצות אלו מתאפשרות כאשר האתר מקבל נתונים מהמשתמש במטרה ליצור עמוד דינמי, אך לא מבצע בדיקה לתקינות הקלט. לדוגמא, שכנוע המשתמש להכנס לקישור המאפשר הזרקת JavaScript וזאת מבלי שהמשתמש ישים לב שנפל קורבן למתקפה.

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

לצורך ההדגמה אעשה שימוש בקוד הבא:


קוד זה אינו מבצע בדיקה וסינון לקלט המוכנס ולכן, ניתן להזריק בו קוד JavaScript.


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



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


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

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

מתקפה זו מוכרת וניתן לחסום אותה באמצעות הפעולה הבאה.

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


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


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

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

אורן אבידר חוקר, מרצה וממחברי ספר ה-WebSecurity בחברת ThinkCyber.

7 views

© 2020 by ThinkCyber

THE 2020

CYBERIUM