שימוש לא בטוח בקישורי עומק

קטגוריה ב-OWASP: MASVS-PLATFORM: Platform Interaction

סקירה כללית

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

השפעה

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

ב-Android, מספר אפליקציות מאפשר לרשום מסנני Intent לאותו URI של קישור עומק. כדי למנוע מאפליקציות זדוניות ליירט קישורי עומק שמיועדים לאפליקציה שלכם, צריך להטמיע את המאפיין android:autoVerify ב-intent-filter בתוך AndroidManifest של האפליקציה. כך המשתמשים יכולים לבחור את האפליקציה המועדפת עליהם לטיפול בקישורי עומק, וכך מוודאים שהפעולה מתבצעת כמתוכנן ומונעים מאפליקציות זדוניות לפרש אותם באופן אוטומטי.

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

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

  <!-- Make sure you explicitly set android:autoVerify to "true". -->
  <intent-filter android:autoVerify="true">
      <action android:name="android.intent.action.VIEW" />
      <category android:name="android.intent.category.DEFAULT" />
      <category android:name="android.intent.category.BROWSABLE" />
  
      <!-- If a user clicks on a shared link that uses the "http" scheme, your
           app should be able to delegate that traffic to "https". -->
      <data android:scheme="http" />
      <data android:scheme="https" />
  
      <!-- Include one or more domains that should be verified. -->
      <data android:host="..." />
  </intent-filter>

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

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

משאבים