Seorang peneliti keamanan berusia 16 tahun yang memakai nama Faav mempublikasikan temuan besar pada 25 September 2026. Ia menemukan bahwa sebuah layanan analitik internal Microsoft bernama Titan bisa diakses tanpa kredensial asli, karena layanan itu tidak pernah memeriksa tanda tangan pada token login. Temuan ini sudah dilaporkan dan diperbaiki lewat Microsoft Bug Bounty Program.
Yang membuat kasus ini layak dibahas bukan sekadar angka besarnya, tetapi jenis kesalahannya. Ini bukan eksploitasi rumit yang memanfaatkan rantai bug bertingkat. Ini kesalahan verifikasi identitas yang mendasar, pada layanan yang menyimpan metadata analitik berskala sangat besar.
Perlu ditegaskan sejak awal: dampak yang dijelaskan bersifat hipotetis. Faav menyatakan dirinya menemukan bug ini, melaporkannya, dan tidak pernah menyentuh data pelanggan atau informasi pribadi. Microsoft juga menyatakan bahwa laporan ini membantu mereka mengeraskan layanan mereka. Untuk transparansi, Faav menulis bahwa Microsoft memegang kendali editorial atas artikelnya, memotong beberapa bagian dan gambar, serta mengubah cara dampaknya dijelaskan sebelum publikasi.
Bagaimana Layanan Ini Ditemukan
Faav menjalankan pencarian bug dibantu alat buatannya sendiri bernama Antares, yang ia sebut sebagai hackbot AI pribadi. Pada 25 Agustus 2026, Antares mengidentifikasi layanan internal Microsoft bernama Titan. Antarmuka web layanan ini berada di balik halaman yang menuntut VPN khusus karyawan Microsoft, jadi frontend-nya tidak bisa diakses dari luar.
Namun API-nya tidak tertaut di mana pun pada frontend tersebut. Antares mencari di daftar subdomain Microsoft dan menemukan endpoint terpisah yang mengarah ke host Azure Cloud Services. Berkas Swagger publik di endpoint itu mencantumkan empat rute:
/GetConfiguration/GetOnboardedTables/v2/Query/v2/Insert
Swagger menyebut autentikasi Azure AD bearer untuk tiga dari empat rute. Pengecualiannya justru /v2/Query, yang kebetulan juga satu-satunya rute yang menerima SQL mentah. Di situlah Faav mulai mengorek.
Langkah Pertama: Mencari Nama Tabel
Kueri ke /v2/Query memerlukan sebuah tableName, tetapi Swagger tidak memberi contoh nilainya. Faav lalu menarik snapshot halaman login dan privasi Titan dari 2023 di Wayback Machine. Dari konfigurasi Superset yang terarsip, ia memulihkan 56 definisi tabel, termasuk sebuah nilai routing bernama TestData.
Percobaan pertama tanpa header otorisasi mengembalikan 401 Unauthorized. Titik itulah yang kemudian ia kejar selama sepuluh hari berikutnya, di sela-sela ratusan lead lain yang ia proses. Antares kembali lagi ke Titan berulang kali, mengorek pemeriksaan JWT-nya satu pesan error demi satu pesan error.
Menemukan Celah Verifikasi
Prosesnya bertahap dan hampir membosankan. Token dari tenant Entra uji miliknya ditolak dengan error tenant. Setelah tenant diganti ke tenant Microsoft, muncul error audience. Setelah audience diganti, muncul error allowlist aplikasi. Setelah application ID diganti, barulah pemeriksaan bergerak ke tahap pencarian pengguna.
Di titik itu muncul petunjuk terbesar. Payload token terus berubah, sementara tanda tangannya tetap sama persis, dan Titan tetap menerima klaim-klaim baru itu. Faav menyebutnya seperti memeriksa nama di setiap kartu identitas tetapi tidak pernah melihat fotonya. Artinya Titan tidak memverifikasi tanda tangan sama sekali.
Ia kemudian mengganti token dengan JWT sintetis berheader {"alg":"none","typ":"JWT"}. JWT yang ditandatangani normalnya punya tiga bagian: header, payload, dan signature. Token buatan Faav berakhir dengan titik telanjang karena bagian ketiganya kosong. Titan tetap memprosesnya.
Payload berisi nilai yang diharapkan Titan, dengan satu klaim upn yang ia kendalikan sendiri. Token tanpa tanda tangan itu lolos pemeriksaan tenant, audience, dan aplikasi, lalu mengembalikan pesan bahwa pengguna tidak ditemukan. Antares yang saat itu menjalankan model Codex dan Claude terus mencoba alamat bergaya email karyawan Microsoft, karena upn memang normalnya identitas berformat email Entra.
Satu Kata yang Membuka Semuanya
Setelah beberapa alamat valid gagal, Faav berhenti menebak dan mulai bertanya apa yang sebenarnya dilakukan backend dengan klaim itu. Ia menduga layanan tersebut memakai upn untuk mencari nama pengguna aplikasi lokal. Jadi ia mengubah klaim upn dari format email menjadi satu kata sederhana: admin.
Hasilnya hanya angka 1. Tetapi setelah sepuluh hari berisi pesan error autentikasi, angka 1 itu berarti ia akhirnya berhasil menjalankan SQL sebagai administrator Titan. Layanan itu menerima identitas administrator tanpa tanda tangan dan mengeksekusi kuerinya.
Ironinya, admin adalah tebakan yang jelas bagi manusia, tetapi justru tidak pernah dicoba oleh alat otomatisnya karena admin bukan format UPN yang valid. Faav hanya mencobanya setelah berhenti memperlakukan nama field itu secara harfiah dan mulai memikirkan apa yang mungkin dilakukan developer di backend. Titan memakai klaim upn tanpa verifikasi sebagai nama pengguna lokal, dan admin memetakan ke ID pengguna lokal 1 yang memegang peran Admin.
Apa yang Terlihat di Dalam
Faav memulai dari TestData, mengira isinya hanya data uji. Benar, di sana hanya ada kasus uji di basis data pengujian. Tetapi perintah SHOW DATABASES mengungkap sisanya, termasuk basis data metadata platform Titan. Dari sana ia bisa mengueri tabel aplikasi secara langsung.
Menurut catatannya, metadata platform yang bisa dijangkau memuat sekitar 25.000 catatan akun dan email, 17.990 catatan email karyawan, 15.001 catatan organisasi karyawan, 355 konfigurasi basis data, 20.979 definisi SQL virtual dataset, 24.569 dashboard, 425.891 chart, dan 27.347 definisi dataset. Satu catatan pengguna aplikasi memuat informasi identitas dan aktivitas login, meski kolom password berisi hash placeholder dari model pengguna lokal Superset, bukan kredensial Microsoft yang sebenarnya.
Faav juga menemukan direktori pengguna dan pemakaian Titan yang mengekspos rincian karyawan seperti jabatan, departemen, dan hierarki manajemen. Ia menegaskan data itu hanya mencakup sebagian karyawan Microsoft, bukan seluruh direktori perusahaan. Menurutnya data tersebut bisa membantu penyerang menyusun upaya rekayasa sosial bertarget, walau ia tidak pernah menguji atau mendemonstrasikan hal itu.
Kemudian ia menemukan sumber analitik Bing yang terpisah. Ia hanya mengambil dua sampel satu baris dari partisi analitik Bing terbaru untuk membuktikan bahwa data itu terjangkau. Karena identifier pengguna muncul di lebih dari satu dataset, secara teori aktivitas pengguna bisa dikorelasikan antar layanan, tetapi Faav menegaskan ia tidak melakukan korelasi itu, tidak mengidentifikasi siapa pun, dan tidak membangun profil apa pun dari sampel yang ia ambil.
Skala 17,3 Triliun Baris
Angka total adalah hal terakhir yang ia hitung. Ia menguji semua 56 nilai routing dari konfigurasi terarsip memakai SELECT 1, dan 30 di antaranya masih aktif. Setiap nilai routing menunjuk ke konfigurasi backend, dan setiap konfigurasi memuat satu atau lebih basis data. Jadi 30 nilai aktif itu bermuara pada 24 konfigurasi dan 17 basis data analitik terhubung, dengan total 9.863 nama tabel unik.
Dari metadata 17 basis data ClickHouse, ia menjumlahkan estimasi baris. Ia menghitung satu replika per shard dan memverifikasi totalnya lewat dua jalur metadata berbeda, yaitu system.tables.total_rows dan system.parts yang aktif. Keduanya mengembalikan angka yang sama: 17.333.335.124.315. Ia menegaskan angka ini adalah estimasi penyimpanan dari metadata yang kemungkinan mencakup data historis, duplikat, dan turunan, tetapi tetap saja skalanya sangat besar.
Pelajaran untuk Tim yang Membangun API
Kasus Titan memberi beberapa pelajaran yang bisa langsung dipakai tim mana pun yang mengelola layanan internal.
Pertama, autentikasi harus memverifikasi tanda tangan, bukan hanya membaca klaim. Perbedaan antara memeriksa dan mempercayai adalah inti dari bug ini. Sebuah token yang tidak tertandatangani seharusnya ditolak sebelum klaim apa pun dibaca.
Kedua, jangan menganggap endpoint yang tidak tertaut di frontend sebagai endpoint tersembunyi. Berkas Swagger publik yang mencantumkan rute, termasuk rute yang menerima SQL mentah, adalah peta yang cukup bagi penyerang. Peta itu bahkan bisa dipakai alat otomatis tanpa pemahaman mendalam.
Ketiga, layanan internal tetap perlu kontrol akses di lapisan API, bukan hanya di lapisan tampilan. Halaman yang menuntut VPN melindungi frontend, tetapi tidak melindungi endpoint API yang berdiri sendiri di host terpisah.
Keempat, arsip publik adalah sumber intelijen. Snapshot Wayback Machine dari halaman login dan konfigurasi lama membantu penyerang memulihkan nilai routing dan nama tabel. Konfigurasi internal yang pernah terekspos di masa lalu tidak benar-benar hilang.
Kelima, alat otomatis dan intuisi manusia saling melengkapi. Antares menyelesaikan sepuluh hari pekerjaan enumerasi yang tidak perlu dilakukan manusia, tetapi tebakan admin justru datang dari manusia yang berhenti menerima nama field begitu saja. Untuk tim yang menguji keamanan sistem sendiri, kombinasi keduanya jauh lebih kuat daripada salah satu saja.
Catatan Akhir
Faav menutup tulisannya dengan menyoroti dua hal. Pertama, AI dan intuisi manusia saling memperkuat dalam kasus ini. Kedua, skala temuan menunjukkan bahwa satu kesalahan verifikasi pada satu layanan analitik internal bisa membuka akses ke lingkungan metadata yang sangat luas.
Bagi tim engineering, pesan praktisnya tidak rumit. Validasi tanda tangan token, audit setiap rute API yang menerima kueri mentah, dan perlakukan endpoint internal sebagai permukaan serangan yang setara dengan endpoint publik. Bug seperti ini jarang ditemukan dari celah eksotis. Ia ditemukan dari pemeriksaan dasar yang terlewat.
Pola Bug yang Perlu Dicari di Sistem Sendiri
Kalau Anda mengelola layanan yang menerima token, ada beberapa pemeriksaan cepat yang bisa dilakukan minggu ini. Pertama, pastikan setiap endpoint yang membaca klaim token juga memverifikasi tanda tangan sebelum klaim itu dipakai. Urutannya penting: verifikasi dulu, baru baca. Kedua, cari endpoint yang menerima kueri mentah, baik SQL maupun bahasa kueri lain, lalu periksa siapa yang boleh mengaksesnya dan dari mana. Ketiga, periksa apakah ada rute API yang tidak tercantum di antarmuka pengguna tetapi tetap terekspos ke internet. Rute seperti itu sering dianggap aman karena tidak tertaut, padahal tidak ada yang menyembunyikannya dari pemindai otomatis.
Keempat, periksa arsip publik dari domain Anda sendiri. Snapshot lama dari halaman konfigurasi, dokumentasi internal, atau berkas contoh bisa memuat nama tabel, nama parameter, atau nilai default yang masih berlaku hari ini. Kalau ada, itu bukan sekadar informasi basi, melainkan petunjuk yang bisa mempercepat kerja penyerang.
Kelima, uji jalur error. Pesan error yang terlalu informatif, seperti membedakan error tenant, audience, dan allowlist aplikasi, memberi penyerang peta bertahap tentang urutan pemeriksaan yang dilakukan sistem. Pesan yang generik pada lapisan luar jauh lebih aman.
Sumber resmi: tulisan Faav, "How I Could've Accessed 17 Trillion Microsoft Records", 25 September 2026, beserta pernyataan Microsoft atas laporan tersebut.
Rekomendasi Tools & Layanan
Mau langsung nyobain AI yang dibahas di artikel ini tanpa setup ribet? AI token plan Alibaba Cloud ngasih akses ke Qwen, DeepSeek, dan model lain lewat satu API — dan platform Qwen buat build agent sendiri. Free tier-nya cukup buat eksperimen pertama.
💬 Komentar (0)
Belum ada komentar. Jadilah yang pertama! 💬