Bagaimana ratusan perusahaan seperti X, Vercel, Cursor, dan Discord ditembus lewat serangan supply chain
(gist.github.com/hackermondev)- Seorang siswa SMA berusia 16 tahun memublikasikan rangkuman kasus bagaimana kerentanan pada platform Mintlify memungkinkan serangan cross-site scripting (XSS) pada situs dokumentasi perusahaan besar seperti X, Vercel, Cursor, dan Discord. Melalui kerentanan ini, ia menerima bug bounty sebesar 11.000 dolar
- Jalur internal Mintlify
/_mintlify/static/[subdomain]/[...route]dirancang dengan struktur yang dapat memuat file eksternal tanpa verifikasi domain - Penyerang dapat menyisipkan JavaScript ke dalam file SVG untuk menjalankan skrip berbahaya di domain layanan besar seperti Discord
- Kerentanan ini berdampak pada hampir semua pelanggan yang menggunakan Mintlify, dan pembajakan akun dimungkinkan hanya dengan satu kali klik tautan
- Insiden ini dinilai sebagai contoh bagaimana satu kelemahan dalam keamanan supply chain dapat memicu dampak besar-besaran
Penemuan di Discord
- Pada November 2025, Discord beralih ke platform dokumentasi berbasis AI Mintlify, dan sejak itu pencarian kerentanan dimulai
- Tepat setelah migrasi dari platform kustom lama ke Mintlify, peneliti menganalisis struktur sistem dokumentasi baru
- Domain dokumentasi Discord (
discord.mintlify.app) mengekspose jalur internal Mintlify (/_mintlify/*) apa adanya- Jalur ini harus tetap dapat diakses karena diperlukan untuk fitur-fitur utama seperti autentikasi
Struktur platform Mintlify
- Mintlify adalah layanan yang mendukung penulisan dokumentasi berbasis Markdown dan otomatis mengubahnya menjadi dokumentasi web
- Semua situs dokumentasi dijalankan di subdomain
*.mintlify.appatau domain kustom - Secara internal, layanan ini menggunakan endpoint seperti
/_mintlify/api/user,/_mintlify/markdown/, dan/_mintlify/static/
Proses penelusuran kerentanan
- Ditemukan bahwa endpoint
/_mintlify/_markdown/_sites/[subdomain]/[...route]mengembalikan file dari dokumentasi lain tanpa verifikasi domain- Namun, jalur ini hanya mengembalikan teks Markdown yang belum dirender sehingga kode tidak dapat dieksekusi
- Setelah itu, analisis terhadap paket Mintlify CLI menemukan endpoint tambahan
/_mintlify/static/[subdomain]/[...route]- Jalur ini mengembalikan file statis dan menerapkan whitelist ekstensi file
- File HTML dan JS diblokir, tetapi file SVG diizinkan
Realisasi serangan
- Penyerang mengunggah file SVG yang telah disisipi JavaScript ke dokumentasi Mintlify miliknya
- Saat file tersebut dipanggil dari domain Discord (
https://discord.com/_mintlify/_static/.../lmao.svg), skrip akan dieksekusi - Dengan cara ini, XSS dapat dijalankan bukan hanya di Discord, tetapi juga di domain dokumentasi semua perusahaan yang menggunakan Mintlify
Kolaborasi dan pelaporan
- Peneliti bekerja sama dengan peneliti keamanan lain untuk memverifikasi kerentanan
- Segera setelah laporan diterima, Discord menonaktifkan seluruh dokumentasi developer selama 2 jam, lalu kembali ke platform lama
- Detail tindakan terkait dicatat di halaman Discord Status
- Setelah mengetahui kerentanan ini melalui Discord, Mintlify membuka kanal Slack antara tim engineering dan para peneliti untuk segera mengerjakan perbaikan
Cakupan dampak
- Sebagian besar pelanggan Mintlify seperti X (Twitter), Vercel, Cursor, dan Discord termasuk dalam cakupan dampak
- Di domain resmi masing-masing perusahaan, ada kemungkinan pembajakan akun melalui satu tautan berbahaya
- Satu kerentanan dalam supply chain dapat menimbulkan risiko berantai terhadap keamanan ratusan perusahaan
Imbalan dan kesimpulan
- Tim peneliti menerima total sekitar 11.000 dolar AS dalam bentuk bug bounty
- Discord memberikan 4.000 dolar, dan Mintlify memberi imbalan tambahan untuk tiap kerentanan
- Kasus ini menjadi contoh representatif yang menunjukkan pentingnya keamanan supply chain dan besarnya dampak kerentanan pada satu platform
1 komentar
Komentar Hacker News
Eksploit ini benar-benar contoh yang menakutkan
Hanya dengan mengklik satu tautan, misalnya https://discord.com/_mintlify/static/evil/exploit.svg, JavaScript bisa dijalankan di domain Discord
Akibatnya, cookie sesi atau token bisa dicuri sehingga akun sepenuhnya diambil alih, aplikasi developer atau webhook bisa dimanipulasi, atau server bisa dihapus lewat API maupun Nitro dibeli memakai informasi pembayaran, jadi dampaknya sangat besar
Kalau melihat skala dampak seperti ini, bug bounty $4.000 terasa seperti imbalan yang terlalu kecil
Kalau cookie sesi selalu diatur sebagai HTTP-only, serangan seperti ini jadi jauh lebih sulit berhasil
Mengejutkan bahwa banyak developer frontend yang tidak tahu konsep keamanan dasar seperti ini
Di black market, nilainya kemungkinan bisa jauh lebih tinggi
Fakta bahwa skrip bisa dimasukkan ke dalam file SVG sendiri menurut saya merupakan kesalahan desain keamanan
Memang keren bahwa demo interaktif atau game bisa dibuat hanya dengan satu SVG, tetapi itu juga menjadikannya sarang kerentanan
Karena itu banyak platform melarang upload SVG atau memblokir preview-nya
Di Discord pun kalau mengunggah SVG, kodenya ditampilkan apa adanya, dan di Facebook Messenger atau WeChat juga tidak bisa dibagikan
Meski ukuran filenya kecil dan punya keunggulan independen terhadap resolusi, tetap disayangkan bahwa dalam praktiknya format gambar raster masih lebih luas dipakai
Active Storage milik Rails secara default tidak menyanitasi SVG, jadi perlu diperhatikan
Lihat dokumen OWASP terkait hal ini
<script>Tapi sepertinya itu saja mungkin tidak cukup
Pada format raster, masalah seperti ini hampir tidak ada
Insiden ini terasa menunjukkan sisi tertentu dari ekosistem startup AI saat ini
Startup dokumentasi AI yang tumbuh dengan dana VC berhasil mendapatkan pelanggan besar tanpa verifikasi keamanan, dan pada akhirnya jutaan orang terekspos risiko
Mintlify belum lama ini menulis blog yang membanggakan arsitektur caching yang kompleks, tetapi kenyataannya tampak bahkan tidak memahami keamanan dasar
Dalam situasi seperti ini, orang yang menemukan kerentanannya hanya menerima $5.000
Menurut saya ini contoh yang menunjukkan betapa rapuhnya budaya pengembangan berbasis AI saat ini
Rantai dependensi yang kompleks dan neraka multi third-party DLL adalah akar penyebabnya
Kalau Discord tidak melayani dokumentasi API langsung dari discord.com, masalah seperti ini tidak akan terjadi
Rasanya CDN saja seharusnya cukup
Ini bug yang memungkinkan pengambilalihan akun pelanggan secara penuh, jadi nilai hadiahnya terlalu kecil
Di zaman sekarang seharusnya tidak ada alasan membiarkan XSS
Di Anubis pun tahun ini ditemukan dua reflective XSS
Dependensi third-party wajib diperiksa
Lihat advisory keamanan terkait di sini dan di sini
Selain di jejaring sosial besar, sulit mendapatkan keuntungan finansial darinya
Saya jadi berpikir bagaimana kalau hacker berusia 16 tahun yang menemukan kerentanan seperti ini direkrut sebagai pegawai tetap atau paruh waktu untuk melakukan pemeriksaan keamanan terus-menerus
Dengan gaji tahunan $50.000 saja, rasanya keamanan perusahaan bisa meningkat drastis
Bug bounty lebih efisien karena memberi imbalan berdasarkan hasil
Hanya saja kalau imbalannya rendah, penelitinya bisa tergoda menjualnya ke pihak ketiga
Ada yang spesialis XSS, IAM, shell exploit, dan lain-lain, jadi sulit bagi satu orang untuk mencakup semuanya
Luar biasa bahwa anak 16 tahun menemukan hal seperti ini
Tapi menyebut XSS sebagai supply chain attack terasa agak asing
Jika masalah terjadi di lapisan perantara seperti Mintlify, pengguna akhir tidak punya cara bertahan sama sekali
Karena kode berbahaya dikirim lewat rantai tepercaya, ini juga bisa dilihat sebagai semacam XSS tingkat supply chain
Laporan kolaboratornya juga mencakup kerentanan RCE yang lebih serius
Untuk detailnya, lihat blog ini
Kalau melihat kasus seperti ini,
1️⃣ Content Security Policy (CSP) wajib dikonfigurasi
2️⃣ Di server NodeJS, opsi
--disallow-code-generation-from-stringsseharusnya dipakai secara defaultPenyedia layanan seperti Vercel seharusnya menampilkan peringatan kalau CSP tidak digunakan
Untuk referensi tambahan, flag keamanan NodeJS yang layak dilihat dirangkum di artikel ini
Melakukan proxy ke layanan third-party dari domain utama yang dipakai untuk autentikasi pengguna adalah pilihan terburuk
Mintlify seharusnya dipisahkan ke subdomain terpisah seperti dev-docs.discord.com
Bahkan jika pelanggan menginginkannya, risikonya terlalu besar dari sisi keamanan
Hanya saja, karena SEO, ada banyak permintaan untuk menaruh dokumentasi di domain utama
Dari sudut pandang Mintlify, kejadian ini pasti sangat membuat stres
Gunakan subdomain khusus untuk third-party, dan batasi cookie autentikasi aplikasi utama sebagai host-only
Kalau memungkinkan, memakai domain yang benar-benar berbeda (misalnya discorddocs.com) akan lebih aman
Tapi dibandingkan dengan risiko keamanannya, itu pilihan yang terlalu berbahaya
Sekarang saya tidak akan pernah membuka file SVG
Fakta bahwa anak 16 tahun menemukan ini benar-benar legendaris