Sebagian Fungsi Google OAuth Mengalami Gangguan
(trufflesecurity.com)- Pada layanan yang mengandalkan email claim Google OAuth untuk menentukan hak login, mantan karyawan dapat tetap mempertahankan akses ke aplikasi seperti Slack dan Zoom bahkan setelah dihapus dari organisasi Google perusahaan
- Akun Google dapat dibuat dengan email non-Gmail, dan dengan memanfaatkan alias serta penerusan alamat plus pada email perusahaan, akun Google yang tidak tergabung dalam organisasi dapat mengirim email claim dengan domain email perusahaan
- Akun non-Gmail ini tidak muncul di layar admin atau daftar pengguna organisasi Google perusahaan, tetapi banyak layanan mengizinkan login hanya dengan melihat domain di akhir email
- Organisasi dapat memitigasi dengan mematikan login Google dan menerapkan SAML secara ketat, tetapi sebagian layanan atau aplikasi internal mungkin tidak menyediakan opsi ini atau tidak mendukung SAML
- Laporan disampaikan ke Google pada 4 Agustus, imbalan $1337 dibayarkan pada 5 Oktober, dan kerentanan dipublikasikan 134 hari kemudian pada 16 Desember, tetapi hingga saat publikasi perubahan mitigasi dari Google belum diterapkan
Pengungkapan Kerentanan dan Linimasa
- Karena kerentanan Google OAuth, karyawan yang sudah di-offboarding dari perusahaan dan dihapus dari organisasi Google dapat mempertahankan akses ke aplikasi seperti Slack dan Zoom tanpa batas waktu
- Hingga saat publikasi, Google belum menerapkan perubahan untuk memitigasi risiko ini
- Linimasanya sebagai berikut
- 4 Agustus: Melaporkan ke Google dan menyampaikan kemungkinan ratusan aplikasi terdampak
- 7 Agustus: Isu ditriage
- 5 Oktober: Google membayar $1337 untuk isu ini
- 25 November: Melakukan pelaporan massal secara privat ke puluhan aplikasi terdampak, termasuk Zoom dan Slack
- 16 Desember: Dipublikasikan 134 hari setelah pemberitahuan kepada Google
Risiko Menggunakan email claim sebagai Identitas
- Login Forager milik Truffle Security sebelumnya pernah terdampak oleh kerentanan Microsoft OAuth dari Descope
- Saat itu terkonfirmasi bahwa Email claim yang tidak dibuat atau diverifikasi langsung oleh Microsoft dapat dikirim, dan email claim secara umum bukan identitas yang dapat dipercaya
- Dokumentasi OIDC Google juga memperingatkan agar tidak menggunakan Email sebagai identitas utama
- Claim
email_verifiedjuga diperlakukan sebagai titik yang menarik, tetapi cara membuat email claim dari email yang belum diverifikasi tidak ditemukan - Namun, contoh penyalahgunaan email claim itu sendiri sudah cukup terkonfirmasi
Akun Google Non-Gmail dan email claim Ganda
- Akun Google dapat dibuat dengan alamat email yang sudah ada meskipun bukan alamat Gmail
- Misalnya, akun Google dapat dibuat dengan alamat email Yahoo
- Akun ini dapat mengirim email claim dari email tersebut dalam kondisi email non-Gmail telah dikonfigurasi
- Salah satu alasan dokumentasi Google melarang penggunaan email sebagai identitas utama adalah karena dua akun Google yang berbeda dapat mengirim email claim yang sama
- Setelah mengubah email non-Gmail di pengaturan
- Jika akun baru dibuat dengan email sebelum perubahan, email claim yang sama dapat terjadi
Akun yang Tersisa di Luar Organisasi Google Perusahaan
- Celah utamanya adalah akun Google di luar organisasi dapat dibuat untuk email organisasi Google perusahaan dengan memanfaatkan alias email dan penerusan alamat plus
- Alamat plus pada email perusahaan dapat diteruskan ke kotak masuk pengguna asli
- Dengan alur ini, akun Google non-Gmail berbasis alamat plus yang menggunakan email organisasi Google perusahaan dapat dibuat, dan akun ini tidak dapat dihapus dari organisasi atau di-offboarding
- Banyak layanan mem-parsing email ini lalu menentukan apakah login diizinkan berdasarkan domain di bagian akhir
- Akun ini dapat digunakan untuk mendaftar ke Zoom
- Akun ini dapat digunakan untuk mendaftar ke Slack
- Karena akun Google non-Gmail seperti ini bukan anggota organisasi Google yang sebenarnya, akun tersebut tidak ditampilkan di pengaturan admin atau daftar pengguna Google
Mitigasi oleh Organisasi, Penyedia Layanan, dan Google
- Organisasi dapat memitigasi dengan menonaktifkan login Google dan mewajibkan SAML secara ketat
- Cara ini berfungsi di sebagian besar penyedia layanan
- Sebagian layanan tidak menyediakan opsi tersebut
- Aplikasi yang dikembangkan secara internal dapat terdampak tetapi mungkin tidak mendukung SAML
- Penyedia layanan dapat menggunakan HD claim Google OAuth
- HD claim mengirim domain organisasi Google yang terhubung dengan akun
- Akun yang bukan anggota organisasi Google tidak menyertakan HD claim
- Sebagian besar penyedia layanan yang diuji menggunakan email claim, bukan HD
- HD claim masih memiliki keterbatasan penting
- HD bukan identitas unik, melainkan sekadar domain
- Jika organisasi Google dihapus dan domainnya dibiarkan terlantar, orang lain dapat memperoleh domain tersebut dan membuat organisasi Google baru
- Contohnya, perusahaan A diakuisisi oleh perusahaan B, lalu B menghentikan layanan A dan tidak memperpanjang domain lama
- Jika seseorang di internet membeli domain perusahaan A, ia dapat login ke akun layanan lama milik perusahaan A
- Penyedia layanan dapat berhenti mengizinkan pembuatan akun JIT sebagai fitur umum dan beralih ke provisioning akun berbasis undangan saja atau grup LDAP
- Google dapat melakukan mitigasi luas dengan melarang akun Google yang dibuat menggunakan domain organisasi Google yang sudah ada
- Google secara internal melarang akun
google.com - Perlindungan yang sama dapat diperluas ke organisasi lain
- Google secara internal melarang akun
- Mitigasi lain di sisi Google mencakup pelarangan pendaftaran akun Google dengan alamat plus, pelarangan pendaftaran dengan alias email Google, serta penyediaan pengaturan admin yang lebih baik agar organisasi dapat mengonfigurasi pengaturan terkait
Dampak Tambahan: Email Dukungan dan Alur magic link
- Secara teknis, akses ke Zoom dan Slack milik organisasi mungkin dapat dilakukan meskipun tidak memiliki akses awal
- Alur ini memanfaatkan riset kerentanan yang ditemukan peneliti lain pada magic link sign-in flows
- Beberapa sistem dukungan dan tiket seperti Zendesk dapat membuat tiket dukungan melalui email
- Akun Google dapat dibuat dengan alamat email tiket dukungan
- Ada kemungkinan isi tiket dapat dilihat untuk menyelesaikan pembuatan akun
- Setelah itu, login OAuth dapat dicoba menggunakan alamat email dukungan tersebut
- Mempertahankan fitur email to support pada domain utama tidak aman, dan salah satu opsi adalah mengonfigurasi email dukungan Zendesk sebagai alamat email alternatif
Tujuan Pengungkapan dan Masalah yang Tersisa
- Masalah mantan karyawan yang tetap mempertahankan akses di platform seperti Slack dan Zoom berasal dari celah dalam sistem Google OAuth
- Google memiliki kemampuan untuk melakukan perbaikan berskala luas yang dapat memitigasi masalah ini
- Tujuan pengungkapan adalah mendorong perubahan nyata, bukan sekadar perubahan kecil pada dokumentasi
- Google men-triage isu ini dengan cepat, tetapi berbeda dari praktik perbaikan 90 hari miliknya, masalah ini dipublikasikan pada hari ke-134
1 komentar
Opini Hacker News
Saya bekerja di bidang ini, dan selama 3–4 tahun terakhir sudah menangani lebih dari 20 variasi kerentanan ini di berbagai penyedia login dan perusahaan SaaS. Tulisan blog itu benar, tetapi menurut saya masalah intinya sudah terlalu jauh untuk diperbaiki. Autentikasi terdelegasi di seluruh internet benar-benar berantakan, dan karena saya juga sudah banyak berbicara dengan engineer Google dan Microsoft, saya yakin mereka sudah mengetahui kelompok masalah ini. Hanya saja, jika perilaku yang ada sekarang diubah, terlalu banyak layanan lama dan implementasi login korporat yang sudah berusia puluhan tahun akan rusak
“Perbaikan” pada titik ini sederhana. Jika sebuah situs memakai “Sign in with XYZ”, jangan percaya alamat email yang dikirimkan oleh penyedia. Jangan memberi hak khusus hanya berdasarkan domain email, dan selalu kirim email verifikasi sendiri sebelum menandainya sebagai sudah terverifikasi di database. Para penyedia OAuth besar juga sudah memperbarui dokumentasi mereka agar menyatakan hal ini secara eksplisit, dan tulisan tersebut juga menyorotinya. Karena itu, fakta bahwa ada bounty justru mengejutkan
Terkait hal ini, lebih banyak penyedia layanan seharusnya berhenti memakai email sebagai identifier utama, seperti rekomendasi dokumentasi Google. Ketika mengganti username di Google Apps, saya menghabiskan banyak waktu menangani masalah di Slack, Datadog, GoLinks, dan lainnya
Arah yang benar di sini adalah menyediakan API yang sesuai dengan kebutuhan aplikasi yang akan menggunakannya dan meminimalkan tanggung jawab tambahan. Dalam kasus ini, menurut saya Google seharusnya mengatur
email_verifiedmenjadifalseagar aplikasi atau IdP turunan bisa tahu bahwa verifikasi tambahan diperlukanJika
user@domainsudah ditangani oleh server email Google sehingga aturan routing plus diterapkan, saya tidak mengerti mengapa akun Google baru bisa dibuat dengan email sepertiuser+suffix@domain. Bahkan tanpa penyalahgunaan pun, ini tampak sangat mudah menciptakan konfigurasi email yang membingungkana+b@domain.comdengan cara tertentu, tetapi server lain belum tentu begitu. Pada akhirnya keduanya adalah alamat email unik yang berbeda, dan di seluruh internet juga seharusnya diperlakukan begituuser+suffix@domain. Setidaknya+XYZmemang disebutkan dalam RFC email. Google melangkah lebih jauh dengan menetapkan bahwa titik di dalam nama juga dianggap sebagai email kanonik. Misalnyahi.my.name@google.comsama denganhimyname@google.com, dan semua email dirutekan ke yang terakhirMengenai bagian “Saya terkejut mengetahui bahwa Microsoft mengirim klaim email yang tidak dibuat atau diverifikasi oleh Microsoft, dan bahwa secara umum klaim email tidak dianggap dapat dipercaya”, meskipun mungkin itu memang maksud awalnya, saya melihat bahwa fakta OIDC bisa lebih fleksibel sangat berguna. Misalnya, saya menjalankan penyedia login gratis[0], yang memverifikasi identitas melalui OIDC upstream atau email langsung dengan penyedia identitas (IdP) pihak keempat, dan membuat sekat privasi antara aplikasi dan IdP tersebut. Artinya, Google tidak bisa melacak semua aplikasi tempat pengguna login
Bahwa Anda bisa membawa email sendiri ke Google berarti Anda bisa mendapatkan keamanan dan pengalaman pengguna Google OIDC bersama privasi email+kata sandi, tetapi dengan catatan besar bahwa kini Anda harus mempercayai LastLogin, bukan Google. Kami juga sedang mengerjakan protokol untuk mengurangi ketergantungan itu. Saya sama sekali tidak setuju dengan bagian “Dokumentasi Google sebenarnya memperingatkan agar tidak memakai email sebagai identifier”. Email adalah satu-satunya identitas federatif nyata yang benar-benar dipakai orang. Sampai alternatif yang lebih baik diterapkan secara luas, saya percaya alamat email harus diperlakukan sebagai identitas
[0]: https://lastlogin.io
Di luar dunia Barat, ponsel lebih umum daripada komputer dan UI-nya biasanya lebih mudah, jadi nomor telepon lebih mungkin menjadi identitas. Selain itu, dengan begitu Anda sepenuhnya menyerahkan identitas kepada penyedia email. Organisasi tanpa wajah seperti Google bisa, dan memang sering, memblokir akses tanpa pemberitahuan atau proses banding, sehingga Anda bisa kehilangan semuanya. Sebagai latar belakang, saya meluncurkan produk OAuth dan OIDC Okta, membuat kursus terkait di LinkedIn, dan sekarang melakukannya lagi di Pangea Cyber
Kita bisa menunggu selamanya, atau mulai membuat solusi
Saya pernah sedikit mencoba Portier dan Mozilla Persona dulu, tetapi pada akhirnya menangani masalah normalisasi email tampak seperti pertarungan yang pasti kalah atau terlalu sulit. Saya hampir menerima bahwa saya mungkin akan mati sebelum solusi yang bagus dirintis, lalu mengalihkan perhatian ke hal lain
Apakah ini benar-benar masalah Google OAuth, atau kegagalan banyak penyedia layanan untuk memverifikasi klaim pada token OAuth dengan benar sebelum mengizinkan akses? Sepertinya yang kedua
[1] https://developers.google.com/identity/openid-connect/openid...
user@domaindanuser+wildcard@domaintetap diverifikasi sebagai alamat email yang “dimiliki” pengguna, sehingga memberikan autentikasi dan identitas yang valid untuk alamat email tersebutMasalahnya ada di sisi situs organisasi Google. Admin tidak bisa mencabut kredensial untuk akun atau email yang tidak dapat mereka lihat. Bagian kuncinya adalah “akun Google non-Gmail ini sebenarnya bukan anggota organisasi Google, sehingga tidak muncul di pengaturan admin atau daftar pengguna Google”
Kalau mengikuti alur ini, seseorang bisa membuat akun Google dengan alamat email tiket dukungan, berpotensi membaca isi tiket untuk menyelesaikan pembuatan akun, lalu login OAuth ke berbagai layanan memakai alamat email dukungan itu. Ini bisa berdampak pada banyak perusahaan kecil
Kesimpulan terbesar dari sini adalah autentikasi web masih berupa kekacauan yang mengerikan
Spesifikasi OIDC mengatakan email tidak boleh dipakai sebagai identifier unik. Untuk nama pengguna aplikasi, Anda harus memakai field
issdansubAlasannya, pertama, jelas bahwa alamat email pengguna bisa digunakan ulang. Jika seorang kontraktor bekerja untuk Business A dan Business B, dan keduanya membuat akun pengguna orang itu di layanan autentikasi, dari sudut pandang platform SaaS, satu alamat email tidak bisa dipetakan ke satu pelanggan B2B. Kedua, alamat email berubah. Perusahaan diakuisisi, berganti nama, merger, dan nama orang juga berubah karena menikah, bercerai, atau pilihan pribadi. Mengimplementasikan SSO di startup awalnya benar-benar sulit. Sulit melakukannya dengan benar, dan sebelum memakainya Anda harus memahami konsep umum, OIDC, dan OAuth2 dengan baik. Auth0 punya buku yang bagus. Kalau Anda tidak memahami ini, besar kemungkinan Anda akan mengimplementasikan autentikasi password grant di sana-sini dan membuat aplikasi menjadi tidak aman
Seperti thumbnail kecil. Yang disebut OAuth2 sebenarnya tidak ada. OAuth2 hanyalah cara bagi perusahaan-perusahaan raksasa untuk mengimplementasikan sistem autentikasi mereka sendiri yang arbitrer dan tertutup. Ia bukan sistem autentikasi, melainkan kotak perkakas untuk membuat sistem autentikasi. Jadi OAuth2 tadinya akan menjadi standar, tetapi pada praktiknya kita berakhir di dunia tempat tiap perusahaan raksasa punya implementasi yang tidak saling kompatibel. Tentu orang-orang akan mengembangkan sesuai use case perusahaan raksasa, tetapi dengan begitu “standar” pada akhirnya menjadi semacam cara Google melakukannya
Dan masing-masing punya bug-bug kecil seperti ini. Kita harus kembali ke OAuth1. Itu benar-benar standar, bukan kotak perkakas untuk membuat standar
Kalau Anda merancang rangkaian dengan beberapa komponen PCB dan harus memasukkan resistor serta transistor sesuai kebutuhan tegangan/arus, bukankah semestinya kita berharap Anda membaca datasheet? Jika hanya menebak-nebak dari contoh sederhana lalu memaksakannya, dalam banyak kasus rangkaiannya mungkin bisa bekerja, dan dengan sedikit bench test serta probing mungkin bisa jalan. Tetapi efisiensinya bisa buruk, atau komponen bisa korsleting sehingga mean time to failure turun dan pelanggan tidak senang. Dalam skenario terburuk, baterai bisa terbakar dan menimbulkan kerusakan nyata. Lalu apakah kegagalan dini perangkat itu salah produsen modul PCB, atau tanggung jawab produsen perangkat yang seharusnya membaca datasheet? Saya tidak mengharapkan standar seketat itu untuk semua perangkat lunak, tetapi kalau berurusan dengan autentikasi dan otorisasi, menurut saya pemilik layanan harus teliti. Artikel aslinya juga mengatakan bahwa jika mengikuti dokumentasi, masalah ini tidak ada. Alphabet membayar bug bounty, jadi mereka mengakui adanya kelemahan; mereka juga bisa menyediakan kontrol bagi admin perusahaan untuk mengelola allow/deny list atas alias plus atau peran yang tidak ada, atau membatasi agar email terkait Apps tidak berpindah menjadi klaim di luar organisasi. Mungkin mereka sedang mengukur dampaknya atau menentukan prioritas pengukurannya, tetapi karena ini masalah klien yang menganggap klaim email lebih otoritatif dan permanen daripada kenyataannya, prioritasnya mungkin rendah. Definisi “bug” sangat bergantung pada bagaimana “perilaku yang diharapkan” didefinisikan dan siapa yang mengharapkannya, tetapi setidaknya menurut saya ini bukan penyimpangan dari perilaku yang disengaja, dan juga bukan sesuatu yang tak terduga bagi orang yang memahami dokumentasinya dengan benar
Apa yang saya lewatkan? Selain sistem dukungan/Zendesk dan metode domain lama yang terbengkalai yang disebutkan di artikel, saat membuat akun Google baru dengan
whatever@mydomain.com, saya diminta verifikasi. Jadi seberapa besar kemungkinan eksploitasi nyatanya?Misalnya Anda secara sah punya akun Google
egamirorrim@mydomain.com. Anda bisa membuat akun Google baru dengan alamat email terverifikasi memakai alias sepertiegamirorrim+woopsie@mydomain.com, dan saat “Login dengan Google”, Google akan mengirim klaim emailegamirorrim+woopsie@mydomain.com. Setelah itu, jika Anda dipecat darimydomain.com, akun yang terhubung keegamirorrim@mydomain.comyang sebenarnya tidak bisa lagi dipakai login karena admin telah menonaktifkannya. Namun akun Google baruegamirorrim+woopsie@mydomain.comtidak terhubung ke organisasi, sehingga tetap bisa login. Hanya saja menurut saya ini menjadi masalah hanya ketika penyedia melakukan otorisasi hanya berdasarkan klaim email. Saya pernah memakai OIDC, dan Anda tidak boleh memberi hak akses ke resource dengan mem-parse teks klaim alamat email. Saya paham mengapa penulis merasa ini berlawanan dengan intuisi, tetapi artikelnya sendiri juga menulis bahwa dokumentasi memperingatkan agar tidak melakukan ini. Di artikel asli tertulis “sebagian besar penyedia layanan yang saya uji tidak memakai HD dan memakai klaim email”; baik, tetapi “memakai” itu untuk apa? Apakah trik ini benar-benar bekerja pada layanan nyata di dunia sebenarnya? Jika ya, seharusnya namanya dipublikasikan agar mendapat kritik. Bahkan jika nilai ini keliru diasumsikan unik dan tidak berubah, itu saja belum tentu memberikan hak akses apa pun