Bir flört uygulamasını hackleme deneyimi ve güvenlik araştırmacılarına yönelik yanlış yaklaşım
(alexschapiro.com)- Cerca Dating App'te telefon numarası tabanlı giriş ile açıkta duran API bir araya gelerek, OTP yanıtının doğrulama kodunu içermesi ve bunun kişisel verilerin görüntülenmesine kadar uzanabilen tehlikeli bir duruma yol açıyordu
api.cercadating.com, uygulama sürümü başlığı eklendiğinde/docsiçindeki openapi.json üzerinden uç noktaları açığa çıkarıyordu; bazı istekler ise zorla eşleştirme gibi iş mantığını bile manipüle edebiliyorduuser/{user_id}, geçerli bir kullanıcı kimliğiyle ad, konum, doğum tarihi, okul, telefon numarası, e-posta, profil durumu gibi PII döndürüyordu; bu da OTP açığıyla birleştiğinde hesap ele geçirmeye yol açabiliyordu- Hesaba erişim sağlandıktan sonra, belge göndermiş kullanıcılar için pasaport veya kimlik bilgilerine, selfie URL'lerine ve özel mesajlara kadar erişilebiliyordu; doğrulama betiğiyle 6.117 kullanıcı, kimlik bilgisi girmiş 207 kullanıcı ve Yale öğrencisi olarak işaretlenmiş 19 kullanıcı bulundu
- Açık 23 Şubat 2025'te Cerca'ya bildirildi ve 24 Şubat'ta telefon görüşmesi yapıldı; ancak 21 Nisan'daki açıklama tarihine kadar ne takip eden bir yanıt geldi ne de kullanıcılara bildirim yapıldı, yalnızca yamanın uygulanıp uygulanmadığı bağımsız olarak doğrulandı
Bildirimden sonra kesilen yanıt süreci
- Cerca Dating App'te özel mesajların, pasaport bilgilerinin, cinsel tercihlerin ve diğer kişisel verilerin açığa çıkmasına yol açabilecek bir flört uygulaması güvenlik açığı vardı
- Açık keşfedildikten sonra 23 Şubat 2025'te Cerca ekibine e-postayla bildirim yapıldı; ertesi gün yapılan görüntülü görüşmede açık, azaltma yöntemleri ve sonraki adımlar ele alındı
- Cerca ekibi sorunun ciddiyetini kabul etti, sorumlu açıklamadan dolayı teşekkür etti ve açığın giderileceğini, etkilenen kullanıcılara bildirim yapılacağını söyledi
- Sonrasında 5 Mart ve 13 Mart'ta düzeltme ve kullanıcı bildirimi planına dair güncelleme istendi, ancak 21 Nisan 2025'teki açıklama anına kadar yanıt gelmedi
- Açığın kamuya açıklanmasından önce yamalandığı bağımsız olarak doğrulandı ve açıklama buna dayanarak yapıldı
OTP girişinden başlayan hesap erişimi
- Uygulama yalnızca telefon numarasına kod gönderen OTP tabanlı giriş kullanıyordu
- Ağ isteklerini incelemek için iPhone uygulamasında Charles Proxy kullanılarak uygulama trafiği yakalandı
- OTP'yi tetikleyen yanıtın içinde tek kullanımlık parola doğrudan yer alıyordu
- Bu yapıda, yalnızca kullanıcının telefon numarasını bilmek ilgili hesaba erişmek için yeterliydi
- Hesap sahibinin telefon numarasını bulmak için ayrı bir yol gerektiğinden API uç noktalarının araştırılmasına geçildi
OpenAPI belgeleriyle ortaya çıkan uç noktalar
api.cercadating.comüzerinde dizin fuzzing aracı kullanılarak yollar listelendi- Uygulamaya ait başlıklar olmadan sitenin hiçbir bölümüne erişilemiyordu
- Gobuster ile ilgili başlık eklenerek istek gönderildiğinde
/docsuç noktası bulundu ve buradaopenapi.jsonsunuldu - Burp Suite'in match-and-replace özelliği kullanılarak uygulama sürümü başlığı ile Charles Proxy'den çıkarılan bearer token'ın her zaman eklenmesi sağlandı
- Korunmayan bazı uç noktalar iş mantığını etkiliyordu ve iki kişiyi zorla eşleştiren istekler bile gönderilebiliyordu
Kullanıcı profilleri ve kişisel veri sızıntısı
user/{user_id}uç noktası, geçerli bir kullanıcı kimliği verildiğinde çeşitli kişisel verileri döndürüyordu- Yanıt şu bilgileri içeriyordu
- Ad, cinsiyet, ilgilenilen cinsiyet, şehir, enlem-boylam
- Okul e-postası ve doğrulama durumu, sektör, meslek, doğum tarihi, boy
- Okul kimliği ve okul adı, profilin tamamlanma durumu
- Vatandaşlık kimliği doğrulama durumu, mobil ve e-posta doğrulama durumu
- Premium durumu, hesabın aktif-askıda-onboarding durumu
- Telefon numarası, e-posta, kullanıcı kimliği, kalan arama sayısı
- Profil görselleri, eşleşme tercihleri, kullanıcı prompt'ları, karşılıklı iletişim bilgileri, oluşturulma-değiştirilme zamanları, yaş vb.
- Python betiğiyle geçerli kullanıcı kimlikleri bulunarak kullanıcı verileri toplu şekilde enumerate edilebiliyordu
- Dönen telefon numaraları OTP açığıyla birleşince hesapların tamamına erişim için kullanılabiliyordu
- OTP girişi olmadan da kullanıcıların kişisel verileri açığa çıkmış durumdaydı
Kimlik belgeleri ve özel mesajlara kadar uzanan erişim
national_id_verifiedalanı, sistemde pasaport veya kimlik bilgisi tutulduğunu gösteriyordu- Kimlik belgesiyle ilgili yanıtlar şu bilgileri içeriyordu
verification_type:PASSPORTdocument_numberfront_side_urlback_side_urlselfie_url- durum, kimlik, kullanıcı kimliği
- Bu bilgiler yalnızca giriş yapmış kullanıcıya sunuluyordu, ancak OTP açığı nedeniyle istenen herhangi bir kullanıcı olarak oturum açmak mümkündü
- Belge göndermiş kullanıcılar için herkesin kimlik bilgilerini görebilecek bir yapı olduğu, ancak bunun fiilen yapılmadığı belirtildi
- Potansiyel flört eşleşmeleriyle yapılan özel mesajlar da görülebiliyor, belge gönderilmişse pasaport bilgilerine de erişilebiliyordu
Doğrulanan sızıntının boyutu
- Hızlı bir betikle bilgi alınabilen kullanıcı sayısı, Yale öğrencisi olarak kayıtlı kullanıcı sayısı ve kimlik bilgisi girmiş kullanıcı sayısı hesaplandı
- Betik, geçerli kullanıcı kimliklerini sayarken art arda 1.000 kez geçerli kimlik bulamazsa duracak şekilde çalışıyordu
- Bu yöntem daha fazla kullanıcı olasılığını dışlamıyor
- Cerca, ilk haftasında kullanıcı sayısının 10 bin olduğunu belirtmişti
- Doğrulanan sayılar şunlardı
- 6.117 kullanıcı
- Kimlik bilgisi girmiş 207 kullanıcı
- Yale öğrencisi olarak işaretlenmiş 19 kullanıcı
Gizlilik vaatleri ve gerçek risk
- Cerca'nın gizlilik politikası, “verileri şifreleme ve diğer sektör standardı önlemlerle koruduğunu” söylüyordu
- Gerçek açık durumu ile karşılaştırıldığında bu ifade yanıltıcı olabilecek nitelikteydi
- Açığa çıkabilecek veriler arasında cinsel tercihler, özel mesajlar ve çeşitli kişisel bilgiler yer alıyordu
- Kötü niyetli bir kullanıcı bu bilgilere erişirse kimlik hırsızlığı, takip ve şantaj gibi sonuçlar doğabilirdi
- Flört uygulamaları hassas veriler işlediği için, uygulamayı hızlı piyasaya sürmekten önce kullanıcı verisi güvenliği öncelik olmalı
1 yorum
Hacker News yorumları
Bu uygulama, üniversite öğrencileri tarafından yapılmış epey erken aşama bir proje gibi görünüyor. Güvenlik ve iletişim pratiklerini düzgün uygulamak için ellerinden geleni yapmaları gerektiği doğru, ama benzer sorunlarda büyük VC yatırımı almış “yetişkin şirketlerin” de berbat tepki verdiğini düşününce çok sert yüklenmek istemiyorum
https://georgetownvoice.com/2025/04/06/georgetown-students-c...
Bu, bir sürücünün kazada birini öldürmesi ve sonradan ehliyetinin bile olmadığının ortaya çıkmasına benziyor
Asıl yazıda Şubat ayında Cerca ekibiyle iletişime geçildiği söyleniyor; yani ya çıkış gününde bulunan bir açık ya da yapıda tuhaf bir şey var. Her hâlükârda “iki aylık bir güvenlik açığı” ve “iki aylık, öğrenciler tarafından yapılmış bir uygulama/hizmet”
Üstelik eğlence için yapılmış bir şey değil, ticari bir ürün. Uygulama içi satın almalarda Cerca App $9.99, Cerca App 3 month $9.99, 10 Swipes $2.99, 3 Swipes $0.99, 5 swipes $1.99, 3 Searches $1.99, 10 Searches $3.99, 5 Searches $2.99 olarak listelenmiş
Küçük bir şirkette mühendis olarak bazen kişisel sorumluluğum konusunda endişeleniyorum. PCI veya HIPAA kapsamına girmeyen, düzenlemeye tabi olmayan alanlarda faaliyet gösteren çok fazla şirket var ve küçük yapılarda güvenlik kurumsal bir yükümlülük olmaktan çıkıp sadece mühendisliğin ilgi alanına itiliyor
Ürün ekibi özelliklere, PM takvime, QA hata bulmaya odaklanıyor; güvenlik konusunda makul şekilde ses çıkaran kişi pek olmuyor. Mühendisten, panodaki işleri bitirmekten fazlası beklenmiyor. Takvimi etkilemeden güvenli hâle getirebiliyorsan ne âlâ, yoksa PM vb. kişilerden baskı görüyorsun
“Bu ne kadar sürer?”, “Böyle bir şeyin gerçekten yaşanma riski ne kadar?”, “Güvenliği sonra ele alırız, önce MVP’yi müşterilere çıkaralım” gibi şeyler duyuyorsun. Çalışan olarak işverenimin söylediği işi yapıyorum; ama bir hack veya veri sızıntısı yüzünden şirket dava edilirse, “bilmesi gereken” tek kişi olduğum gerekçesiyle kişisel olarak ben mi sorumlu tutulacağım diye düşünüyorum
Yine de ölçekten bağımsız olarak kurum genelinde güvenlik standartlarının eksikliği acınası. Yeni özellik çıkarmak, iyi güvenlik pratiklerini garanti altına almaktan her zaman önce geliyormuş gibi
Yine de bir startup’ta sadece bir iki geliştirici varsa bunun bile zor olduğunu anlıyorum. Yasal işler peşinde koşulmadığını hissedersem ben ayrılırdım
Kolay değil, ama ciddiye alınmazsa işin kendisini batırabilecek kadar önemli bir konu
Güvenlik eksikliğine dair endişeleri dile getirdiğin e-posta kayıtları ve yöneticinin bunu önemsememeni söylediği yanıtlar gerekli. Hangi bölge olduğunu bilmiyorum ama sıradan bir çalışanın veri sızıntısından hukuken sorumlu tutulduğu bir örnek bilmiyorum. Genelde veri sızıntılarında kimse gerçek bir sonuçla karşılaşmıyor; şirket de göstermelik bir ceza ödeyip geçiyor
Bir araştırmacı olarak hukuki maruziyeti azaltmak için ikinci bir hesap açmak ya da bir arkadaşa profil oluşturtup erişim izni almak yeterli olurdu
Enumeration açığını kanıtlamak için gerçekten veri kazımaya gerek yok. Benim ID’m 12345 ise ve arkadaşım kaydolup 12357 aldıysa, herhangi bir kullanıcının ID’sini bulup profiline erişilebildiğine kanıt olarak bu yeterli
Başkalarının da söylediği gibi, açığı doğrulamak ve açıklamak için diğer kullanıcıların kişisel olarak tanımlanabilir bilgilerine bu kadar çok erişmeye gerek yok
Kişisel olarak tanımlanabilir bilgilerin korunmasını isteyip bunu kanıtlamak için onları kazımak gereksiz ve ikiyüzlüce
Yazı epey kafa karıştırıcı. OTP tabanlı girişte tek kullanımlık parola isteğinin yanıtında OTP’nin aynen geldiği kısmı yeterince açıklanmamış, ama muhtemelen api.cercadating.com/otp/ gibi bir API olduğundan, telefon numarasını tahmin ederseniz o numaraya sahip olmasanız bile OTP kodunu alabileceğiniz anlamına geliyor gibi görünüyor.
Ayrıca 1.000 ardışık ID içinde geçerli kullanıcı yoksa duran bir script ile 6.117 kişi, kimlik bilgisi eklemiş 207 kişi ve Yale öğrencisi olduğunu iddia eden 19 kişi bulduğunu söylüyor; yazar bunun ne kadar tehlikeli olduğunun farkında mı emin değilim. Aslında weev’in AT&T’yi ihlal ettiği yönteme benziyor ve o hapse girmişti[0].
Daha büyük bir şirket ve daha büyük bir sızıntıydı, ama bir güvenlik açığını kullanarak binlerce kişinin verisine izinsiz eriştiğini herkesin içinde övünerek anlatmazdı diye düşünüyorum. Ahlak yargısı yapmak istemiyorum; güvenlik araştırmacılarının uyarıda bulunabileceği bir alan olması gerektiğini düşünüyorum, ancak hukuk güvenlik araştırmacıları için epey dezavantajlı.
[0] https://en.wikipedia.org/wiki/Goatse_Security#AT&T/iPad_emai...
O davadaki sanıklar temel kişisel tanımlanabilir bilgileri yayımlamakla da suçlanmıştı; burada böyle bir şey olmuş gibi görünmüyor.
Başka bir dating uygulamasında benzer bir şey yaşamıştım; oradan hiçbir zaman yanıt gelmedi. Kurucunun dikkatini çekmek için profil yazısını “benimle iletişime geç” ifadesiyle değiştirdim, o da yedeği geri yükledi.
Birkaç yıl sonra Instagram reklamını görünce sorunun hâlâ var olup olmadığını kontrol ettim; hâlâ vardı. Uygulama-proxy-sunucu ile kolayca bulunabilen API endpointini bilen herkesin tam yönetici yetkisine sahip olup tüm mesajlara, eşleşmelere vb. erişebildiği bir yapıydı.
Tekrar gidip bir kez daha denemeli miyim diye düşünüyorum.
Pasaport veya adres gibi hassas bilgiler alınmadan önce insanların iki kez düşünmeye zorlanması gerekiyor. Bu tür şeyler sadece çocukların uygulama yapması diye geçiştirilemez.
Bir dating sitesi için API’nin kimlik durumu hakkında verified/not-verified boolean değeri ya da ‘not-verified’, ‘passport’, ‘drivers-license’ gibi enum değerleri döndürmesi yeterlidir. İstemci/UI’da ayrıntılı bilgileri göstermeye gerçek bir ihtiyaç yok.
Havayolu uygulaması gibi, sınır geçişi amaçlı kimlik belgesi seçmeniz gereken durumlar istisna olarak daha fazla bilgi gösterebilir; ama United uygulamasında olduğu gibi pasaport numarasının yalnızca son birkaç hanesini göstermek yeterli. Dahili API’nin de sadece bu kadarını göndermesini isterim.
Ya da Apple veya Google gibi “devlete benzer” bir yer de bunu üstlenebilir.
https://en.wikipedia.org/wiki/General_Data_Protection_Regula...
İstek API yanıtında OTP döndürmesi hiç mantıklı değil. Bunu neden yapmış olabilirler?
Güvenliği düşünmezseniz oldukça makul ve bariz bir çözüm aslında. Dating uygulamaları zorunlu olarak çok fazla kişisel tanımlanabilir bilgi içerdiğinden, yapılması en riskli uygulama türlerinden biri; bu ise korkunç.
Hızlı bir proof of concept veya MVP’de zaman kazanmak için kayıt modelini API yanıtı olarak aynen kullanmak sık görülen bir şey, bu yüzden kolayca gözden kaçabilir.
Pinterest’in yeni API’si çıktığında OAuth entegrasyonu kullanan tüm uygulamalara kullanıcı bilgilerinin tamamını saçıyordu; buna iki aşamalı doğrulama gizli değeri de dahildi. Bildirip ödül aldım, ama bu tür şeyler daha iyisini bilmesi gereken büyük şirket API’lerinde bile oluyor.
Framework kaynaklı olma ihtimali var. Muhtemelen veritabanına koyulan nesne, ORM veya başka bir saklama sistemi tarafından doğrudan serileştirilip HTTP yanıtı olarak geri döndürülüyordu.
https://yaledailynews.com/blog/2025/04/24/yale-student-expos...
Bu konuyla ilgili başka bir haber.
Kişisel tanımlanabilir bilgi saklamayı nükleer atık depolamak kadar riskli hâle getiren bir yasa olmasını isterdim. Sızıntı olursa şirket neredeyse kesin olarak batmalı ve sorumlular hukuki riskle karşı karşıya kalmalı.
Teşvikleri doğru hizalamanın en iyi yolunun bu olduğunu düşünüyorum. Şu anda mümkün olduğunca çok kullanıcı bilgisi saklamanın neredeyse hiçbir dezavantajı yok. Veri sızıntısı mı? Bir özür tweet’i atıp devam ediyorsunuz.
Ancak o zaman bu sorun hak ettiği ilgiyi görebilir gibi geliyor.
“Hiç yanıt alamadım” deniyorsa, sessizlik sürerse 90 gün sonra açığı kamuya açıklayacağını bildirme zamanıdır