هجوم StrandHogg / الثغرة الأمنية المتعلقة بالمهام
تنظيم صفحاتك في مجموعات
يمكنك حفظ المحتوى وتصنيفه حسب إعداداتك المفضّلة.
فئة OWASP: MASVS-PLATFORM: التفاعل مع النظام الأساسي
نظرة عامة
تم تفعيل هجوم StrandHogg / ثغرة Task Affinity أو نتجت عن خطأ في التصميم في طريقة تعامل Android مع المهام المتعددة، وتحديدًا الميزة التي تُعرف باسم إعادة تحديد مهام الوالدين. إعادة تحديد مهام التطبيق هي ميزة تسمح
للتطبيق بنقل نشاط من مهمة إلى أخرى.
يستغل هجوم StrandHogg عدم الوضوح بشأن كيفية التحقّق من أنشطة تسلسل مهام التطبيقات الواردة، ويسمح للتطبيق الضار بتنفيذ أيّ مما يلي:
- نقل نشاط ضار إلى حزمة ضحية أو من حزمة ضحية
- ضبط النشاط الضارّ كمجموعة الاسترجاع عند اكتمال أحد أنشطة الضحية
يتم استغلال هذه الثغرة من خلال التلاعب بالإعدادات allowTaskReparenting
و
taskAffinity
.
التأثير
يمكن لتطبيق ضار ضبط taskAffinity لأحد أنشطته لتطابق packageName لتطبيق مستهدف. ويمكن بعد ذلك إقران ذلك
باستيلاء على النية لكي يتم أيضًا إطلاق التطبيق الضار وعرضه فوق
التطبيق المستهدَف في المرة التالية التي يطلق فيها
المستخدم التطبيق المستهدَف.
ويمكن بعد ذلك استخدام ثغرة Task Affinity للاستيلاء على
إجراءات المستخدمين المشروعة.
يمكن خداع المستخدم لتقديم بيانات الاعتماد لتطبيق ضار.
بعد بدء نشاط وربطه بمهمة، يبقى هذا الربط ساريًا تلقائيًا طوال دورة حياة النشاط. ومع ذلك، يؤدي ضبط "allowTaskReparenting" على "صحيح" إلى إزالة هذا القيد، ما يسمح بإعادة ربط "نشاط" حالي بنشاط "أصلي" تم إنشاؤه حديثًا.
على سبيل المثال، يمكن أن يستهدف التطبيق "ب" التطبيق "أ"، ما يؤدي إلى إعادة توجيه أنشطة التطبيق "أ" إلى ملف أنشطة التطبيق "ب" عند العودة من النشاط المكتمل للتطبيق "أ". إنّ عملية التنقّل هذه
من تطبيق إلى آخر مخفية عن المستخدم وتشكّل
تهديدًا كبيرًا من التصيّد الاحتيالي.
إجراءات التخفيف
تعديل إلى android:minSdkVersion="30"
تم إصلاح ثغرة StrandHogg attack / Task affinity vulnerability في الأساس في
آذار (مارس) 2019 باستخدام إصدار أحدث وأكثر شمولاً تم إصلاحه في أيلول (سبتمبر)
2020. تحتوي إصدارات حزمة تطوير البرامج (SDK) لنظام التشغيل Android 30 والإصدارات الأحدث (Android 11) على تصحيحات نظام التشغيل المناسبة لتجنُّب هذه الثغرة الأمنية. على الرغم من أنّه من الممكن التخفيف من هجمات برمجية StrandHogg نوع 1 جزئيًا من خلال ضبط الإعدادات الفردية للتطبيق، إلا أنّه لا يمكن منع هجمات نوع 2 إلا من خلال تصحيح إصدار حزمة تطوير البرامج (SDK) هذا.
المراجع
يخضع كل من المحتوى وعيّنات التعليمات البرمجية في هذه الصفحة للتراخيص الموضحّة في ترخيص استخدام المحتوى. إنّ Java وOpenJDK هما علامتان تجاريتان مسجَّلتان لشركة Oracle و/أو الشركات التابعة لها.
تاريخ التعديل الأخير: 2025-07-26 (حسب التوقيت العالمي المتفَّق عليه)
[[["يسهُل فهم المحتوى.","easyToUnderstand","thumb-up"],["ساعَدني المحتوى في حلّ مشكلتي.","solvedMyProblem","thumb-up"],["غير ذلك","otherUp","thumb-up"]],[["لا يحتوي على المعلومات التي أحتاج إليها.","missingTheInformationINeed","thumb-down"],["الخطوات معقدة للغاية / كثيرة جدًا.","tooComplicatedTooManySteps","thumb-down"],["المحتوى قديم.","outOfDate","thumb-down"],["ثمة مشكلة في الترجمة.","translationIssue","thumb-down"],["مشكلة في العيّنات / التعليمات البرمجية","samplesCodeIssue","thumb-down"],["غير ذلك","otherDown","thumb-down"]],["تاريخ التعديل الأخير: 2025-07-26 (حسب التوقيت العالمي المتفَّق عليه)"],[],[],null,["# StrandHogg Attack / Task Affinity Vulnerability\n\n\u003cbr /\u003e\n\n**OWASP category:** [MASVS-PLATFORM: Platform Interaction](https://mas.owasp.org/MASVS/09-MASVS-PLATFORM)\n\n\nOverview\n--------\n\nThe StrandHogg attack / Task Affinity vulnerability was enabled / caused by a\ndesign bug in the way Android handled multiple tasks, specifically the feature\ncalled task reparenting. Application task reparenting is a feature that allows\nan application to move an activity from one task to another.\n\nThe StrandHogg attack exploits a lack of clarity on how to vet incoming\napplication task stack activities and allows a malicious application to either:\n\n- move a malicious activity to or from a victim stack\n- set the malicious activity as the return stack upon completion of a victim activity\n\nThis vulnerability is exploited by manipulating the `allowTaskReparenting` and\n`taskAffinity` settings.\n\nImpact\n------\n\nA malicious application can set the taskAffinity of one of its activities to\nmatch the packageName of a target application. This can then be coupled with\nintent hijacking so that the next time the target application is launched by the\nuser, the malicious application is also launched and displayed on top of the\ntarget application.\n\nThe Task Affinity vulnerability can then be used to hijack legitimate user\nactions.\n\nThe user could be tricked into providing credentials to a malicious application.\nBy default, once an activity starts and is associated with a task, that\nassociation persists for the activity's entire lifecycle. However, setting\nallowTaskReparenting to true breaks this restriction, allowing an existing\nactivity to be re-parented to a newly created \"native\" task.\n\nFor example, App A can be targeted by App B, redirecting App A activities to an\nApp B activity stack upon return from App A's completed activity. This\ntransition from one app to another is hidden from the user and creates a\nsignificant phishing threat.\n\nMitigations\n-----------\n\nUpdate to `android:minSdkVersion=\"30\"`.\n\nThe StrandHogg attack / Task affinity vulnerability was originally patched in\nMarch 2019 with a newer and more comprehensive variant patched in September\n2020. Android SDK versions 30 and newer (Android 11) contain the appropriate OS\npatches to avoid this vulnerability. While it is possible to partially mitigate\nversion 1 of the StrandHogg attack through individual application configuration,\nversion 2 of the attack can only be prevented by this SDK version patch.\n\nResources\n---------\n\n- [Original academic paper describing the vulnerability at Usenix\n 15](https://www.usenix.org/system/files/conference/usenixsecurity15/sec15-paper-ren-chuangang.pdf){.external}\n- [Promon Security group's expansion of the original\n vulnerability](https://promon.co/security-news/the-strandhogg-vulnerability/){.external}\n- [Android developer documentation for android:allowTaskReparenting](/guide/topics/manifest/activity-element#reparent)\n- [Android developer documentation for android:taskAffinity](/guide/topics/manifest/activity-element#aff)\n- [Android developer documentation for the application element of android:allowTaskReparenting](/guide/topics/manifest/application-element#reparent)"]]