- Masalah pada Boosts Arc dan aturan Firestore saling berkaitan, sehingga penyerang dapat menautkan Boost berisi JavaScript arbitrer ke akun korban
- Penggunaan Firebase Authentication dan Firestore dikonfirmasi melalui hooking Frida, yang mengungkap alur akses ke koleksi
preferences,users,user_referrals, danboosts - Kerentanan muncul karena target penerapan Boost ditentukan berdasarkan
creatorID, sementara penyerang dapat mengubahcreatorIDpada dokumen Boost miliknya menjadi ID pengguna lain - ID korban dapat diperoleh dari
user_referrals,boostSnapshotspada Boost publik, dan Easels yang dibagikan, lalu Boost berbahaya dapat dijalankan saat korban mengunjungi situs target - The Browser Company memberikan hadiah $2,000 bersama patch, dan setelah penetapan CVE-2024-45489 berencana mengurangi penggunaan Firebase, melakukan audit keamanan, serta menjalankan program bug bounty
Fitur cloud Arc dan penggunaan Firestore
- Arc memerlukan akun untuk digunakan, dan terkonfirmasi memakai Firebase Authentication dalam proses pendaftaran
- Pada pengamatan jaringan awal tidak terlihat permintaan lain, tetapi saat meneliti fitur berbagi Easels muncul indikasi penggunaan Firestore
- Easels adalah antarmuka bergaya papan tulis yang dapat dilihat di web ketika dibagikan ke orang lain
- Firestore adalah layanan database-as-a-backend yang memungkinkan pembuatan fitur tanpa backend terpisah, lewat aturan keamanan database dan akses langsung dari klien
- Sebagai contoh lama aturan keamanan Firestore yang lemah, artikel ini merujuk ke Firewreck
Cara memverifikasi panggilan Firebase
- Karena Swift SDK Firebase cenderung tidak mengikuti pengaturan proksi sistem, panggilan terkait dibuang dengan skrip Frida alih-alih mitmproxy
- Skrip tersebut melakukan hooking pada panggilan Firestore di kelas Objective-C
FIRCollectionReference["- documentWithPath:"]FIRQuery["- queryWhereField:isEqualTo:"]FIRFirestore["- collectionWithPath:"]- metode eksekusi seperti
getDocuments,addSnapshotListener:,getDocument - metode penulisan dokumen keluarga
updateData,setData
- Saat Arc berjalan, jenis path dan kueri Firestore berikut teramati
preferences/{userID}preferences/{userID}/stringValues/...users/{userID}- kueri
inviter_id == {userID}diuser_referrals - kueri
creatorID == {userID}diboosts
- Dalam struktur ini, Arc menyimpan sebagian pengaturan, objek pengguna dasar, informasi referral, dan Boosts di Firestore
Mengapa Boosts menjadi jalur serangan
- Arc Boosts adalah fitur untuk mengustomisasi situs web
- memblokir elemen
- mengubah font
- mengubah warna
- CSS kustom
- JavaScript kustom
- Boosts disimpan di Firestore, dan browser Arc menentukan Boost mana yang harus diterapkan dengan melakukan kueri berdasarkan field
creatorID - Penyerang membuat Boost untuk Google.com di akunnya sendiri lalu menguji dengan mengubah sebagian parameter dokumen Firestore
- Karena kueri berdasarkan
creatorID, Boost milik pengguna lain tidak bisa diambil langsung, tetapi penyerang dapat mengubahcreatorIDpada dokumen Boost miliknya sendiri menjadi ID pengguna akun lain - Saat diuji dengan akun lain, Boost buatan penyerang diterapkan di komputer korban ketika mengakses Google.com
Rantai serangan dan memperoleh ID pengguna
- Alur serangan akhirnya adalah sebagai berikut
- memperoleh ID pengguna korban
- membuat Boost berbahaya berisi payload yang diinginkan di akun penyerang
- mengubah field
creatorIDpada dokumen Boost menjadi ID korban - saat korban mengunjungi situs web target, Boost berbahaya dijalankan
- Kerentanan ini terjadi karena Arc Boosts dapat memuat JavaScript arbitrer, disimpan di Firestore, dan target penerapannya ditentukan oleh field
creatorID - Ada beberapa jalur untuk mendapatkan ID pengguna korban
user_referrals: bila seseorang mengundang atau direferensikan ke Arc, ID pengguna pihak lain bisa diperoleh dari tabeluser_referrals- Boost publik: Boost tanpa JavaScript dapat dibagikan, dan
boostSnapshotsdi situs publik Arc Boosts memuat ID pengguna pembuatnya - Easels: ID pengguna juga bisa didapat lewat fitur papan tulis yang dapat dibagikan ini
Patch dan jadwal pengungkapan
- The Browser Company biasanya tidak menjalankan bug bounty, tetapi untuk kerentanan ini membayar $2,000 USD
- Linimasa kerentanan adalah sebagai berikut
- 25 Agustus 5:48pm: kontak pertama melalui Signal dengan Hursh, salah satu pendiri Arc
- 25 Agustus 6:02pm: PoC kerentanan dijalankan pada akun Arc milik Hursh
- 25 Agustus 6:13pm: detail dibagikan dalam format terenkripsi lalu ditambahkan ke kanal Slack
- 26 Agustus 9:41pm: kerentanan ditambal dan hadiah dibayarkan
- 6 September 7:49pm: CVE-2024-45489 ditetapkan
- Setelah itu Arc memublikasikan tulisan mereka sendiri tentang masalah ini, CVE-2024-45489 incident response
Eksekusi pada halaman berprivileg dan benturan dengan privasi
- Meski Boosts tidak dapat dibuat dari klien, Boosts tetap bisa dijalankan pada protokol lain
- Jika Boost dibuat untuk halaman
settings, ia dapat berjalan dichrome://settingsdan berujung pada eskalasi hak akses - Saat mengunjungi situs, kueri Firestore berikut terjadi
- melakukan kueri ke koleksi
boostsdengan kondisicreatorID == {userID}danhostPattern == "www.google.com"
- melakukan kueri ke koleksi
- Di sini
hostPatternberarti situs yang dikunjungi, yang bertentangan dengan kebijakan privasi Arc yang menyatakan bahwa Arc tidak mengetahui situs apa yang dikunjungi pengguna
Tindak lanjut Arc
- Arc, dengan mempertimbangkan kerentanan ini dan pengenalan fitur baru, beralih ke arah meninggalkan Firebase
- Ringkasan internal Arc mencakup langkah-langkah berikut
- verifikasi perbaikan masalah
- menambahkan fitur untuk menonaktifkan Boosts dari sisi klien
- audit internal atas aturan ACL Firebase saat ini
- menyusun protokol penanganan isu keamanan
- Langkah tambahan yang dibagikan dalam diskusi internal Arc adalah sebagai berikut
- memperbaiki masalah privasi pada pembaruan v1.61.1
- menghentikan penggunaan Firebase pada fitur dan produk baru
- audit keamanan eksternal untuk versi tersebut
- memulai program bug bounty untuk kerentanan di masa mendatang
1 komentar
Pendapat di Hacker News
Saya Hursh, salah satu pendiri sekaligus CTO The Browser Company yang membuat Arc. Tidak ada pengguna yang benar-benar terdampak dan kami langsung menambalnya, tetapi menurut saya tingkat keparahan potensial dari kerentanan ini sulit diterima
Detail teknis, rencana perbaikan ke depan, rencana untuk beralih dari Firebase, serta menyiapkan program bug bounty resmi telah kami rangkum di sini: https://arc.net/blog/CVE-2024-45489-incident-response
Kami benar-benar minta maaf, baik atas kerentanan itu sendiri maupun komunikasi yang terlambat. Masukan kalian—termasuk kekecewaan, kemarahan, dan dukungan—membuat kami merasa bertanggung jawab untuk menjadi lebih baik
Seluruh responsnya terlihat seperti baru bereaksi setelah masalahnya cukup ramai
Saya tidak ingin memakai browser buatan perusahaan yang memandang keamanan pengguna seringan ini. Saya tidak yakin, tetapi untuk tingkat keparahan seperti ini, kemungkinan besar nilainya jauh lebih mahal di pasar gelap
Kerentanan bisa saja terjadi, tetapi mengirim data penjelajahan tampak seperti pilihan desain yang disengaja
Menurut saya ini perkara yang seharusnya membuat CTO mengundurkan diri
Mereka pada dasarnya mendapat kesempatan emas untuk mengambil arah yang benar
Banyak komentar di sini menyalahkan Firebase, tetapi kelihatannya mereka hanya mengulang hal yang sebenarnya tidak terlalu mereka pahami. Saya tidak memakai Firebase, tetapi dari pengalaman pernah memakainya dulu, ini bukan kasus pinggiran dan bukan masalah yang sulit diselesaikan, melainkan hal yang paling mendasar
Masalah sebenarnya adalah API dibuat untuk mempercayai nilai yang dikirim klien untuk memberi tahu “siapa saya”. Pada akhirnya ini kesalahan amatir, dan kemungkinan besar bisa diperbaiki dengan perubahan satu baris. Dari dokumentasinya saja, di https://firebase.google.com/docs/rules/rules-and-auth#cloud-...,
request.authmemberikan ID pengguna yang diperlukan (request.auth.uid)Aturan keamanan harus ditangani dengan serius, dan pada dasarnya merupakan satu-satunya garis pertahanan
Entah membuat autentikasi sendiri atau tidak, intinya satu: jangan pernah percaya klien
matchdifirestore.rules. Ini persis materi yang muncul di dokumentasi tingkat pengantar keamanan Firebase FirestoreSaya sangat menyukai kucing pixel art kecil yang berlari ke tempat yang diklik. Itu adalah fitur kecil yang seru dan unik, yang sekarang jarang terlihat, dan terasa seperti pengingat bahwa internet juga bisa menjadi ruang menyenangkan seperti itu jika kita menginginkannya
prefers-reduced-motionsehingga tidak menampilkannya jika pengaturan itu aktif. Penanganan yang bagus: memberi kesenangan bagi yang menginginkannya dan mencegah gangguan bagi yang tidak sukahttps://en.wikipedia.org/wiki/Neko_(software)
sudo apt install onekooneko &Cocok sebagai hadiah di komputer rekan kerja yang sedang meninggalkan mejanya
Menurut tulisan ini, Arc mewajibkan akun, dan mengirim nama host dari setiap halaman yang dikunjungi beserta ID pengguna ke Google Firebase. Kalau begitu, bukankah Arc bisa dibilang menjadi browser dengan privasi paling lemah di antara browser yang dipakai saat ini?
Bug yang benar-benar keren. Aturan keamanan layanan backend seperti Firebase punya default aneh yang sulit dijelaskan. Kalau membuat API sendiri,
userIdpada record sepertiboostdalam kasus ini tidak akan diterima dari payload request, melainkan disetel ke ID pengguna dari sesiDeveloper pada level tertentu biasanya bahkan tidak terpikir untuk membuat rute API terlindungi yang membiarkan klien mengirim nilai yang diklaim sebagai
userIdmiliknya sendiri. Sebaliknya, dalam aturan keamanan, kita harus membayangkan semua cara sistem bisa disalahgunakan, terlepas dari cara penggunaan yang benar-benar diprogramSolusi yang benar mungkin adalah memberi izin deny by default untuk semua field. Dengan begitu, setidaknya field pemilik harus secara eksplisit dibuat bisa ditulis, dan kita juga akan memikirkan dampak memindahkan objek ini ke pengguna lain
Saya terkejut betapa konyol dan bodohnya kerentanan ini. Untuk melakukan eksekusi kode arbitrer, secara harfiah cukup mengirim ID pengguna orang lain, dan ID itu juga cukup mudah didapat
Saya bukan bekerja di FAANG, dan saya bekerja di perusahaan yang membuat produk buruk yang sebenarnya tidak diperlukan, tetapi bahkan saya tidak akan membuat bug seperti ini. Lalu orang-orang ini mau membuat browser, sekaligus menanggung keahlian keamanan dan tanggung jawab moral yang menyertainya?
Akan lebih baik jika judul postingan memasukkan Arc, supaya orang yang memakai Arc atau punya kenalan pengguna Arc bisa lebih mudah mengenalinya
Jujur saja, saya sangat merasa judulnya seharusnya seperti “Bug fundamental pada browser Arc (CVE 123-4567)”
Di dunia ini ada banyak kerentanan keamanan serius yang dibuat dengan alasan yang masih bisa dipahami, dan bisa dimaafkan jika ditangani serta diperbaiki secara bertanggung jawab
Namun ini bukan kasus seperti itu. Secara pribadi, ini menunjukkan ketidakmampuan yang cukup untuk merusak reputasi, sampai membuat saya memutuskan tidak akan pernah memakai Arc lagi
aug 25 5:48pm: Kontak awal dengan Hursh, salah satu pendiri Arc, melalui kanal terenkripsi Signalaug 25 6:02pm: Proof of concept kerentanan dijalankan pada akun Arc milik Hurshaug 25 6:13pm: Detail diungkap dalam bentuk terenkripsi lalu ditambahkan ke kanal Slackaug 26 9:41pm: Kerentanan ditambal, bounty dibayarkansep 6 7:49pm: CVE diberikan (CVE-2024-45489)Empat jam dari kontak awal yang mendadak sampai perbaikan dirilis itu cukup bagus, meski mempertimbangkan kemungkinan perbaikannya sederhana. Koreksi: karena tanggalnya berganti, sebenarnya 28 jam. Tetap lumayan, dan respons “masuklah ke kanal Slack kami” hanya 30 menit setelah kontak awal itu sangat cepat
Untuk produk sepenting dan sepersonal browser, mendapatkan dana tunai 50–60 juta dolar dan valuasi 500 juta dolar tetapi tidak punya model bisnis adalah tanda bahaya besar. Ini bukan kegiatan amal, jadi seseorang pada akhirnya akan membayar biayanya dengan satu cara atau lainnya
Sayang juga Firebase tidak bisa membuat ini lebih idiot-proof. Dan sungguh hanya $2,500? Secara harfiah semua pengguna Arc bisa diambil alih; kalau NSA, mereka pasti menambahkan beberapa nol lagi
Apalagi pesaing fungsional seperti Supabase membungkus DBMS umum dan model autentikasi
Terima kasih sudah membagikan. Saya sudah memakai Arc sejak minggu pertama beta
Namun fakta bahwa bug dan perbaikannya tidak disebutkan di mana pun di media sosial cukup mengkhawatirkan. Saya menikmati waktu memakai Arc, tetapi melihat cara penanganan seperti ini, rasanya saya tidak bisa terus menggunakannya
$2,000 untuk kerentanan sebesar ini adalah jumlah yang menghina
Mungkin karena mereka tidak dihukum regulator atas insiden pelanggaran