Draw A Fish ! Olay Sonrası Analiz
(aldenhallak.com)- 3 Ağustos 2025’te DrawAFish! web sitesinde yaklaşık 6 saat süren bir büyük güvenlik ihlali meydana geldi
- Yönetici parolası sızıntısı, kimlik doğrulaması eksik API ve JWT zafiyeti gibi temel güvenlik açıklarının birleşik şekilde saldırıya açık hale gelmesi tespit edildi
- Sonuç olarak tüm kullanıcı adları küfürlü ifadelerle değiştirildi, rahatsız edici çizimler onaylandı ve aynı anda mevcut güvenli çizimlerin silinmesi gerçekleşti
- Manuel kurtarma, kimlik doğrulama mantığının düzeltilmesi ve yedeklerin doğrulanması gibi adımlarla sorun giderildi
- Temel ders, hızlı geliştirme ("vibe-coding") ve test/kod inceleme eksikliğinin güvenlikte ciddi sonuçlar doğurabileceğiydi
DrawAFish.com Genel Bakış ve 3 Ağustos 2025 Olay Özeti
- DrawAFish.com kullanıcıların kendi balıklarını çizip diğer kullanıcılarla birlikte bir akvaryumda yüzdürüp eğlenebileceği bir web sitesidir
- 1 Ağustos 2025’te Hacker News’te birinci sıraya yükselerek büyük ilgi gördü. Geliştirici, Copilot gibi araçlarla özellikleri hızla üreten bir “vibe-coding” yaklaşımı benimsedi
- Ancak 3 Ağustos 2025’in şafağında ciddi bir güvenlik ihlali meydana geldi
- Yaklaşık 6 saat boyunca tüm kullanıcı adları kaba ifadelerle değiştirildi, uygunsuz çizimler onaylandı ve genel bir kaos yaşandı
- Sonuçta bir yönetici olaydan manuel olarak geri döndü
Güvenlik Açıklarının Detaylı Analizi
1. Geçmişte Sızdırılmış 6 Haneli Yönetici Şifresi
- Geliştirici başlangıçta kendi çocukluk dönemi kullanıcı adı ve şifresini (6 hane) yönetici hesabında kullanmıştı
- Bu parola, Neopets gibi sitelerin veri sızıntılarıyla zaten internette yayıldığı için herkese açıktı
- Geliştirici daha sonra Google Auth’a geçtiyse de eski parolayı kaldırmadı ve zafiyet saldırgana karşı açık kaldı
- Saldırgan, sızdırılmış bilgileri kullanarak yönetici kimlik doğrulamasından geçti ve hakaret içerikli çizimlerin onaylanması ile normal çizimlerin silinmesi gibi kötü niyetli eylemler yaptı
2. Kimlik Doğrulaması Olmayan Kullanıcı Adı Değiştirme API’si
- Profil backend’i geliştirirken “hızlı geliştirme” adına kimlik doğrulaması kontrolü olmadan kullanıcı adı değiştirme API’si yazıldı
- Bu sayede pratikte herkes herhangi birinin kullanıcı adını değiştirebilir hale geldi
3. Yetersiz JWT Doğrulaması
- JWT tabanlı kimlik doğrulamada, token ile userId/e-posta eşleşmesi kontrol edilmeden yönetici işlemlerine izin verecek şekilde uygulandı
- Yani saldırganın elinde yalnızca yönetici doğrulama bilgileriyle alınmış bir token varsa, bu tokenla herkese yönetici yetkisiyle işlem yapılabiliyordu
- İlginç şekilde, bir Hacker News kullanıcısı bu zafiyeti kullanarak saldırgandan önce uygunsuz içeriği silip acil müdahaleye katkı sağladı
Kurtarma Süreci
- Geliştirici sabah saat 07:45 civarında durumu fark ederek masaüstünde anında müdahaleye başladı
- Firebase yedekleri yapılandırılmadığı için yedekleme altyapısına güvenilemedi ve kod hızlıca değiştirerek kimlik doğrulamanın zorunlu olması sağlandı
- Tüm moderasyon loglarını izleyerek kötü niyetli eylemleri geri almak için bir betik geliştirildi (bu betik de yine vibe-coding ile yazıldı)
- Acil durumda üçüncü taraf bir hesabın (bir Hacker News kullanıcısının) yönetici yetkisine erişimi de engellendikten sonra, kod tabanı güvenlik refaktörüne dair geri bildirim alındı ve ek yamalar yapıldı
Geliştirme Kültürü ve Dersler
- Geliştirici, “vibe-coding”, yani hızlı prototipleme ve minimum inceleme kültürünün eğlenceli ve üretken bir süreç sunduğunu, ancak pratikte ciddi güvenlik açıklarına dönüşebileceğini yaşayarak gördü
- LLM (Copilot) hızlı kod üretiminde çok faydalı olsa da, kod kalitesi ve güvenlik sorumluluğu yine geliştiricinin elindedir
- Test, kimlik doğrulama mantığı, kod inceleme gibi temel güvenlik süreçlerinin atlanması, küçük projelerin bile dış saldırılara karşı son derece kırılgan olabileceğini kanıtladı
Sonuç ve İçgörüler
- DrawAFish.com örneği, gerçek servis işletiminde sıkça göz ardı edilen temel güvenlik önlemlerinin önemini gösteriyor
- Açık kaynak araçlarına ve hızlı geliştirme araçlarına bel bağlansa da, test, kimlik doğrulama, kod inceleme ve parola yönetimi gibi temel konular mutlaka kontrol edilmelidir
- Beklenmedik ölçekte dikkat (ör. Hacker News üst sıralar) artınca, saldırı yüzeyi ve risk hızlıca genişleyebilir
- Olay sonrasını şeffaf biçimde belgelemek, benzer başlangıç aşamasındaki girişimcilere veya bireysel geliştiricilere gerçekçi güvenlik dersleri sunuyor
3 yorum
Hacker News yorumları
Ben de hızlı çalışmanın gerçekten çok eğlenceli olduğunu düşünüyorum; kod inceleme gibi şeyler olmadan doğrudan push etmek daha keyifli. Ama bu postmortemi görünce yan projelerimin neden bu kadar sık yarıda kaldığını anladım: eninde sonunda sıkıcı gerçek işlere dönüyorum ve o noktada takılıyorum.
Bu işin Firebase'le olup olmadığını merak ettim: yalnızca ücretsiz katmanı mı sürekli kullandım, yoksa biri sabah uyandığımda beş haneli bir fatura bırakacak kadar kasıtlı bir saldırı mı yaptı?
Ben Slurpyfish olayını doğrudan yaşamış "şanslı" kişilerdense biriyim. Güvenlik tarafında çalıştığım için durumu çok açık bulup gülümsüyorum ama HN'de buna gerçekten yardım edecek birinin yakın zamanda çıkacağını biliyordum. Bu kadar ayrıntılı belgelemeyle paylaşılan bir vibe-coded projenin postmortem olması da çok güzeldi. Son zamanlarda üretimde sadece 'vibe-coded' kodu (IR, Olay Müdahalesi) işimde epey görüyorum; ama bunu bu kadar küçük bir projede bile bu kadar iyi düzenlenmiş görmek etkileyici.
Bu postmortem özellikle bir vibe-coded uygulama olduğu için daha da ilgi çekici geldi; acaba Lego House'daki balık yapma sergisinden ilham almış olabilir mi? Geçenlerde orayı ziyaret etmiştim, bir balığın benimkilerle birlikte yüzdüğünü görmek gerçekten bağımlılık yapıcıydı. Lego House Build-a-Fish YouTube videosu
Birinin güvenlik açığını kullanarak gerçek bir saldırıyı engellemeye çalışması gerçekten şaşırtıcı.
vibe-coded’in "S" harfi Security’nin kısaltmasıdır.
Tamamen yeni bir fikir geliştirmek, doğrudan inşa etmek, çok şey öğrenmek ve başarısız kaldığında profesyonelce utanmak: işte asıl profesyonel budur. Eğer 100 bin dolar da kaybetmemiş, ağın çökmesine izin vermemiş ve işini kaybetmemişsen bir yıl sonra bunları gülerek anımsarsın.
Şu an o sitede bir swastika balığı vardı; biri balık biçiminin içine koyarak filtreyi atlatmıştı sorunlu görsel bağlantısı, şu an silinmiş.
Şu anda kimlik doğrulama olmadan herhangi bir balığa oy verilebiliyor (IP başına dakikada en fazla 20), POST ile şu endpoint kullanılabiliyor Oy API linki {"fishId":"xxxx","vote":"up"}
Vibe-coded bir web sitesi için postmortem bırakılmış olması gerçekten çok iyi; birçok kişi teknolojiyi aşırı ciddiye alırken bu bakış açısı çok daha hafif ve eğlenceli, küçük bir yan proje açısından da gerçekten ilginç ve anlamlı.