פרצת אבטחה שמאפשרת התקפה בשיטת Path Traversal

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

מה קורה?

החל מ-16 בינואר 2018, Google Play החל לחסום פרסומים של אפליקציות ועדכונים חדשים עם פגיעוּת להתקפת Path Traversal. יש לעיין בהודעה שב-Play Console.לאחר המועדים האחרונים לתיקון שמוצגים ב-Play Console, אפליקציות שיכילו פרצות אבטחה לא מתוקנות יוסרו מ-Google Play.

הפעולה הנדרשת

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

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

פרטים נוספים

יישומים של openFile ב-ContentProviders שעברו ייצוא עלולים להיות חשופים אם הם לא מאמתים פרמטרי URI נכנסים בצורה נכונה. אפליקציה זדונית יכולה לספק URI מיוחד (למשל, URI שמכיל את התווים ”/../“) כדי לגרום לאפליקציה שלך להחזיר ParcelFileDescriptor לקובץ שנמצא מחוץ לתיקיית היעד, ובכך לאפשר לאפליקציה הזדונית לגשת לכל קובץ שנגיש לאפליקציה שלך.

יש שתי אסטרטגיות מומלצות לטיפול בפרצת Path Traversal ב-ContentProvider.

1. אם אין צורך לחשוף את ה-ContentProvider לאפליקציות אחרות:

2. אם ה-ContentProvider צריך להיות חשוף לאפליקציות אחרות:

יש להבטיח שהקלטים שמגיעים ל-openFile ומכילים תווים למעבר בין תיקיות (path traversal) לא יוכלו לגרום לאפליקציה להחזיר קבצים לא צפויים. אפשר לעשות זאת על ידי בדיקת הנתיב הקנוני של הקובץ. לדוגמה:

public ParcelFileDescriptor openFile (Uri uri, String mode)‎
   throws FileNotFoundException {‎
 File f = new File(DIR, uri.getLastPathSegment());‎
 if (!‎f.getCanonicalPath().startsWith(DIR)) {‎
   throw new IllegalArgumentException();‎
 }
 return ParcelFileDescriptor.open(f, ParcelFileDescriptor.‎MODE_READ_ONLY);‎
}
 

הסתייגויות: יש לשים לב שקריאה ל-getLastPathSegment בפרמטר URI היא לא פעולה בטוחה. אפליקציה זדונית יכולה לספק נתיב URI מקודד, כמו %2F..%2F..path%2Fto%2Fsecret.txt, כדי שהתוצאה של getLastPathSegment תהיה ‎/../../path/to/secret.txt. לדוגמה, היישום שבהמשך עדיין חשוף להתקפה.

public ParcelFileDescriptor openFile(Uri uri, String mode){‎
 File f = new File(DIR, uri.getLastPathSegment());‎
 return ParcelFileDescriptor.open(f, ParcelFileDescriptor.‎MODE_READ_ONLY);‎
}
 

אנחנו כאן כדי לעזור

אם יש לכם שאלות טכניות בנוגע לפגיעוּת זו, ניתן לפרסם פוסט באתר Stack Overflow ולהשתמש בתג “android-security”. משהו לא ברור בשלבים לפתרון הבעיה? ניתן לפנות אל צוות התמיכה שלנו למפתחים.

false
התפריט הראשי
6444729334181110841
true
חיפוש במרכז העזרה
true
true
true
true
true
5016068
false
false