תיקון לפרצת אבטחה מסוג Implicit PendingIntent

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

מה קורה?

יש בעיה מסוג Implicit PendingIntent באחת מהאפליקציות שלכם או יותר, שעלולה לגרום לאיומי אבטחה כמו התקפת מניעת שירות (DoS), גניבת מידע פרטי והסלמת הרשאות (privilege escalation)‏. יש לעיין בשלבים המפורטים שבהמשך כדי לפתור את הבעיה באפליקציות שלכם.  תוכלו למצוא את המיקומים שבהם נעשה שימוש ב-Implicit PendingIntent באפליקציה שלכם בהתראה של Play Console לאפליקציה שלכם. אם מיקום מסתיים ב-(in dynamically loaded code) (בקוד שנטען באופן דינמי) אז המיקום נמצא בקוד שנטען באופן דינמי על ידי האפליקציה או על ידי ספריות שמשמשות את האפליקציה. אפליקציות משתמשות בדרך כלל בקוד שנטען באופן דינמי באמצעות מסירת תכונות על פי דרישה, אבל קיימות טכניקות לא מומלצות אחרות (חלק מהטכניקות הלא מומלצות גם מפירות את המדיניות של Google Play ואין להשתמש בהן). בנוסף, Packers יכולים להפוך קוד אפליקציה לקוד שנטען באופן דינמי.

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

פרטים נוספים

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

PendingIntents הם אובייקטים מסוג Intent שהועברו לאפליקציה אחרת, שם יימסרו בשלב כלשהו בהמשך. יצירה של אובייקט Intent מרומז עטוף מתחת ל-PendingIntent מהווה פרצת אבטחה, שעלולה להוביל להתקפת מניעת שירות (DoS), לגניבת מידע פרטי ולהסלמת הרשאות (privilege escalation)

השלבים הבאים

1. מעדכנים את האפליקציה ומתקנים את ההתראות מסוג Implicit PendingIntent לפי השלבים שבהמשך.

בודקים את האפליקציה ומחפשים את המיקום שבו נוצר ה-PendingIntent. לדוגמה, הקוד הבא יוצר PendingIntent שעוטף את אובייקט ה-Intent המרומז: 

// Create an implicit base Intent and wrap it in a PendingIntent

Intent base = new Intent("ACTION_FOO");

base.setPackage("some_package");

PendingIntent pi = PendingIntent.getService(this, 0, base, 0);

אנחנו ב-Google ממליצים שמפתחים יתקנו את פרצת האבטחה על ידי אחד הצעדים הבאים, ומומלץ להשלים את כולם:

  • מוודאים שכל השדות 'פעולה', 'חבילה' ו'רכיב' של Intent הבסיס מוגדרים. 
  • מוודאים שה-PendingIntent מגיע רק לרכיבים מהימנים;
  • משתמשים ב-FLAG_IMMUTABLE (שהתווסף ב-SDK מגרסה 23) ליצירת PendingIntents. האפשרות הזו מונעת מאפליקציות שקיבלו PendingIntent למלא נכסים שלא מולאו. אם האפליקציה פועלת במכשירים עם SDK מגרסה 22 ואילך, אנחנו ממליצים למפתחים להחיל את האפשרויות הקודמות ולחזק את יצירת ה-PendingIntent בעזרת התבנית:

if (android.os.Build.VERSION.SDK_INT >= 23) {

  // Create a PendingIntent using FLAG_IMMUTABLE

} else {

  // Existing code that creates a PendingIntent

}

2. שולחים APK מעודכן

כדי לשלוח App Bundle או APK מעודכנים:

  1. עוברים אל Play Console.
  2. בוחרים את האפליקציה.
  3. פותחים את הכלי לבדיקת App Bundle.
  4. בתפריט הנפתח שבפינה השמאלית העליונה, בוחרים את ה-APK או את גרסת האפליקציה של App Bundle שלא עומדים בדרישות, ורושמים את מספרי הגרסאות שלהם.
  5. עוברים אל המסלול עם הבעיה במדיניות. המסלול עשוי להיות אחד מארבעת הדפים הבאים: בדיקות פנימיות / בדיקות סגורות / בדיקות של הקהל הרחב או סביבת ייצור.
  6. ליד הפינה השמאלית העליונה של הדף, לוחצים על יצירת גרסה חדשה. (יכול להיות שצריך ללחוץ קודם על 'ניהול של קהל יעד מצומצם')
    • אם הגרסה עם ה-APK שיוצר הפרה נמצאת בשלב הטיוטה, מוחקים את הגרסה.
  7. מוסיפים את הגרסה של ה-App Bundle או של ה-APK שעומדת בדרישות המדיניות.
    • מוודאים שהגרסה של ה-App Bundle או של ה-APK שלא עומדת בדרישות נמצאת בקטע לא ייכללו של הגרסה הזו. לקבלת עזרה נוספת, אפשר להיעזר בקטע Not included (app bundles and APKs) (לא ייכללו (App Bundle ו-APK) במאמר העזרה הזה של Play Console.
  8. כדי לשמור את השינויים שביצעתם בגרסה, בוחרים בשמירה.
  9. בסיום הכנת הגרסה, בוחרים בבדיקת הגרסה.

אם גרסת ה-APK שלא עומדת בדרישות משוחררת למספר מסלולים, יש לחזור על השלבים 5-9 בכל מסלול.

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

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

אם יש לכם שאלות טכניות לגבי פרצת האבטחה, אפשר לפרסם אותן בדף Stack Overflow ולהשתמש בתג 'android-security'. להבהרות לגבי השלבים שיש לבצע כדי לפתור את הבעיה, תוכלו לפנות אל צוות התמיכה.

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