Pembuatan skrip lintas aplikasi

Kategori OWASP: MASVS-CODE: Kualitas Kode

Ringkasan

WebView adalah komponen browser tersemat dalam aplikasi Android yang memfasilitasi tampilan konten web dalam aplikasi. WebView merender HTML, CSS, dan JavaScript dalam antarmuka pengguna aplikasi.

Pembuatan Skrip Lintas Aplikasi secara luas terkait dengan eksekusi kode berbahaya dalam konteks pengajuan korban. Untuk tujuan dokumentasi ini, subjek ini secara khusus akan dibatasi dengan injeksi informasi berbahaya kode JavaScript ke WebView yang rentan.

Saat aplikasi menerima JavaScript berbahaya ke dalam WebView tanpa melakukan validasi atau sanitasi, aplikasi rentan terhadap serangan lintas aplikasi Pembuatan skrip.

Dampak

Kerentanan pembuatan skrip lintas aplikasi dapat dieksploitasi saat penyerang dikontrol Konten JavaScript diteruskan ke WebView aplikasi yang rentan tanpa divalidasi atau disanitasi. Akibatnya, kode JavaScript yang disediakan oleh penyerang dieksekusi dalam konteks WebView aplikasi korban. Tujuan kode JavaScript berbahaya dapat menggunakan izin akses yang sama seperti aplikasi milik korban, yang dapat menyebabkan pencurian data pengguna sensitif, dan pembajakan akun.

Mitigasi

Nonaktifkan JavaScript

Jika aplikasi Anda tidak memerlukan JavaScript, menonaktifkannya akan memastikan aplikasi tersebut 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 bahwa Anda memiliki atau mengontrol JavaScript diteruskan ke WebView. Hindari mengizinkan WebView menjalankan JavaScript arbitrer, lihat panduan di bagian berikutnya.

Memastikan hanya konten yang diharapkan yang dimuat ke WebView

Saat menggunakan metode seperti shouldOverrideUrlLoading(), loadUrl(), atau evaluateJavascript(),, pastikan URL apa pun yang diteruskan ke metode tersebut diperiksa. Seperti yang disebutkan sebelumnya, setiap JavaScript yang diteruskan ke WebView hanya boleh berasal dari domain yang diharapkan, sehingga penting untuk memverifikasi apa yang dimuat.

Lihat dokumentasi validasi input OWASP dan Android ini checklist keamanan untuk WebView untuk mendapatkan saran dan contoh yang bagus.

Menetapkan setelan akses file aman untuk WebView

Memastikan bahwa file tidak dapat diakses dapat mencegah JavaScript arbitrer untuk dijalankan dalam WebView.WebSettings berikut harus dijalankan yang perlu dipertimbangkan saat mengamankan akses file:

  • Nonaktifkan akses file. Secara default, setAllowFileAccess ditetapkan ke True di API level 29 dan yang lebih rendah yang akan mengizinkan akses ke file lokal. Di level API 30 dan jika lebih tinggi, defaultnya adalah False. Untuk memastikan bahwa akses file tidak diizinkan, tetapkan setAllowFileAccess secara eksplisit ke False
  • Nonaktifkan akses konten. Setelan default setAllowContentAccess adalah True. Akses URL konten memungkinkan WebView memuat konten dari konten penyedia yang diinstal di sistem. Jika aplikasi Anda tidak memerlukan akses konten, tetapkan setAllowContentAccess ke False untuk mencegah potensi penyalahgunaan jika terjadi pembuatan skrip lintas aplikasi.

  • Kotlin kotlin webView.settings.javaScriptEnabled = false webView.settings.domStorageEnabled = true webView.settings.allowFileAccess = false webView.settings.allowContentAccess = false

  • java 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 WebView untuk phishing atau domain berbahaya:

<meta-data android:name="android.webkit.WebView.EnableSafeBrowsing"
   android:value="true" />

Referensi