Skip to content

۵. آسیب‌پذیری Intent Injection (حمله سیستمی) ​

این یکی از خطرناک‌ترین باگ‌های تحلیل استاتیک است. زمانی رخ می‌دهد که اپلیکیشن یک Intent را از دنیای خارج می‌گیرد و بدون بررسی (Sanitization)، از آن برای باز کردن یک Activity دیگر یا یک WebView استفاده می‌کند.

سناریو: فرض کنید اپلیکیشن شما یک Activity دارد به نام WebViewActivity که کارش باز کردن لینک‌های وب است. این Activity در مانیفست "exported"=false است (یعنی از بیرون قابل دسترسی نیست). اما شما یک Activity دیگر دارید به نام ForwarderActivity که "exported"=true است و یک Intent را می‌گیرد تا به جای دیگری بفرستد.

java
public class ForwarderActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState)

        /* گرفتن یک Intent که داخل یک Intent دیگر جاسازی شده! */        
        Intent receivedIntent = (Intent) getIntent().getParcelableExtra("TARGET_INTENT")

        /* فاجعه: اجرای مستقیم آن بدون اینکه چک کند کجا می‌رود */        
        startActivity(receivedIntent)
    }
}

چرا این فاجعه‌بار است؟ هکر نمی‌تواند مستقیم WebViewActivity (بخش محرمانه) را باز کند، چون قفل است. اما می‌تواند به ForwarderActivity بگوید: «بیا این نامه را بگیر و از طرف خودت باز کن!»

bash
# هکر به اکتیویتی عمومی دستور می‌دهد که اکتیویتی خصوصی را باز کند #
adb shell am start -n com.app.package/.ForwarderActivity --ei "TARGET_INTENT" "intent:#Intentcomponent=com.app.package/.PrivateActivityS.secret_key=12345end"