Penggunaan deep link yang tidak aman

Kategori OWASP: MASVS-PLATFORM: Interaksi Platform

Ringkasan

Risiko keamanan yang terkait dengan deep link berasal dari kemampuan intinya, yaitu memungkinkan navigasi dan interaksi yang lancar dalam aplikasi seluler. Kerentanan deep link muncul dari kelemahan dalam implementasi atau penanganan deep link. Kekurangan ini dapat dieksploitasi oleh pelaku kejahatan untuk mendapatkan akses ke fungsi atau data dengan hak istimewa, yang berpotensi mengakibatkan pelanggaran data, pelanggaran privasi, dan tindakan tidak sah. Penyerang dapat mengeksploitasi kerentanan ini melalui berbagai teknik, seperti pembajakan deep link dan serangan validasi data.

Dampak

Kurangnya mekanisme validasi deep link yang tepat, atau penggunaan deep link yang tidak aman, dapat membantu pengguna berbahaya dalam melakukan serangan seperti pengabaian validasi host, pembuatan skrip lintas aplikasi, dan eksekusi kode jarak jauh dalam konteks izin aplikasi yang rentan. Bergantung pada sifat aplikasi, hal ini dapat mengakibatkan akses tidak sah ke data atau fungsi sensitif.

Secara desain, Android memungkinkan beberapa aplikasi mendaftarkan filter intent untuk URI deep link yang sama. Untuk mencegah aplikasi berbahaya menyadap deep link yang ditujukan untuk aplikasi Anda, terapkan atribut android:autoVerify di intent-filter dalam AndroidManifest aplikasi. Hal ini memungkinkan pengguna memilih aplikasi yang disukai untuk menangani deep link, memastikan operasi yang diinginkan, dan mencegah aplikasi berbahaya menafsirkannya secara otomatis.

Android 12 memperkenalkan penanganan intent web yang lebih ketat untuk meningkatkan keamanan. Aplikasi kini harus diverifikasi untuk menangani link dari domain tertentu, baik melalui Link Aplikasi Android atau pilihan pengguna di setelan sistem. Hal ini mencegah aplikasi mencurangi link yang tidak boleh ditangani.

Untuk mengaktifkan verifikasi penanganan link untuk aplikasi Anda, tambahkan filter intent yang cocok dengan format berikut (contoh ini diambil dari dokumentasi Memverifikasi Link Aplikasi Android):

  <!-- Make sure you explicitly set android:autoVerify to "true". -->
  <intent-filter android:autoVerify="true">
      <action android:name="android.intent.action.VIEW" />
      <category android:name="android.intent.category.DEFAULT" />
      <category android:name="android.intent.category.BROWSABLE" />
  
      <!-- If a user clicks on a shared link that uses the "http" scheme, your
           app should be able to delegate that traffic to "https". -->
      <data android:scheme="http" />
      <data android:scheme="https" />
  
      <!-- Include one or more domains that should be verified. -->
      <data android:host="..." />
  </intent-filter>

Deep link dapat menyertakan parameter tambahan yang ditayangkan ke intent target, misalnya, untuk melakukan tindakan lebih lanjut. Dasar penanganan deep link yang aman adalah validasi data yang ketat. Semua data yang masuk dari deep link harus divalidasi dan dibersihkan dengan cermat oleh developer untuk mencegah kode atau nilai berbahaya dimasukkan dalam aplikasi yang sah. Hal ini dapat diterapkan dengan memeriksa nilai parameter deep link terhadap daftar yang diizinkan yang telah ditentukan sebelumnya untuk nilai yang diharapkan.

Aplikasi harus memeriksa status internal lain yang relevan, seperti status autentikasi, atau otorisasi, sebelum mengekspos informasi sensitif. Contohnya adalah reward karena menyelesaikan level game. Dalam hal ini, sebaiknya validasikan prasyarat untuk menyelesaikan level, dan alihkan ke layar utama jika tidak.

Referensi