9 poin oleh GN⁺ 2025-12-19 | 1 komentar | Bagikan ke WhatsApp
  • 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.app atau domain kustom
  • Secara internal, layanan ini menggunakan endpoint seperti /_mintlify/api/user, /_mintlify/markdown/, dan /_mintlify/static/
Iklan

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
Iklan

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
  • 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

 
GN⁺ 2025-12-19
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

    • Untuk mencuri cookie atau token, harus ada cookie yang bukan HTTP-only atau token di localStorage, jadi saya penasaran apakah Discord memang punya struktur seperti itu
      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
    • Saya setuju dengan pernyataan bahwa “$4.000 terlalu kecil”
      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

    • Semua SVG harus disanitasi dengan ketat saat diunggah dan saat dirender
      Active Storage milik Rails secara default tidak menyanitasi SVG, jadi perlu diperhatikan
    • Masalah XML External Entity (XXE) juga merupakan kasus serupa
      Lihat dokumen OWASP terkait hal ini
    • Saya penasaran apakah cukup dengan membuat aplikasi messenger hanya mengabaikan tag <script>
      Tapi sepertinya itu saja mungkin tidak cukup
    • Situasi ini mengingatkan lagi pada bug keamanan di era Flash
    • Masalah yang lebih besar dari SVG adalah hasil render-nya berbeda-beda tergantung perangkat lunak
      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

    • Sebenarnya yang rentan terhadap serangan seperti ini bukan hanya startup AI, tetapi masalah struktural seluruh ekosistem JavaScript
      Rantai dependensi yang kompleks dan neraka multi third-party DLL adalah akar penyebabnya
    • Sebagian besar XSS terjadi karena struktur satu domain
      Kalau Discord tidak melayani dokumentasi API langsung dari discord.com, masalah seperti ini tidak akan terjadi
    • Saya mempertanyakan kenapa situs dokumentasi butuh struktur caching yang rumit
      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

    • XSS masih belum hilang, dan CSP maupun Trusted Types juga tidak sempurna sebagai pertahanan
      Di Anubis pun tahun ini ditemukan dua reflective XSS
      Dependensi third-party wajib diperiksa
      Lihat advisory keamanan terkait di sini dan di sini
    • Secara umum, kerentanan XSS hampir tidak punya nilai pasar
      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

    • Tetapi struktur kontrak yang memberi tekanan target hasil kepada peneliti kurang tepat
      Bug bounty lebih efisien karena memberi imbalan berdasarkan hasil
      Hanya saja kalau imbalannya rendah, penelitinya bisa tergoda menjualnya ke pihak ketiga
    • Sebagian besar peserta bug bounty punya bidang keahlian yang berbeda-beda
      Ada yang spesialis XSS, IAM, shell exploit, dan lain-lain, jadi sulit bagi satu orang untuk mencakup semuanya
    • Sejujurnya, perusahaan seperti ini tidak terlalu peduli pada keamanan
  • Luar biasa bahwa anak 16 tahun menemukan hal seperti ini
    Tapi menyebut XSS sebagai supply chain attack terasa agak asing

    • Penggunaan istilahnya memang terasa agak kurang tepat, tetapi karena dia masih muda hal itu bisa dimaklumi
    • Meski begitu, kalau dilihat dari sudut pandang supply chain, ada benarnya juga
      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-strings seharusnya dipakai secara default
    Penyedia 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

    • Saya juga menjalankan produk yang mirip dengan Mintlify, tetapi tidak mendukung akses ke codebase atau integrasi Git
      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
    • Inti kerentanan seperti ini adalah gagalnya pemisahan domain
      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
    • Alasan perusahaan menaruh situs dokumentasi di domain utama adalah untuk menyisipkan API key yang sebenarnya secara otomatis ke contoh kode
      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

    • Tapi kalau memang harus dibuka, file itu hanya boleh dibuka di lingkungan browser yang disandbox