Pembuatan skrip lintas aplikasi

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, setAllowFileAccess ditetapkan ke True di level API 29 dan yang lebih rendah yang akan mengizinkan akses ke file lokal. Di level API 30 dan yang lebih tinggi, defaultnya adalah False. Untuk memastikan 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 penyedia konten yang diinstal di sistem. Jika aplikasi Anda tidak memerlukan akses konten, tetapkan setAllowContentAccess ke False untuk 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 = 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 ke WebView untuk domain phishing atau berbahaya:

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

Resource