Draw A Fish! Postmortem
(aldenhallak.com)- 3 Agustus 2025 terjadi insiden keamanan besar-besaran di situs web DrawAFish! selama sekitar 6 jam
- Kombinasi kerentanan keamanan kritis seperti kebocoran kata sandi admin, API tanpa autentikasi, dan celah JWT terekspos sekaligus dalam serangan tersebut
- Akibatnya, semua nama pengguna diubah menjadi ekspresi yang menghina dan gambar yang ofensif disetujui bersamaan dengan penghapusan gambar yang sebelumnya aman
- Penyelesaian dilakukan melalui pemulihan manual, perbaikan logika autentikasi, dan verifikasi cadangan
- Pelajaran utamanya adalah bahwa pengembangan cepat ("vibe-coding") tanpa cukup tes dan code review dapat menimbulkan dampak keamanan yang sangat serius
Ikhtisar DrawAFish.com dan Ringkasan Insiden 3 Agustus 2025
- DrawAFish.com adalah situs web yang memungkinkan pengguna menggambar ikan sendiri lalu membuatnya berenang bersama pengguna lain di dalam akuarium
- Pada 1 Agustus 2025, situs ini meraih peringkat #1 di Hacker News dan menarik perhatian besar. Pengembang mengadopsi pendekatan “vibe-coding”, yaitu pengembangan cepat fitur menggunakan alat seperti Copilot
- Namun, pada dini hari 3 Agustus 2025 terjadi insiden keamanan serius
- Selama sekitar 6 jam, berbagai nama pengguna diubah menjadi ekspresi yang tidak sopan dan situasi kacau muncul ketika gambar yang tidak pantas disetujui
- Pada akhirnya, admin melakukan rollback manual
Analisis Detail Kerentanan
1. Kata Sandi Admin 6 Digit yang Pernah Bocor
- Pengembang pada awalnya menggunakan ID dan kata sandi (6 karakter) masa kecilnya sendiri untuk akun admin
- Kata sandi ini sudah tersedia secara online dari kebocoran data situs seperti Neopets
- Pengembang kemudian beralih ke Google Auth, tetapi karena tidak menghapus kata sandi lama, celah tetap terbuka bagi penyerang
- Penyerang berhasil mengautentikasi sebagai admin menggunakan informasi bocor dan melakukan tindakan berbahaya seperti menyetujui gambar menghina dan menghapus gambar yang valid
2. API Ubah Nama Pengguna Tanpa Autentikasi
- Saat mengembangkan backend profil, pengembang membuat API ubah nama pengguna tanpa pemeriksaan autentikasi demi “pengembangan cepat”
- Pada praktiknya, siapa pun dapat mengubah nama pengguna secara sembarangan
3. Verifikasi JWT yang Tidak Memadai
- Pada autentikasi berbasis token JWT, operasi admin dibuat dapat dilakukan tanpa mencocokkan token dengan pasangan userId/email
- Artinya, siapa pun yang memiliki token yang dikeluarkan menggunakan kredensial admin dapat menggunakannya dengan hak admin untuk permintaan siapa pun
- Menariknya, seorang pengguna Hacker News justru memakai celah ini untuk menghapus materi tidak pantas lebih dulu daripada penyerang, membantu respons darurat
Proses Pemulihan
- Pengembang menyadari eskalasi masalah sekitar pukul 07:45 pagi dan langsung mulai menanggapinya dari desktop
- Karena backup Firebase belum diatur, tim tidak dapat mengandalkan backup; lalu kode segera diperbarui untuk memaksakan autentikasi
- Dibuat skrip untuk melacak semua log moderasi dan membatalkan tindakan berbahaya (skrip ini juga ditulis dengan cara vibe-coding)
- Saat darurat, akses akun pihak ketiga yang memakai hak admin (pengguna Hacker News) juga diblokir lalu dihubungi untuk menerima umpan balik terkait refactoring keamanan basis kode, dan patch tambahan pun dilakukan
Budaya Pengembangan dan Pelajaran
- Pengembang mengalami bahwa “vibe-coding”, yaitu budaya prototyping cepat dan review minimal yang memang memberi kesenangan dan produktivitas tinggi, sebenarnya dapat berujung pada kerentanan keamanan serius
- LLM (Copilot) sangat berguna untuk menghasilkan kode dengan cepat, namun penentu tanggung jawab atas kualitas dan keamanan kode tetap berada pada pengembang itu sendiri
- Kasus ini membuktikan bahwa melewatkan langkah keamanan dasar seperti pengujian, logika autentikasi, dan code review dapat membuat proyek skala kecil sangat rentan terhadap serangan eksternal
Kesimpulan dan Wawasan
- Kasus DrawAFish.com menunjukkan pentingnya langkah keamanan dasar yang kerap terabaikan dalam operasi layanan nyata
- Saat bergantung pada alat open source dan alat pengembangan cepat, tetap harus mengecek pengujian, autentikasi, code review, serta manajemen kata sandi sebagai isu dasar yang tak boleh absen
- Eksposur yang tak terduga (misalnya peringkat teratas di Hacker News) dapat secara drastis memperluas permukaan serangan dan risikonya
- Dengan mencatat postmortem secara transparan, ini menyampaikan pelajaran keamanan yang realistis bagi startup serupa maupun pengembang independen di masa depan
3 komentar
Komentar Hacker News
Aku juga suka bekerja dengan kecepatan tinggi; rasanya asyik tidak melakukan code review dan langsung mendorong perubahan begitu saja. Setelah baca postmortem ini, aku akhirnya mengerti kenapa proyek sampinganku sering terhenti—selalu saja berakhir saat pekerjaan nyata yang membosankan mulai dimulai, lalu di situlah aku berhenti.
Aku penasaran apakah ini Firebase—apakah dia terus-menerus memakai free tier, atau ada orang yang menyerang bermotif jahat sampai kamu bangun pagi dan mendapat tagihan bernilai lima digit.
Aku termasuk salah satu orang yang 'beruntung' yang pernah mengalami insiden Slurfish. Sebagai orang yang bergelut di bidang keamanan, aku bahkan tertawa melihat gejalanya yang terlalu gamblang, tetapi aku tahu di HN akan segera muncul seseorang yang punya waktu untuk benar-benar membantu. Seru juga karena proyek yang vibe-coded ini memuat postmortem yang didokumentasikan dengan baik. Akhir-akhir ini di pekerjaan IR-ku, aku sering lihat banyak kode vibe-coded yang cuma ngikut tren di production, jadi senang melihatnya dirinci rapih bahkan untuk proyek sekecil ini.
Postmortem ini terasa makin menarik karena aplikasinya memang vibe-coded, penasaran apakah terinspirasi dari display membuat ikan di Lego House. Aku sempat berkunjung baru-baru ini—rasanya sangat adiktif melihat ikan yang kubuat berenang bersama ikan lain. video YouTube Lego House Build-a-Fish
Kaget lihat ada orang yang memanfaatkan kelemahan keamanan untuk mencoba mencegah serangan sungguhan.
“S” di vibe-coded itu singkatan dari Security.
Menemukan ide yang sama sekali baru, langsung membuatnya, belajar banyak, dan tetap merasakan malu secara profesional pada bagian yang gagal—itulah yang benar-benar keren dalam hal profesionalisme. Jika tak sampai kehilangan 100K USD, jaringan gak rusak, dan gak sampai kehilangan pekerjaan, setahun lagi kita akan mengingat ini sambil tertawa.
Saat ini, ikan swastika memang sempat nongol di situs; seseorang memasukannya ke bentuk ikan untuk melewati filter gambar bermasalah ini, sekarang sudah dihapus.
Saat ini bisa vote ikan apa saja tanpa autentikasi (maksimal 20x/menit per IP), dengan POST ke alamat berikut API voting {"fishId":"xxxx","vote":"up"}
Aku suka lihat ada postmortem untuk situs vibe-coded ini. Banyak orang memandang teknologi terlalu serius, jadi sudut pandang yang ringan dan menyenangkan ini terasa segar, terutama buat proyek sampingan kecil, ini terasa sangat menarik dan bermakna