۵. آسیبپذیری 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"