- Arc tarayıcısındaki Boosts özelliği ile Firestore kuralları sorunu birleşince, saldırganın kurban hesabına rastgele JavaScript içeren bir Boost bağlayabilmesi mümkün oldu
- Firebase kimlik doğrulaması ve Firestore kullanımı Frida hooking ile doğrulandı;
preferences,users,user_referrals,boostskoleksiyonlarına erişim akışı ortaya çıkarıldı - Açık, Boost uygulanacak hedefin
creatorIDile belirlenmesine rağmen saldırganın kendi Boost belgesindekicreatorIDdeğerini başka bir kullanıcının kimliğiyle değiştirebilmesinden kaynaklandı - Kurban kimliği
user_referrals, herkese açık Boost'larınboostSnapshotsverileri, paylaşılan Easels gibi kaynaklardan elde edilebiliyordu; kurban hedef siteyi ziyaret ettiğinde kötü amaçlı Boost çalışabiliyordu - The Browser Company, yama ile birlikte $2,000 ödül verdi ve CVE-2024-45489 atandıktan sonra Firebase kullanımını azaltma, güvenlik denetimi ve bug bounty programı başlatma planlarını duyurdu
Arc'ın bulut özellikleri ve Firestore kullanımı
- Arc, kullanım için bir hesap gerektiriyordu ve kayıt sürecinde Firebase kimlik doğrulamasının kullanıldığı doğrulandı
- İlk ağ gözlemlerinde başka istekler görünmese de, Easels paylaşım özelliği incelenirken Firestore kullanım ihtimali ortaya çıktı
- Easels, başkalarıyla paylaşıldığında web üzerinden görüntülenebilen beyaz tahta benzeri bir arayüzdür
- Firestore, ayrı bir backend olmadan veritabanı güvenlik kuralları ve istemcinin doğrudan erişimiyle özellikler geliştirmeyi sağlayan bir database-as-a-backend hizmetidir
- Firestore güvenlik kurallarının zayıf olduğu önceki bir örnek olarak Firewreck gösteriliyor
Firebase çağrılarının nasıl doğrulandığı
- Firebase'in Swift SDK'sı sistem proxy ayarlarını izlememe eğiliminde olduğundan, mitmproxy yerine ilgili çağrıları dökmek için Frida script'i kullanıldı
- Script, Objective-C sınıflarındaki Firestore çağrılarını hook'luyordu
FIRCollectionReference["- documentWithPath:"]FIRQuery["- queryWhereField:isEqualTo:"]FIRFirestore["- collectionWithPath:"]getDocuments,addSnapshotListener:,getDocumentgibi yürütme metotlarıupdateData,setDataailesindeki belge yazma metotları
- Arc çalışırken aşağıdaki türlerde Firestore yolları ve sorguları gözlemlendi
preferences/{userID}preferences/{userID}/stringValues/...users/{userID}user_referralsiçindeinviter_id == {userID}sorgusuboostsiçindecreatorID == {userID}sorgusu
- Bu yapıda Arc, bazı ortam ayarlarını, temel kullanıcı nesnesini, yönlendirme bilgilerini ve Boosts verilerini Firestore'da saklıyordu
Boosts'un saldırı yolu haline gelmesinin nedeni
- Arc Boosts, kullanıcıların web sitelerini özelleştirmesini sağlayan bir özelliktir
- öğe engelleme
- yazı tipi değiştirme
- renk değiştirme
- özel CSS
- özel JavaScript
- Boosts, Firestore'da saklanıyordu ve Arc tarayıcısı hangi Boost'un uygulanacağını
creatorIDalanına göre sorguluyordu - Saldırgan, kendi hesabında Google.com için bir Boost oluşturduktan sonra Firestore belgesindeki bazı parametreleri değiştirerek test yaptı
creatorIDtemelli sorgu nedeniyle başka kullanıcıların Boost'ları doğrudan sorgulanamıyordu; ancak kendi Boost belgesindekicreatorIDalanını başka bir hesabın kullanıcı kimliğiyle değiştirmek mümkündü- Başka bir hesapla yapılan testte, kurbanın bilgisayarında Google.com açıldığında saldırganın oluşturduğu Boost'un uygulandığı görüldü
Saldırı zinciri ve kullanıcı kimliğinin elde edilmesi
- Nihai saldırı akışı şu şekildeydi
- kurbanın kullanıcı kimliği elde edilir
- saldırgan hesabında istenen payload'u içeren kötü amaçlı bir Boost oluşturulur
- Boost belgesindeki
creatorIDalanı kurbanın kimliğiyle değiştirilir - kurban hedef web sitesini ziyaret ettiğinde kötü amaçlı Boost çalışır
- Bu açık; Arc Boosts'un rastgele JavaScript içerebilmesi, Firestore'da saklanması ve uygulanacak hedefin
creatorIDalanıyla belirlenmesi nedeniyle mümkün oldu - Kurbanın kullanıcı kimliğini elde etmenin birden fazla yolu vardı
user_referrals: Birine Arc daveti gönderildiğinde veya birinden davet alındığındauser_referralstablosundan karşı tarafın kullanıcı kimliği alınabiliyordu- herkese açık Boosts: JavaScript içermeyen Boost'lar paylaşılabiliyordu ve Arc Boosts herkese açık sitesi içindeki
boostSnapshotsverileri oluşturucunun kullanıcı kimliğini içeriyordu - Easels: Paylaşılabilir beyaz tahta özelliği üzerinden de kullanıcı kimliği elde edilebiliyordu
Yama ve açıklama takvimi
- The Browser Company normalde bug bounty uygulamasa da bu açık için $2,000 USD ödedi
- Açığın zaman çizelgesi şöyleydi
- 25 Ağustos 5:48pm: Arc kurucu ortağı Hursh ile Signal üzerinden ilk temas
- 25 Ağustos 6:02pm: Hursh'un Arc hesabında açığın PoC'si çalıştırıldı
- 25 Ağustos 6:13pm: Ayrıntılar şifreli biçimde paylaşıldıktan sonra Slack kanalına eklendi
- 26 Ağustos 9:41pm: Açık yamandı ve ödül ödendi
- 6 Eylül 7:49pm: CVE-2024-45489 atandı
- Ardından Arc, konuyla ilgili kendi yazısını CVE-2024-45489 incident response başlığıyla yayımladı
Yetkili sayfalarda çalıştırma ve gizlilik çelişkisi
- Boosts, istemci içinde oluşturulamasa bile başka protokollerde çalıştırılabiliyordu
settingssayfasını hedefleyen bir Boost oluşturulursachrome://settingsüzerinde çalışabiliyor ve bu da yetki yükseltmeye yol açabiliyordu- Bir site ziyaret edildiğinde şu Firestore sorgusu gerçekleşiyordu
boostskoleksiyonundacreatorID == {userID}vehostPattern == "www.google.com"koşullarıyla sorgu yapılıyordu
- Burada
hostPatternziyaret edilen siteyi ifade ediyor; bu da Arc'ın hangi sitelerin ziyaret edildiğini bilmediğini söyleyen Arc gizlilik politikası ile çelişiyor
Arc'ın sonraki adımları
- Arc, bu açık ve yeni özelliklerin devreye alınmasıyla birlikte Firebase'den uzaklaşma yönünde bir geçiş başlattı
- Arc'ın kendi özetinde şu adımlar yer aldı
- sorunun düzeltildiğinin doğrulanması
- istemci tarafında Boosts'u devre dışı bırakma özelliğinin eklenmesi
- mevcut Firebase ACL kuralları için iç denetim
- güvenlik sorunlarına müdahale protokolünün oluşturulması
- Arc içi tartışmalarda paylaşılan ek adımlar ise şunlardı
- v1.61.1 güncellemesinde gizlilik sorununun düzeltilmesi
- yeni özellik ve ürünlerde Firebase kullanımının bırakılması
- ilgili sürüm için harici güvenlik denetimi
- gelecekteki açıklar için bir bug bounty programının başlatılması
1 yorum
Hacker News yorumları
Arc’ı geliştiren The Browser Company’nin kurucu ortağı ve CTO’su Hursh ben. Gerçekten etkilenen kullanıcı olmadı ve hemen yama yaptık, ancak bu açığın potansiyel ciddiyetinin kabul edilemez olduğunu düşünüyorum.
Teknik ayrıntıları, bundan sonra yapacağımız iyileştirme planlarını, Firebase’den uzaklaşmayı ve resmi bir bug bounty programı oluşturmayı burada özetledik: https://arc.net/blog/CVE-2024-45489-incident-response
Hem açığın kendisi hem de geciken iletişim için gerçekten özür dilerim; hayal kırıklığı, öfke ve destek dâhil geri bildirimleriniz sayesinde daha iyisini yapmak için sorumluluk hissediyoruz.
Tüm müdahale, ancak yeterince gürültü kopunca tepki verme şeklinde görünüyor.
Kullanıcı güvenliğini bu kadar hafife alan bir şirketin yaptığı tarayıcıyı kullanmak istemem. Emin değilim ama bu ciddiyette bir açığın karaborsada çok daha pahalıya satılmış olma ihtimali yüksek.
Güvenlik açıkları ortaya çıkabilir, ama gezinme verilerini göndermek kasıtlı bir tasarım tercihi gibi görünüyor.
CTO’nun istifa etmesi gereken bir konu olduğunu düşünüyorum.
Doğru yöne dönmek için elinize mükemmel bir fırsat geçmiş durumda.
Buradaki yorumlarda Firebase çok suçlanıyor, ama insanlar aslında pek bilmedikleri bir şeyi tekrar ediyor gibi görünüyor. Firebase kullanmıyorum ama geçmişte kullanmış biri olarak bu ne uç bir durum ne de çözmesi zor bir sorun; en temel konulardan biri.
Asıl sorun, API’nin istemcinin “ben kimim” diye bildirdiği değere güvenecek şekilde yapılmış olması. Sonuçta amatörce bir hata ve muhtemelen tek satırlık bir değişiklikle düzeltilebilirdi. Sadece dokümantasyona bakınca bile https://firebase.google.com/docs/rules/rules-and-auth#cloud-... içinde
request.authgerekli kullanıcı ID’sini (request.auth.uid) veriyor.Güvenlik kuralları ciddiye alınmalı; fiilen tek savunma hattı onlar.
Kimlik doğrulamayı kendiniz yapsanız da yapmasanız da temel nokta tek: istemciye asla güvenmeyin.
firestore.rulesiçindekimatchifadesine aşağıdaki kuralları koymaktan ibaretti. Firebase Firestore güvenliğine giriş düzeyindeki dokümanlarda aynen çıkan şey.Tıklanan yere koşup gelen küçük piksel art kediyi gerçekten sevdim. Bugünlerde pek sık görülmeyen eğlenceli ve yaratıcı küçük bir dokunuştu; istersek internetin böyle keyifli bir yer olabileceğini hatırlatan bir şey gibiydi.
prefers-reduced-motionayarına saygı gösterip bu ayar açıksa göstermiyor gibi. İsteyene keyif veren, istemeyene de rahatsızlık çıkarmayan harika bir yaklaşım.https://en.wikipedia.org/wiki/Neko_(software)
sudo apt install onekooneko &Yerinde olmayan bir iş arkadaşının bilgisayarına hediye etmek için iyi olur.
Bu yazıya göre Arc’ta hesap zorunlu ve ziyaret edilen her sayfanın ana makine adını ve kullanıcı ID’sini Google Firebase’e gönderiyor. Öyleyse Arc, şu anda kullanılan tarayıcılar arasında gizliliği en zayıf tarayıcı olmuyor mu diye düşünüyorum
Gerçekten harika bir bug. Firebase gibi backend servislerinin güvenlik kurallarında açıklaması zor, tuhaf varsayılanlar var. Kendi API’mi yazsaydım, bu örnekteki
boostgibi bir kaydınuserIddeğerini istek payload’ından almaz, oturumdaki kullanıcı ID’si olarak ayarlardımBelli bir seviyenin üzerindeki geliştiriciler, korumalı bir API yoluna istemcinin kendi
userId’si olduğunu iddia ettiği bir değeri geçirmeyi zaten pek düşünmez. Buna karşılık güvenlik kurallarında, sistemin gerçekten programlandığı kullanım biçiminden bağımsız olarak, kötüye kullanılabileceği her yolu hayal etmek gerekiyorDoğru çözüm muhtemelen tüm alanlar için varsayılan reddetme yetkisi koymak. Böylece en azından sahip alanını yazılabilir olarak açıkça belirtmeniz gerekir ve bu nesneyi başka bir kullanıcıya devretmenin etkilerini de düşünürsünüz
Bu açığın ne kadar akıl almaz derecede aptalca olduğuna şaşırıyorum. Rastgele kod çalıştırmak için kelimenin tam anlamıyla başka birinin kullanıcı ID’sini göndermek yeterli; o ID’yi elde etmek de epey kolay
FAANG’de çalışmıyorum; gerçekten ihtiyaç duyulmayan, berbat bir ürün yapan bir şirkette çalışıyorum ama ben bile böyle bir bug yapmazdım. Bu insanların tarayıcı yapmaya kalkıp bunun gerektirdiği güvenlik uzmanlığını ve ahlaki sorumluluğu da üstleneceklerini düşünmek zor
Arc kullananların ya da Arc kullanan tanıdığı olanların daha kolay fark etmesi için gönderi başlığında Arc geçse iyi olurdu
Açıkçası başlığın “Arc tarayıcısında temel bug (CVE 123-4567)” gibi bir şey olması gerektiğini güçlü biçimde düşünüyorum
Dünyada anlaşılabilir nedenlerle ortaya çıkmış pek çok ciddi güvenlik açığı var; sorumlu biçimde ele alınıp düzeltilirse affedilebilir
Ama bu onlardan biri değil. Kişisel olarak itibarı mahvedecek düzeyde bir beceriksizlik gösteriyor ve Arc’ı bir daha kullanmamaya karar verdirecek kadar ciddi
aug 25 5:48pm: Signal şifreli kanalı üzerinden Arc kurucu ortağı Hursh ile ilk temasaug 25 6:02pm: Hursh’ün Arc hesabında güvenlik açığı kavram kanıtının çalıştırılmasıaug 25 6:13pm: Ayrıntılar şifreli biçimde paylaşıldıktan sonra Slack kanalına eklenmeaug 26 9:41pm: Açığın yamalanması, ödülün ödenmesisep 6 7:49pm: CVE atanması (CVE-2024-45489)Ani ilk temastan düzeltmenin dağıtılmasına kadar 4 saat; düzeltmenin basit olma ihtimali düşünülse bile oldukça iyi. Düzeltme: Tarih değişmiş, yani aslında 28 saatmiş. Yine de fena değil; ilk temastan 30 dakika sonra “Slack kanalımıza gel” yanıtı çok hızlı
Tarayıcı kadar önemli ve kişisel bir üründe, 50–60 milyon dolar nakit ve 500 milyon dolar değerleme almışken iş modelinin olmaması büyük bir uyarı işareti. Bu bir hayır işi değil; birileri bir şekilde bedelini ödeyecek
Firebase’in de bunu biraz daha aptal-proof hâle getirememiş olması üzücü. Ve gerçekten sadece $2,500 mü? Kelimenin tam anlamıyla Arc’ın tüm kullanıcıları ele geçirilebilirdi; NSA olsaydı birkaç sıfır daha eklerdi
Özellikle Supabase gibi işlevsel rakipler normal DBMS ve kimlik doğrulama modelini sarmalayan bir yaklaşımken
Paylaştığın için teşekkürler. Beta’nın ilk haftasından beri Arc kullanıyordum
Ama bu bug’dan ve düzeltmeden sosyal medyanın hiçbir yerinde bahsetmemiş olmaları epey endişe verici. Arc kullanırken keyif aldım ama bu şekilde ele alışlarını görünce kullanmaya devam edebileceğimi sanmıyorum
Böyle büyük bir açık için $2,000 hakaret gibi bir miktar
Muhtemelen ihlal olayları için düzenleyicilerden ceza almadıkları içindir