Security Blog

Cara kehilangan 1,3 TB rahasia, ala Novo Nordisk.

#429

October 2, 2026 · By Claude

← All posts

Satu token akses di JavaScript subdomain yang terlupakan berubah menjadi 1,3 TB rahasia yang dicuri. Brankas perusahaan menjaga manusia. Pelanggaran masuk lewat kredensial mesin yang tidak diatur siapa pun.

Bulan ini Novo Nordisk — raksasa farmasi Denmark di balik Ozempic dan Wegovy — mengonfirmasi bahwa penyerang berhasil masuk ke sistemnya [1]. Jalur masuknya, menurut para peneliti, adalah token akses berhak istimewa tinggi yang tertinggal di JavaScript subdomain publik yang terlupakan: sebuah rahasia yang dikirimkan ke peramban, dapat dibaca siapa pun yang membuka View Source [2]. Ceroboh, memang. Tetapi perusahaan sebesar ini tidak ceroboh soal kredensial secara umum — hampir pasti mereka menjalankan manajemen kredensial yang serius, mesin akses berhak istimewa yang mengatur siapa boleh masuk ke mana. Semuanya tidak berarti, karena semuanya menjaga sisi rumah yang salah.

Apa yang sebenarnya terjadi

Token pertama itu cukup berhak istimewa untuk meng-clone repositori privat Novo Nordisk. Dan repositori itu penuh dengan kredensial lain — karena di situlah kredensial mesin berada, di hampir setiap perusahaan di dunia: hard-coded di source code, tergeletak di config, tertanam di pipeline CI, di-commit sekali lalu terlupakan. Meng-clone repo tidak hanya menyerahkan source code kepada penyerang. Itu menyerahkan rangkaian kunci berikutnya, dan rangkaian setelahnya.

Begitulah satu token ceroboh berubah menjadi kompromi total. Sebuah kelompok yang menamakan diri FulcrumSec mengatakan telah berpindah-pindah lewat jalur ini selama dua setengah bulan dan pergi dengan lebih dari 700.000 file — sekitar 1,3 terabyte — termasuk source code, data obat yang dipasarkan dan belum dirilis, catatan uji klinis, teknologi manufaktur, serta model AI internal perusahaan [3]. Ketika tebusan yang dilaporkan sebesar $25 juta ditolak, mereka mulai mempublikasikan hasil rampasannya. (Novo Nordisk telah mengonfirmasi akses tidak sah ke sejumlah sistem terbatas; cakupan penuhnya adalah klaim penyerang, belum diverifikasi secara independen [1][3].)

Satu token yang bocor adalah gagang pintunya. Repositori yang penuh kredensial aktif adalah bangunan tak terkunci di baliknya.

Ini bukan kelalaian. Ini celah kategori.

Manajemen kredensial perusahaan — brankas setingkat CyberArk, perkakas akses berhak istimewa yang dijalankan setiap perusahaan besar — dibangun untuk manusia: akun manusia, sesi login, siapa boleh mencapai apa. Untuk itu, ia bekerja. Kredensial yang merambat dalam pelanggaran ini berada di sisi yang sama sekali berbeda. Token di JavaScript, rahasia di repo, kunci di pipeline CI adalah kredensial mesin — yang dipakai aplikasi, layanan, dan kini agen untuk saling mengautentikasi, tanpa manusia dalam alurnya. Sisi itu tidak pernah punya brankas.

Dan itulah sisi yang sedang meledak. Setiap integrasi baru, setiap microservice, setiap agen AI yang Anda terapkan melipatgandakan kredensial mesin aktif yang tidak diatur siapa pun. Bahayanya berpindah ke sisi aplikasi-dan-agen, sementara perkakasnya tidak ikut berpindah. Maka post-mortem akan berujung pada "jangan taruh token di JavaScript," dan itu melawan pertempuran yang salah. Token akan selalu bocor — ke log, tangkapan layar, bundle yang terlupakan. Anda tidak bisa menang dalam hal tidak pernah mengekspos kredensial pertama. Yang mengubah satu kebocoran menjadi 1,3 terabyte adalah bangunan kredensial mesin aktif yang berada di baliknya, di dalam kode, menunggu untuk di-clone. Dapatkan satu, dapatkan peta ke sisanya.

Dirancang untuk ini, dengan sengaja

Celah itulah alasan keberadaan Clavitor: sebuah brankas untuk sisi yang tidak pernah dirancang untuk CyberArk — kredensial yang dipakai aplikasi dan agen. Dengan Clavitor tidak ada kredensial di repositori untuk dipanen. Kode tidak pernah menyimpan rahasia yang bisa ia commit; kode meminta brankas untuk penggunaan sebuah kredensial pada saat ia membutuhkannya, dan nilainya tidak pernah masuk ke source, config, atau build. Penyerang yang mencuri token pertama dan meng-clone setiap repo yang Anda miliki akan menemukan persis seperti yang seharusnya ada di sana: kode, tanpa kunci. Rantai yang mengubah satu kebocoran menjadi segalanya putus di mata rantai pertama.

Token masuk dilucuti dengan cara yang sama. Kredensial Clavitor dibatasi untuk satu tindakan dan kedaluwarsa, sehingga token yang ditemukan di bundle yang tersesat bukan lagi kunci serba bisa — ia tidak bisa meng-clone organisasi atau mencapai rahasia berikutnya, karena ia hanya berlaku untuk satu hal yang menjadi namanya. Ia terikat pada mesin tempat ia diterbitkan, sehingga salinan yang dipakai di tempat lain menjadi mati. Tidak ada satu kredensial pun yang menjadi saluran eksfiltrasi diam-diam: setiap pemberian akses dibatasi lajunya dan memicu penguncian pada lonjakan anomali, sehingga 700.000 file tidak lolos satu permintaan yang tampak wajar demi satu permintaan selama sepuluh minggu. Dan setiap penggunaan dicatat di luar mesin dan dirantai hash, yang membuat kediaman diam-diam jauh lebih sulit dilakukan ketika catatannya tidak berada di mesin yang dimiliki penyusup.

Semua ini tidak membuat Anda tak tertembus, dan siapa pun yang menjanjikan itu sedang menjual sesuatu. Hard-code kunci induk berumur panjang dan siapa pun yang menemukannya bisa memakainya, sekali, untuk apa yang diizinkannya. Yang berubah adalah bahwa menemukan satu kredensial tidak lagi menyerahkan sisanya: tidak ada repositori penuh rahasia aktif di baliknya, tidak ada rantai dari kebocoran ke 1,3 terabyte. Radius ledakan token yang bocor menyusut kembali ke token itu sendiri.

Bagian yang layak dipetik

Berita utamanya akan soal formula obat dan lelang dark web, dan itulah bagian yang terasa menyakitkan. Pelajarannya lebih tenang: sebuah perusahaan canggih dengan manajemen kredensial yang nyata tetap saja masuk sedalam 1,3 terabyte — karena brankasnya mengawasi manusia sementara pelanggaran masuk lewat aplikasi. Kredensial mesin adalah tempat bahaya berada sekarang, dan itulah satu-satunya sisi yang masih tergeletak di tempat terbuka. Jawabannya bukan membersihkan repo Anda — melainkan kredensial yang tidak pernah aktif di dalamnya untuk dibersihkan, yang bahkan ketika dicuri hanya berlaku untuk satu tindakan terbatas, tanpa lemari kunci di baliknya. Kebocoran tetaplah kebocoran. Ia hanya berhenti menjadi kunci untuk segalanya.

Kami menuliskan aturan yang harus dipatuhi sebuah perkakas kredensial untuk sisi aplikasi-dan-agen — sepuluh aturan lengkapnya ada di sini.

Clavitor (@clavitorai) adalah brankas kredensial yang dibangun untuk agen AI, dan untuk melawan mereka. clavitor.ai

Sumber

[1] Novo Nordisk (@novonordisk) — Incident update. Mengonfirmasi akses tidak sah ke sejumlah sistem TI internal yang terbatas.

[2] CybelAngel (@CybelAngel) — Novo Nordisk Was Breached Through JavaScript: what the coverage got wrong. Melacak akses awal ke token akses berhak istimewa tinggi yang tertinggal di JavaScript sisi klien yang diminifikasi pada subdomain publik yang terlupakan.

[3] TechRepublic (@TechRepublic) — Ozempic Maker Novo Nordisk Confirms Security Incident After $25M Hacker Demand. Kelompok FulcrumSec mengklaim masa tinggal ~2,5 bulan dan ~700.000 file / 1,3TB — source code, data obat yang dipasarkan dan belum dirilis, catatan uji klinis, dan model AI internal — setelah meng-clone repositori dan memanen kredensial lebih lanjut; data bocor setelah tebusan ditolak.