Kunci API yang bocor bukanlah hal baru, namun skala masalah pada kode front-end sebagian besar masih menjadi misteri – hingga saat ini. milik penyusup tim peneliti membangun metode pendeteksian rahasia baru dan memindai 5 juta aplikasi yang secara khusus mencari rahasia yang tersembunyi dalam kumpulan JavaScript.
Apa yang kami temukan mengungkapkan kesenjangan besar dalam cara industri mengamankan aplikasi satu halaman.
42.000 rahasia tersembunyi di depan mata
Hasil penerapan kami metode deteksi baru dalam skala besar sangat mengejutkan. File keluarannya saja berukuran lebih dari 100 MB teks biasa, berisi lebih dari 42.000 token terbuka di 334 jenis rahasia berbeda.
Ini bukan hanya kunci pengujian bernilai rendah atau token mati. Kami menemukan kredensial aktif dan penting terdapat dalam kode produksi, yang secara efektif melewati kontrol keamanan yang diandalkan sebagian besar organisasi.
Berikut adalah rincian risiko paling kritis yang kami temukan.
Token Repositori Kode
Eksposur yang paling berdampak adalah token untuk platform repositori kode seperti GitHub dan GitLab. Secara total, kami menemukan 688 token, banyak di antaranya masih aktif dan memberikan akses penuh ke repositori.
Dalam satu kasus (ditunjukkan di bawah) token akses pribadi GitLab tertanam langsung dalam file JavaScript. Token ini dicakup untuk memungkinkan akses ke semua repositori pribadi dalam organisasi, termasuk rahasia pipeline CI/CD untuk layanan selanjutnya seperti AWS dan SSH.
Kunci API Manajemen Proyek
Paparan signifikan lainnya melibatkan kunci API untuk Linear, sebuah aplikasi manajemen proyek, yang tertanam langsung dalam kode front-end:
Token tersebut mengekspos seluruh instans Linear organisasi, termasuk tiket internal, proyek, dan tautan ke layanan hilir dan proyek SaaS.
Segala sesuatu yang lain
Kami mengidentifikasi rahasia yang terungkap di berbagai layanan lainnya, termasuk:
API perangkat lunak CAD – akses ke data pengguna, metadata proyek, dan desain bangunan, termasuk rumah sakit
Platform email – akses ke milis, kampanye, dan data pelanggan
Webhook untuk platform obrolan dan otomatisasi – 213 Slack, 2 Microsoft Teams, 1 Discord, dan 98 Zapier, semuanya aktif
Konverter PDF – akses ke alat pembuatan dokumen pihak ketiga
Platform intelijen dan analitik penjualan – akses ke data perusahaan dan kontak yang tergores
Penyingkat tautan – kemampuan untuk membuat dan menghitung tautan
Mengapa rahasia ini terlewatkan?
Pemindai tradisional tidak “berbicara” JavaScript
Pendekatan tradisional dan sepenuhnya otomatis untuk mendeteksi rahasia aplikasi adalah dengan mencari serangkaian jalur yang diketahui dan menerapkan ekspresi reguler untuk mencocokkan format rahasia yang diketahui.
Meskipun metode ini berguna dan dapat menangkap beberapa paparan, metode ini memiliki batasan yang jelas dan tidak akan mendeteksi semua jenis kebocoran, terutama yang memerlukan pemindai untuk menelusuri aplikasi atau mengautentikasinya.
Contoh bagusnya adalah Templat token akses pribadi GitLab Nuclei. Pemindai diberi URL dasar, misalnya https://portal.intruder.io/, yang menyebabkan templat:
-
Buat permintaan HTTP GET ke https://portal.intruder.io/
-
Periksa respons langsung terhadap permintaan tunggal itu, mengabaikan halaman dan sumber daya lain seperti file JavaScript
-
Mencoba mengidentifikasi pola token akses pribadi GitLab
-
Jika ditemukan, buat permintaan tindak lanjut ke API publik GitLab untuk memeriksa apakah token tersebut aktif
-
Jika aktif, ajukan masalah
Ini jelas merupakan contoh sederhana, namun pendekatan ini efektif. Terutama ketika templat menentukan banyak jalur di mana rahasia biasanya terungkap.
Format ini tipikal untuk pemindai infrastruktur, yang tidak menjalankan browser tanpa kepala. Ketika pemindai diberikan URL dasar untuk dipindai (misalnya, https://portal.intruder.io), permintaan selanjutnya yang akan dibuat oleh browser (seperti file JavaScript yang diperlukan untuk merender halaman, misalnya https://portal.intruder.io/assets/index-DzChsIZu.js) tidak akan dibuat menggunakan pendekatan kuno ini.
Titik buta “proses pembangunan”.
Alat Pengujian Keamanan Aplikasi Statis (SAST) menganalisis kode sumber untuk mengidentifikasi kerentanan dan merupakan cara utama untuk mendeteksi rahasia dalam kode sebelum mencapai produksi. Mereka efektif dalam menangkap kredensial yang dikodekan secara keras dan mencegah beberapa kelas paparan.
Namun kami menemukan bahwa metode SAST tidak mencakup gambaran keseluruhan: beberapa rahasia dalam kumpulan JavaScript lolos dari celah dengan cara yang tidak dapat dideteksi oleh analisis statis.
Dilema DAST
Alat Pengujian Keamanan Aplikasi Dinamis (DAST) umumnya merupakan cara yang lebih tangguh untuk memindai aplikasi, dan cenderung memiliki fungsi yang lebih kompleks – memungkinkan penjelajahan aplikasi secara penuh, dukungan untuk autentikasi, dan kemampuan yang lebih luas dalam mendeteksi kelemahan lapisan aplikasi.
Pemindai DAST mungkin tampak sebagai pilihan alami untuk mendeteksi rahasia di front-end aplikasi dan seharusnya tidak ada yang menghalangi pemindai jenis ini untuk menemukan file JavaScript yang tersedia, atau memindai rahasia di dalamnya.
Namun, DAST lebih mahal, memerlukan konfigurasi mendalam, dan pada kenyataannya biasanya hanya diperuntukkan bagi sejumlah kecil aplikasi bernilai tinggi. Misalnya, Anda tidak mungkin mengonfigurasi pemindai DAST untuk setiap aplikasi yang Anda miliki di seluruh kawasan digital yang luas. Selain itu, banyak alat DAST tidak mengimplementasikan ekspresi reguler yang cukup luas dibandingkan dengan rahasia baris perintah yang terkenal.
Hal ini menyisakan kesenjangan yang jelas yang seharusnya dapat dicakup oleh pemindai infrastruktur tradisional, namun hal ini tidak tercakup – dan kemungkinan besar juga tidak tercakup oleh pemindai DAST karena keterbatasan penerapan, anggaran, dan pemeliharaan.
Rahasiakan rahasia Anda
Kontrol shift-kiri penting. SAST, pemindaian repositori, dan pagar pembatas IDE menangkap masalah nyata dan mencegah paparan seluruh kelas. Namun seperti yang ditunjukkan oleh penelitian ini, mereka tidak mencakup semua jalur yang dapat diambil oleh sebuah rahasia dalam produksi.
Rahasia yang diperkenalkan selama pembangunan dan penerapan dapat melewati perlindungan tersebut dan berakhir di kode front-end, lama setelah kontrol shift-kiri dijalankan. Dan masalah ini hanya akan bertambah ketika otomatisasi dan kode yang dihasilkan AI menjadi lebih umum.
Itu sebabnya spidering aplikasi satu halaman diperlukan untuk menangkap rahasia sebelum mencapai produksi. Kami telah membuat deteksi rahasia SPA otomatis ke dalam Penyusup sehingga tim dapat menangkapnya.
Pengarang
Ben Marr, Insinyur Keamanan, Penyusup
Ben adalah Insinyur Keamanan di Intruder, tempat dia mengotomatiskan pemindaian keamanan ofensif dan melakukan penelitian keamanan. Latar belakangnya adalah sebagai penguji penetrasi bersertifikat OSWE dan insinyur perangkat lunak PHP.
Disponsori dan ditulis oleh Pengacau.
