- Salt Labs menemukan bahwa melalui kelemahan dalam implementasi OAuth, pengambilalihan akun dimungkinkan pada layanan raksasa yang digunakan ratusan juta orang seperti Booking.com, Grammarly, Vidio, Bukalapak, serta framework mobile Expo.
- OAuth pada dasarnya adalah protokol yang aman, tetapi ini menunjukkan bahwa cara implementasinya dapat menimbulkan kerentanan yang fatal.
- Booking.com
- Dalam implementasi Facebook OAuth, ada masalah yang memungkinkan
redirect_uri diubah ke path lain pada host yang sama.
- Di dalam booking.com terdapat endpoint yang akan melakukan redirect ke alamat yang diberikan jika disuplai alamat dalam bentuk base64.
- Dengan menggabungkan keduanya, token OAuth dapat dimanipulasi agar diarahkan ke alamat lain.
- Pada versi web, tidak ada kerentanan karena
redirect_uri divalidasi saat memproses login, tetapi pada versi mobile terdapat masalah yang memungkinkan redirect_uri juga dimanipulasi sehingga pengambilalihan akun menjadi mungkin.
- Artinya, ini adalah kerentanan di mana pengguna cukup mengklik tautan yang tampak sangat sah dan menjalankan alur OAuth secara normal, lalu akunnya bisa diambil alih.
- Expo
- Kerentanan yang ditemukan pada implementasi OAuth bawaan Expo, framework mobile.
- Dalam implementasi tersebut,
returnUrl seharusnya berisi tautan khusus aplikasi Expo seperti exp://~~, tetapi ada masalah yang memungkinkan alamat web seperti hTTps://~~ dimasukkan.
- Input
https:// memang diblokir, tetapi dapat dilewati hanya dengan mengubah huruf besar-kecil.
- Akibatnya, informasi
returnUrl disimpan dalam cookie bernama RU, dan setelah OAuth selesai, server OAuth Expo membaca cookie tersebut lalu melakukan redirect.
- Namun, sebelum berpindah dari Expo ke Facebook, muncul pesan peringatan bertuliskan
...mempercayai https://~~ ... dan pengguna harus menyetujuinya.
- Untuk melewati ini, digunakan metode membuka 2 tautan secara otomatis.
- Tautan pertama dibuka lalu segera ditutup agar hanya cookie RU yang tersetel.
- Tautan kedua langsung memberikan tautan Facebook OAuth sehingga pesan peringatan RU diabaikan.
- Dengan metode ini, mereka berhasil mengambil alih akun di Codecademy.com.
- Kerentanan ini diberi CVE-2023-28131, dan tim Expo memperbaiki masalah ini hanya dalam beberapa jam setelah laporan awal.
- Grammarly, Vidio, Bukalapak
- Ketiga situs tersebut semuanya dapat diambil alih akunnya dengan cara yang sama.
- Pertama, dibuat situs web sah untuk mengumpulkan token login Facebook.
- Setelah itu, pada Vidio dan Bukalapak, jika diberikan token dari Facebook (yang dibuat untuk situs web lain), login tetap berhasil.
- Ini adalah kerentanan yang terjadi karena App ID dari token Facebook tidak diperiksa. (serangan reuse token)
- Grammarly sedikit berbeda karena menggunakan code, bukan token, sehingga tidak memiliki kerentanan di atas.
- Namun, ditemukan bahwa jika token dikirim ke API pengiriman code dengan nama
"access_token" alih-alih "code", login tetap berhasil.
- Karena itu, pada ketiga situs tersebut, jika pengguna melakukan integrasi Facebook di situs sah lain, akunnya dapat langsung diambil alih.
- Saat mengimplementasikan OAuth, perlu memeriksa bagian-bagian yang dapat menimbulkan kerentanan keamanan dan melakukan validasi yang teliti di seluruh proses untuk mencegah kerentanan.
3 komentar
Ini cukup bikin waspada. Benar-benar harus hati-hati.
Ternyata cukup banyak situs besar yang memiliki kerentanan seperti ini.
Ini jelas terasa seperti fitur yang harus ditangani dengan sangat hati-hati.
Saya juga sempat berpikir, mungkin sebaiknya memakai library autentikasi...,
tetapi melihat kasus Expo, rasanya itu pun tetap perlu diverifikasi sendiri.