פתרון לפגיעוּת של פריצה לסכמה של Intent

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

מה קורה?

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

נדרשת פעולה

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

  2. מעדכנים את האפליקציות המושפעות באמצעות השלבים שבהמשך.

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

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

פרטים נוספים

רכיבי WebView שנכנסים אל תוכן אינטרנט לא מהימן, מנתחים קישורי intent://‎ בעזרת Intent.parseUri ושולחים את מנגנוני ה-Intent האלה באמצעות startActivity, פגיעים לפריצה של סכמת Intent. את רכיבים ה-WebView האלה אפשר לתמרן בעזרת תוכן אינטרנט זדוני ולגרום להם לשלוח מנגנוני Intent שרירותיים אל רכיבים פרטיים באפליקציה. דבר זה עלול להוות סיכון אבטחה לאפליקציה ולהוביל, למשל, לגניבת נתונים פרטיים של האפליקציה שרכיבים כאלו מתמרנים. לתשומת לבכם, תוכן אינטרנט בלתי מהימן כולל תוכן מדומיינים מהימנים שנטען דרך HTTP.

אנו ממליצים למנוע פגיעוּת זו באחת מהדרכים הבאות:

אפשרות 1: מניעה מרכיבי WebView לשלוח מנגנוני Intent שרירותיים

אפליקציות יכולות להגביל מנגנוני Intent שנוצרו בעזרת Intent.parseUri כך שיישלחו רק כ-Implicit Intents אל רכיבים עם מסנני Intent מסוג BROWSABLE. לשם כך יש להשתמש בקוד הבא:

     // convert Intent scheme URL to Intent object
  Intent intent = Intent.parseUri(url);‎
  // forbid launching activities without BROWSABLE category
  intent.addCategory("android.intent.category.BROWSABLE");
  // forbid explicit call
  intent.setComponent(null);‎
  // forbid Intent with selector Intent
  intent.setSelector(null);‎
  // start the activity by the Intent
  view.getContext().startActivity(intent, -1);‎

אפשרות 2: מוודאים שרכיבי WebView מושפעים לא טוענים תוכן אינטרנט בלתי מהימן

אם רכיב WebView צריך לנתח כתובות URL שרירותיות בסכמת intent://‎, יש לוודא שהוא לא טוען תוכן אינטרנט לא מהימן. תוכן אינטרנט לא מהימן כולל תוכן אינטרנט שנטען דרך חיבור שאינו מוצפן. מפתחים יכולים להגדיר את android:usesCleartextTraffic לערך false במניפסט או להגדיר תצורה של אבטחת רשת שלא מתירה תנועת HTTP. לחלופין, ניתן לוודא שרכיבי WebView מושפעים לא טוענים כתובות URL עם סכמות HTTP באמצעות loadUrl.

מומלץ שמפתחים יוודאו שרכיבי WebView מושפעים לא טוענים כתובות URL לא מוגבלות שהתקבלו ממקורות לא מהימנים (לדוגמה, כתובות URL שהתקבלו ממנגנוני Intent לא מהימנים). 

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

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