Android Deep Link Exploitation

Avatar photo

Untuk bisa membuka aplikasi lain dari aplikasi kita, biasanya kita menggunakan Intent dengan menyebutkan nama kelas Activity yang ingin kita tuju. Namun, jika Activity yang ingin kita buka sudah mengatur android:exported=”false” di file manifest-nya, kita tidak bisa menggunakan cara tersebut. Salah satu cara alternatifnya adalah dengan menggunakan deep link.

Deep link adalah cara lain yang bisa kita gunakan untuk masuk langsung ke layar tertentu di dalam aplikasi, meskipun aplikasi tersebut berada di luar kendali kita.

Deep links adalah URL yang dirancang khusus untuk membuka aktivitas tertentu dalam sebuah aplikasi. Ini dapat dipicu dari berbagai sumber, seperti web pages, push notifications, atau aplikasi lain. Di Android, deep links dapat diklasifikasikan menjadi Scheme URLs, App Links, dan Intent URLs. Scheme URLs adalah implementasi awal yang memungkinkan aplikasi apa pun untuk mendaftarkan skema kustom, host, dan path. Kekurangan validasi ini membuka peluang adanya link hijacking, di mana malicious app menyusupkan sebuah link yang seharusnya untuk aplikasi lain. Kesalahan konfigurasi dan proses verifikasi yang tidak tepat masih dapat membuat aplikasi rentan terhadap link hijacking dan data interception.

Deep links dapat menghadirkan berbagai risiko dan eksploitasi pada aplikasi jika tidak diamankan dengan baik. Kerentanan umum dan potensi diantaranya :

  1. Phishing Attacks (Serangan Phising): Deep links yang tidak diotentikasi dengan benar dapat dimanfaatkan oleh penyerang untuk mengarahkan pengguna ke situs web palsu yang meniru tampilan situs asli. Hal ini dapat menyebabkan pengguna untuk memasukkan informasi sensitif seperti kata sandi atau informasi kartu kredit ke dalam situs palsu, yang kemudian dapat disalahgunakan oleh penyerang.
  2. Malware Distribution (Penyebaran Malware): Penyerang dapat menggunakan deep links untuk mengarahkan pengguna ke situs web yang mengandung malware atau untuk mengunduh file berbahaya secara otomatis ke perangkat pengguna. Hal ini dapat mengakibatkan infeksi perangkat dan potensi kehilangan data atau kerusakan sistem.
  3. Data Interception (Pencurian Data): Deep links yang tidak dienkripsi atau tidak diamankan dapat menyebabkan data sensitif yang dikirim melalui tautan tersebut disadap oleh penyerang. Informasi pribadi atau rahasia yang dikirimkan melalui deep links yang rentan dapat disalahgunakan untuk pencurian identitas atau tujuan lainnya.
  4. Man-in-the-Middle Attacks (Serangan Man-in-the-Middle): Penyerang dapat mencoba menyisipkan diri di antara pengguna dan server untuk mencuri atau memanipulasi data yang dikirim melalui deep links. Hal ini dapat terjadi jika deep links tidak dienkripsi atau jika koneksi tidak aman.
  5. Link Hijacking (Pengalihan Tautan): Penyerang dapat mencoba mengalihkan deep links yang ditujukan untuk aplikasi tertentu ke aplikasi lain atau ke situs web yang berbahaya. Ini dapat membingungkan pengguna dan memungkinkan penyerang untuk mencuri informasi atau mengakses fitur aplikasi yang tidak seharusnya.
  6. Identity Theft (Pencurian Identitas): Deep links yang rentan dapat digunakan oleh penyerang untuk mencuri informasi pribadi pengguna, seperti nama, alamat, atau nomor kartu kredit. Informasi ini kemudian dapat digunakan untuk melakukan pencurian identitas atau penipuan online lainnya.
  7. Unauthorized Access (Akses Tanpa Izin): Deep links yang tidak terlindungi dengan baik dapat membuka akses ke fitur atau data sensitif dalam aplikasi tanpa otorisasi yang sesuai. Ini dapat mengakibatkan kebocoran data atau penggunaan yang tidak sah dari aplikasi tersebut.

Untuk prakteknya, saya akan menggunakan aplikasi AllSafe. untuk source nya kalian bisa download disini.

Buka file .apk menggunakan Jadx. Kemudian arahkan ke file AndroidManifest.xml

Pada langkah berikutnya, tekan Control + F untuk membuka search-box dan carilah “android:scheme”. Alasannya kita mencari “android:scheme” adalah bahwa setidaknya, tag <data> harus mencakup atribut android:scheme.

Terlihat pada gambar diatas, aplikasi memiliki dua skema yang berbeda (allsafe:// dan https://).

Understand the Code

Double click pada ‘infosecadventures.allsafe.challenges.DeepLinkTask.’
Navigate ke File Deep Link. Setelah memeriksa kode, terlihat jelas bahwa validasi data intent tergantung pada keberadaan parameter yang diberi label “key” dan perbandingan yang sesuai dengan nilai yang disimpan dalam strings.xml, yang juga diberi label “key.” Tujuan kita adalah memastikan bahwa kondisi “if” ini menghasilkan hasil yang benar. Oleh karena itu, sebelum memulai eksploitasi apa pun, langkah awal kita adalah untuk mendapatkan nilai “key“, yang secara mencolok disimpan dalam strings.xml.
Sekarang, navigasikan ke folder resource.arsc, di bawah res, dengan mengklik pada values dan buka file strings.xml. kemudian cari ‘key’
Dalam skema pertama, kita dapat melihat bahwa skema dari “allsafe”, Host-nya adalah “Infosecadventures,” dan PrefixPath-nya adalah “/congrats.”
Untuk link fullnya : allsafe://infosecadeventures/congrats?key=ebfb7ff0-b2f6–41c8-bef3–4fba17be410c
Dalam skema kedua, hanya satu atribut yang disebut skema, yang berarti tidak ada host atau path yang wajib untuk membuka deep link dalam aplikasi Allsafe.
Jadi untuk link fullnya : https://<any URL>?key=ebfb7ff0-b2f6–41c8-bef3–4fba17be410c

Exploitation

Kita bisa menggunakan adb (Android Debug Bridge) untuk mengeksploitasi kerentanan ini :

–  Buka terminal dan tuliskan perintah berikut.

adb shell am start -a "android.intent.action.VIEW" -d "allsafe://infosecadventures/congrats?key=ebfb7ff0-b2f6-41c8-bef3-4fba17be410c"
  • am start: Bagian dari perintah ini memanggil am (Activity Manager).
  • -a: Flag ini menentukan tindakan yang akan dilakukan saat memulai aktivitas. Dalam hal ini, diatur ke “android.intent.action.VIEW”.
  • -d: Flag ini digunakan untuk menentukan data yang terkait dengan intent. Ini diatur ke “allsafe://infosecadventures/congrats?key=ebfb7ff0-b2f6-41c8-bef3-4fba17be410c

–  setelah command dijalankan, terlihat bahwa exploit berhasil dieksekusi.

–  mengeksploitasi skema kedua,

https://<any URL>?key=ebfb7ff0-b2f6–41c8-bef3–4fba17be410c

–  disini saya ubah URL nya menjadi evil.com, untuk perintah fullnya menjadi seperti ini :

adb shell am start -a "android.intent.action.VIEW" -d https://facebook.com?key=ebfb7ff0-b2f6–41c8-bef3–4fba17be410c

Ada beberapa praktik yang bisa dilakukan untuk aplikasi agar terhindar dari resiko Deep Link Exploit ini diantaranya :

  1. Proper Validation dan Verification : Terapkan proses validasi yang tepat untuk mencegah peretasan tautan, gunakan mekanisme verifikasi seperti Asosiasi Tautan Aplikasi.
  2. Intent URLs : Pertimbangkan menggunakan Intent URLs untuk keamanan yang lebih baik daripada Scheme URLs atau App Links.
  3. Input Validation :  Pastikan validasi input yang tepat untuk mencegah akses komponen sembarangan dan penanganan parameter yang tidak aman.
  4. App-Specific Authentication : Pastikan deep links ditangani setelah otentikasi khusus aplikasi, untuk menghindari akses tanpa izin ke fitur sensitif.
  5. Encrypt and Protect Sensitive Data : Enkripsi data sensitif yang ditransmisikan melalui deep links dan gunakan protokol komunikasi yang aman.
  6. Test for Vulnerabilities : Lakukan pengujian keamanan secara teratur untuk mengidentifikasi kelemahan dalam implementasi deep link aplikasi Anda.
  7. Educate Users : Edukasikan pengguna tentang risiko deep links dan cara mengidentifikasi tautan yang sah untuk menghindari serangan.

Refferences :

Total
0
Shares
Leave a Reply

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

Previous Post

Security and Exploitation of Broadcast Receivers in Android

Next Post

Dumping Android Application Memory

Related Posts