Security Blog

Anda membagi pekerjaan ke tiga belas agen. Paperclip tidak membagi kuncinya.

#257

October 2, 2026 · By Marketing team

← All posts

Pemindaian terhadap kerangka kerja agen berbintang 71.000 menemukan dua belas dari tiga belas agennya membawa token plaintext yang sama. Begitu Anda menjalankan armada agen, 'rahasia hidup di dalam konfigurasi' berhenti menjadi jalan pintas dan berubah menjadi pengali.

Anda melakukan hal yang modern. Alih-alih satu agen besar, Anda membangun sebuah armada — satu untuk menangani tiket, satu untuk menulis teks, satu untuk menjalankan alur desain, selusin lebih, masing-masing dengan tugas dan konfigurasinya sendiri. Rasanya lebih aman begitu. Radius dampak lebih kecil. Lebih banyak hak akses minimum.

Lalu sebuah pemindaian keamanan menelusuri konfigurasi kerangka kerja agen berbintang 71.000 bernama Paperclip dan menemukan bahwa dua belas dari tiga belas agennya membawa kredensial yang sama — sebuah token identik, ditempel sebagai plaintext ke dalam konfigurasi setiap agen [1]. Satu kunci API Anthropic ditanam langsung dalam konfigurasi seorang agen desain secara terbuka. Sebuah token bot yang ditujukan untuk satu agen dapat dibaca oleh agen-agen yang tidak berkepentingan dengannya.

Tiga belas pintu. Satu kunci, disalin ke dalam dua belas pintu itu. Ambil kunci itu dari agen terlemah, dan Anda menguasai sebelas sisanya.

Apa yang sebenarnya terjadi

Paperclip memberi setiap agen sebuah konfigurasi server MCP — berkas yang memberi tahu agen alat dan layanan mana yang dapat dijangkaunya, serta cara berautentikasi ke layanan-layanan itu. Di suatu titik, rahasia masuk begitu saja ke dalam berkas-berkas tersebut sebagai teks harfiah: sebuah JWT n8n, sebuah token bearer, sebuah kunci API Anthropic. Bukan sebagai referensi. Bukan disuntikkan saat runtime. Diketik langsung — dan kemudian, karena membuat agen berikutnya tinggal salin-tempel, diduplikasi ke seluruh armada.

Pemindaian itu menandai tiga hal. Token plaintext yang dipakai bersama di dua belas agen (dinilai HIGH). Kunci Anthropic yang tersimpan terbuka dalam konfigurasi seorang agen desain (dinilai CRITICAL). Dan sebuah token bot yang cakupannya diberikan ke agen-agen yang tidak ditujukan untuknya — sebuah kekeliruan hak akses minimum yang jelas [1]. Bagi kami, tim Paperclip bergerak cepat: mereka bermigrasi ke referensi kredensial, menyensor konfigurasi pada pembacaan lintas agen, dan mulai menegakkan sinkronisasi binding [2]. Arah yang benar.

Ini bukan soal Paperclip ceroboh

Inilah bagian yang layak direnungkan. Paperclip melakukan apa yang hampir setiap kerangka kerja lakukan. Menaruh sebuah rahasia di berkas konfigurasi adalah cara perangkat lunak telah berautentikasi selama tiga puluh tahun. Cara itu berhasil karena ada satu aplikasi, satu konfigurasi, satu operator yang tahu di mana kuncinya berada.

Era berubah di bawah kebiasaan itu. Sistem multi-agen bukanlah satu aplikasi dengan satu konfigurasi — melainkan selusin proses, masing-masing dengan sebuah berkas, masing-masing salinan dari yang sebelumnya. Plaintext-dalam-konfigurasi adalah jalan pintas yang masih bisa ditoleransi ketika hanya ada satu tempat untuk bocor. Pada tiga belas, jalan pintas yang sama berarti satu kebocoran menjadi tiga belas kebocoran — dan "agen mana yang melakukan itu?" tidak punya jawaban, karena token di dalam log milik mereka semua.

Referensi kredensial — perbaikan yang dirilis Paperclip — memang lebih baik. Namun perhatikan apa yang berubah dan apa yang tidak. Sebuah referensi tetap merujuk ke rahasia nyata di tempat agen berjalan; agen itu, atau apa pun yang membajaknya, tetap dapat membaca nilai hasil resolusinya. Dan pelacak bug kerangka kerja itu sendiri sudah menunjukkan mode kegagalan berikutnya: sebuah referensi yang tidak sinkron dengan binding-nya, sehingga konfigurasi terlihat terisi sementara validasi diam-diam gagal [3]. Rahasia itu mundur satu lapis. Ia tidak keluar dari gedung.

Ini bukan hanya Paperclip

Minggu yang sama, akar masalah yang sama, repositori berbeda. Sebuah agen pemrograman yang banyak digunakan dilaporkan karena mencetak nilai .env mentah — kata sandi, token, kunci API — langsung ke dalam keluaran chat-nya. Pelari agen lain ketahuan menyerahkan seluruh environment induknya ke subproses, sehingga setiap kunci penyedia terlihat oleh proses anak [4]. Sebuah voice hook menulis transkrip, lengkap dengan kredensial, ke /tmp yang dapat dibaca semua orang [5]. Tim-tim yang independen, model ancaman yang independen, satu asumsi yang sama: bahwa tidak masalah bagi rahasia untuk tinggal di tempat agen dapat melihatnya. Seluruh argumen yang harus dibangun penyerang hanyalah bahwa itu tidak benar.

Dirancang untuk ini, dengan sengaja

Clavitor berangkat dari asumsi yang berlawanan: agen tidak pernah memegang kredensial sama sekali. Agen meminta sebuah tindakan; permintaan itu dicegat, diautentikasi terhadap sebuah rahasia yang tidak dapat dibaca agen, lalu dipenuhi. Tidak ada konfigurasi untuk menempelkan token, karena tidak ada token di dalam konfigurasi. Tidak ada yang perlu disalin ke tiga belas agen, karena environment agen tidak pernah menyimpan hal yang layak dicuri.

Setiap agen hanya menjangkau apa yang ditujukan untuknya — bukan seluruh penyimpanan — sehingga sebuah token bot tidak akan berakhir terbaca oleh agen yang tidak pernah memintanya. Dan setiap tindakan dicatat ke aktor spesifik yang melakukannya, tidak pernah ke token bersama yang dimiliki dua belas agen — sehingga "yang mana yang melakukan itu?" punya jawaban.

Sisi jujurnya: ini tidak membuat sebuah agen kebal diretas. Agen yang dibajak tetap dapat melakukan, pada saat itu, hal-hal yang memang diizinkan untuk dilakukannya. Yang tidak dapat dilakukannya adalah membawa lari kunci dan menjadi dua belas agen lainnya — karena tidak ada kunci di tangannya untuk dibawa lari.

Pelajarannya bukan "rotasi token"

Paperclip akan merotasikan token, menuntaskan migrasi, dan menutup isu-isu itu. Bagus — memang seharusnya begitu. Tapi rotasi itu bukan pelajarannya. Pelajarannya adalah pada saat Anda memiliki sebuah armada alih-alih satu aplikasi, "rahasia hidup di dalam konfigurasi" berhenti menjadi jalan pintas dan berubah menjadi pengali. Anda tidak memperbaiki sebuah pengali dengan membuat rahasia sedikit lebih sulit dibaca. Anda memperbaikinya dengan memastikan rahasia itu tidak pernah berada di tangan agen sejak awal.

Kami menuliskan aturan yang menurut kami harus dipatuhi sebuah perkakas kredensial di era agen — antara lain, bahwa rahasia tidak pernah tinggal di tempat kode berjalan, dan bahwa sebuah agen hanya menjangkau apa yang ditujukan untuknya. Uji sistem Anda terhadap aturan-aturan itu: clavitor.ai/rules.

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

Sumber

[1] Kerangka kerja agen Paperclip — temuan kebersihan kredensial (CFG-H1 token plaintext bersama, CFG-C1 kunci Anthropic yang ditanam langsung, CFG-H2 token bot dengan cakupan keliru): https://github.com/paperclipai/paperclip

[2] Paperclip — menegakkan sinkronisasi secret-binding agen di seluruh alur siklus hidup (digabungkan): https://github.com/paperclipai/paperclip/pull/8307

[3] Paperclip — entri env secret_ref dapat menyimpang dari baris secret_bindings, konfigurasi tampak terisi tetapi validasi gagal secara diam-diam (#8309): https://github.com/paperclipai/paperclip/issues/8309

[4] Chetter — runBatchAgent mewarisi seluruh environment pelari, mengekspos kunci API penyedia ke subproses (#56): https://github.com/flatout-works/chetter/issues/56

[5] Voice hook Claude Code — transkrip lengkap (termasuk kredensial) ditulis ke /tmp yang dapat dibaca semua orang (#58): https://github.com/rodlaneedu-hash/claude-code-voice-hook/issues/58