Kategori OWASP: MASVS-CODE: Kualitas Kode
Ringkasan
WebView adalah komponen browser yang disematkan dalam aplikasi Android yang memfasilitasi tampilan konten web dalam aplikasi. Komponen ini merender HTML, CSS, dan JavaScript dalam antarmuka pengguna aplikasi.
Pembuatan Skrip Lintas Aplikasi secara luas terkait dengan eksekusi kode berbahaya dalam konteks aplikasi korban. Untuk tujuan dokumentasi ini, subjek akan dibatasi secara khusus untuk injeksi kode JavaScript berbahaya ke WebView yang rentan.
Jika aplikasi menerima JavaScript berbahaya ke WebView tanpa validasi atau sanitasi yang memadai, aplikasi tersebut rentan terhadap Pembuatan Skrip lintas aplikasi.
Dampak
Kerentanan pembuatan skrip lintas aplikasi dapat dieksploitasi saat konten JavaScript yang dikontrol penyerang diteruskan ke WebView aplikasi yang rentan tanpa divalidasi atau disanitasi. Akibatnya, kode JavaScript yang disediakan oleh penyerang dieksekusi dalam konteks WebView aplikasi korban. Kode JavaScript berbahaya kemudian dapat menggunakan izin yang sama dengan aplikasi korban, yang dapat menyebabkan pencurian data pengguna sensitif, dan pembajakan akun.
Mitigasi
Nonaktifkan JavaScript
Jika aplikasi Anda tidak memerlukan JavaScript, menonaktifkannya akan memastikan aplikasi tidak menjadi ancaman:
Kotlin
// Get the WebView Object
val webView = findViewById<WebView>(R.id.webView)
val webSettings = webView.settings
// Disable JavaScript
webSettings.javaScriptEnabled = false
Java
// Get the WebView Object
WebView webView = (WebView) findViewById(R.id.webView);
WebSettings webSettings = webView.getSettings();
// Disable JavaScript for the WebView
webSettings.setJavaScriptEnabled(false);
Jika aplikasi Anda memerlukan JavaScript, pastikan Anda memiliki atau mengontrol JavaScript yang diteruskan ke WebView. Hindari mengizinkan WebView menjalankan JavaScript arbitrer, lihat panduan di bagian berikutnya.
Pastikan hanya konten yang diharapkan yang dimuat ke WebView
Saat menggunakan metode seperti shouldOverrideUrlLoading(), loadUrl(), atau
evaluateJavascript(), pastikan URL yang diteruskan ke metode tersebut diperiksa. Seperti yang dinyatakan sebelumnya, JavaScript yang diteruskan ke WebView hanya boleh berasal dari domain yang diharapkan, jadi penting untuk memverifikasi apa yang dimuat.
Lihat dokumentasi validasi input OWASP dan checklist keamanan Android untuk WebView ini untuk mendapatkan saran dan contoh yang baik.
Menetapkan setelan akses file yang aman untuk WebView
Memastikan bahwa file tidak dapat diakses dapat mencegah JavaScript arbitrer dari
dieksekusi dalam WebView.WebSettings berikut harus
dipertimbangkan saat mengamankan akses file:
- Nonaktifkan akses file. Secara default,
setAllowFileAccessditetapkan keTruedi level API 29 dan yang lebih rendah yang akan mengizinkan akses ke file lokal. Di level API 30 dan yang lebih tinggi, defaultnya adalahFalse. Untuk memastikan akses file tidak diizinkan, tetapkansetAllowFileAccesssecara eksplisit keFalse Nonaktifkan akses konten. Setelan default
setAllowContentAccessadalahTrue. Akses URL konten memungkinkan WebView memuat konten dari penyedia konten yang diinstal di sistem. Jika aplikasi Anda tidak memerlukan akses konten, tetapkansetAllowContentAccesskeFalseuntuk mencegah potensi penyalahgunaan jika terjadi serangan pembuatan skrip lintas aplikasi.kotlin
kotlin webView.settings.javaScriptEnabled = false webView.settings.domStorageEnabled = true webView.settings.allowFileAccess = false webView.settings.allowContentAccess = falsejava
java webView.getSettings().setJavaScriptEnabled(false); webView.getSettings().setDomStorageEnabled(true); webView.getSettings().setAllowFileAccess(false); webView.getSettings().setAllowContentAccess(false);
Aktifkan Safe Browsing
Aktifkan Safe Browsing di AndroidManifest.xml untuk memindai URL yang diteruskan ke
WebView untuk domain phishing atau berbahaya:
<meta-data android:name="android.webkit.WebView.EnableSafeBrowsing"
android:value="true" />
Resource
- Dokumentasi Safe Browsing
- Referensi developer WebView
- WebSettings untuk referensi developer WebView
- Dokumentasi developer setAllowFileAccess
- Referensi developer setAllowContentAccess