לדלג לתוכן

מה זה Path Traversal - כששלוש נקודות וקו נטוי חושפות את כל השרת

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

אז מה זה בעצם קורה שם

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

/var/www/uploads/<שם הקובץ שהמשתמש ביקש>

הבעיה מתחילה כשהאתר לא בודק שהמשתמש לא מנסה "לצאת" מהתיקייה הזאת. במערכות הפעלה, הצירוף ../ אומר "עלה תיקייה אחת למעלה". אם משתמש, במקום שם קובץ רגיל, מבקש ../../../../etc/passwd, והשרת לא בודק את זה, הנתיב שנבנה בפועל הוא:

/var/www/uploads/../../../../etc/passwd

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

אילו קבצים תוקפים בדרך כלל מחפשים

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

למה זה עדיין קורה

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

למה זה מסוכן במיוחד

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

איך מגנים על אתר מפני Path Traversal

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

איך לומדים לזהות את זה בעצמכם

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

בקורס פריצת אתרים חולשת Path Traversal נלמדת בפרק חולשות צד השרת, יחד עם חולשות קשורות כמו Command Injection ו-Insecure File Upload, כדי לבנות תמונה מלאה של איך תוקף פועל מול שרת אמיתי.

לסיכום

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

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