מתקפת StrandHogg / נקודת חולשה שקשורה לזיקה למשימה

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

סקירה כללית

ההתקפה של StrandHogg או נקודת החולשה של Task Affinity הופעלו או נגרמו בגלל באג בתכנון של האופן שבו Android מטפל במספר משימות, ובמיוחד בתכונה שנקראת 'העברת משימות להורה חדש'. שינוי ההורה של משימה באפליקציה היא תכונה שמאפשרת לאפליקציה להעביר פעילות ממשימה אחת למשימה אחרת.

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

  • העברת פעילות זדונית אל או מסטאק של קורבן
  • מגדירים את הפעילות הזדונית כמקבץ הפעילויות החוזרות (return stack) בסיום הפעילות של הקורבן.

נקודת החולשה הזו מנוצלת על ידי מניפולציה בהגדרות allowTaskReparenting ו-taskAffinity.

השפעה

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

לאחר מכן אפשר להשתמש בנקודת החולשה של Task Affinity כדי לחטוף פעולות חוקיות של משתמשים.

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

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

פעולות מיטיגציה

עדכון לגרסה android:minSdkVersion="30".

התיקון המקורי לפגיעה של התקפת StrandHogg / Task affinity פורסם במרץ 2019, וריאנט חדש ומקיף יותר תוקן בספטמבר 2020. גרסאות Android SDK 30 ואילך (Android 11) מכילות את התיקונים המתאימים למערכת ההפעלה כדי למנוע את נקודת החולשה הזו. אפשר לצמצם באופן חלקי את גרסת 1 של התקפת StrandHogg באמצעות הגדרה ספציפית של האפליקציה, אבל אפשר למנוע את גרסת 2 של ההתקפה רק באמצעות התיקון הזה לגרסה של ה-SDK.

משאבים