קטגוריה של OWASP: MASVS-CODE: איכות הקוד
סקירה כללית
החדרת ישות חיצונית ב-XML (XXE) היא מתקפה נגד אפליקציות שמנתחות קלט XML. מתקפת XXE מתרחשת כשמנתח XML שההגדרה שלו חלשה מעבד קלט XML לא מהימן עם הפניה לישות חיצונית. ההתקפה הזו יכולה לשמש לביצוע כמה אירועים, כולל התקפת מניעת שירות (DoS), גישה למערכת קבצים או זליגת נתונים.
השפעה
כשיישום מנתח מסמך XML, הוא יכול לעבד כל DTD (הגדרות סוג מסמך, שנקראות גם ישויות חיצוניות) שכלול במסמך. תוקף יכול לנצל את ההתנהגות הזו על ידי החדרה של קוד זדוני כ-DTDs. הקוד הזה יכול לגשת לחלקים במערכת הקבצים של המכשיר, שנגישים רק לאפליקציה ועשויים להכיל מידע אישי רגיש. בנוסף, קוד זדוני כזה יכול לשלוח בקשות מהמכשיר, ועשוי לעקוף אמצעי אבטחה היקפיים.
לבסוף, אם האפליקציה מרחיבה DTD, היא עלולה ליצור מצב עם כמה איטרציות של ישויות שמפנות אחת לשנייה, ולגרום לניצול יתר של משאבי המכשיר ולהתקפת מניעת שירות.
אמצעי צמצום סיכונים
השבתת DTD
הדרך הבטוחה ביותר למנוע XXE היא להשבית תמיד את DTD (ישויות חיצוניות) באופן מלא. בהתאם למנתח התחביר שבו משתמשים, השיטה יכולה להיות דומה לדוגמה הבאה של ספריית XML Pull Parser:
Java
XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
factory.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true);
Kotlin
val factory = XmlPullParserFactory.newInstance()
factory.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true)
השבתה של DTDs גם מאבטחת את מנתח התוכן מפני התקפות מניעת שירות. אם אי אפשר להשבית את ה-DTD באופן מלא, צריך להשבית את הישויות החיצוניות ואת ההצהרות החיצוניות על סוג המסמך באופן ספציפי לכל מנתח.
בגלל המספר הגדול של מנועי ניתוח XML בשוק, הדרכים למניעת התקפות XXE שונות ממנוע למנוע. יכול להיות שתצטרכו לעיין במאמרי העזרה של המנוע כדי לקבל מידע נוסף.
ביצוע חיטוי של קלט
צריך להגדיר מחדש את האפליקציה כך שהיא לא תאפשר למשתמשים להוסיף קוד שרירותי בפתיח של מסמך ה-XML. האימות הזה צריך להתבצע בצד השרת, כי אפשר לעקוף את אמצעי הבקרה בצד הלקוח.
שימוש בספרייה אחרת
אם אי אפשר להגדיר את הספרייה או השיטה שבהן נעשה שימוש בצורה מאובטחת, צריך לשקול שימוש בספרייה או בשיטה אחרת. אפשר להגדיר את XML Pull Parser ו-SAX Parser בצורה מאובטחת, כך שלא יאפשרו DTD וישויות.
משאבים
- OWASP XXE
- OWASP XXE Prevention Cheat sheet
- קבועי XML: FEATURE_SECURE_PROCESSING
- XML Pull Parser
- SAX Parser