Blog

Bagaimana Repositori Milik Orang Lain Dapat Membajak Claude Code: 7 Aturan Perlindungan

Markdown

Empat jalur injeksi prompt tidak langsung yang terdokumentasi melalui repositori, konten GitHub, peristiwa Sentry, dan metadata MCP, dengan riset primer serta batas pembatasan praktis.

Baca artikel lengkap

Poin utama

Riset yang dipublikasikan menggambarkan empat jalur injeksi tidak langsung: petunjuk penyiapan, konten GitHub, telemetri, dan metadata alat MCP. Laporan ini terbit pada tanggal berbeda serta menyangkut klien dan pengaturan izin berbeda. Berikut sumber primer serta langkah pembatasan praktisnya; tidak ada file pengaturan yang menjamin kekebalan.

Dokumentasi Ailoot: API, kunci, dan penyiapan.

Empat jalur terdokumentasi dari teks tidak tepercaya ke tindakan agen

Poin utama

Contoh ini menyangkut periode riset serta pengaturan klien berbeda, bukan empat penemuan dalam dua minggu. Contoh menggambarkan bagaimana materi tidak tepercaya dapat memengaruhi penggunaan alat agen; kekurangan implementasi, kredensial tersedia, serta izin eksekusi menentukan hasilnya.

Secara formal, ini disebut injeksi prompt tidak langsung: instruksi berbahaya tidak datang langsung dari Anda, melainkan melalui data yang diproses agen saat menjalankan tugas—README dari pihak lain, pesan error, komentar GitHub, atau respons dari layanan eksternal. Anda boleh melupakan istilah itu setelah paragraf ini; selanjutnya, saya akan menggunakan bahasa sederhana.

Empat contoh riset yang dibahas di bawah:

  1. Repositori yang tampak tidak berbahaya ditunjukkan dapat berubah menjadi reverse shell.
  2. Judul Pull Request ditunjukkan dapat membajak tiga agen AI sekaligus.
  3. Agen ditunjukkan dapat menerima laporan error palsu dari Sentry alih-alih laporan yang sebenarnya.
  4. Metadata alat MCP dapat membawa instruksi yang memengaruhi perilaku agen; pengaruhnya tidak otomatis setara dengan wewenang prompt sistem.

Bagaimana README repositori yang tampak tidak berbahaya berubah menjadi reverse shell?

Poin utama

Repositori yang tampak biasa dapat dikloning dan dijalankan oleh Claude Code, lalu agen dapat mengikuti petunjuk instalasi. Pesan error pada proses pertama dapat menyarankan perintah “perbaikan” yang menyelesaikan rekaman DNS dan meluncurkan reverse shell. Sumber yang dikutip mendemonstrasikan tekniknya; sumber itu tidak membuktikan seberapa sering teknik dipakai dalam insiden nyata.

Bukti konsep 0DIN tanggal 25 Juni 2026 menunjukkan mekanisme ini. Setiap lapisannya dirancang tampak tidak mencurigakan jika dilihat sendiri:

  1. Anda mengkloning repositori yang tampak biasa dan meminta Claude Code menjalankannya.
  2. Repositori tersebut mengambil paket Python yang sengaja dirancang agar gagal saat pertama kali digunakan.
  3. Pesan error dengan sopan menyarankan perintah “perbaikan”: python3 -m axiom init.
  4. Perintah init menjalankan setup.sh.
  5. Skrip menanyakan rekaman DNS TXT (biasanya digunakan untuk catatan terkait domain, tetapi kolom ini menerima teks apa pun). Penyerang menaruh perintah berkode base64 di sana (cara mengubah data apa pun menjadi teks biasa tanpa spasi atau karakter khusus), lalu langsung menyalurkannya ke bash.
  6. Nilai rekaman DNS dapat diubah kapan saja—sehingga penyerang mendapat reverse shell interaktif dengan izin pengguna Anda dan akses ke semua rahasia di mesin.

Payload yang didemonstrasikan diambil saat runtime dari DNS, sehingga memindai byte repositori saja tidak menampilkan payload akhir tersebut. Itu tidak membuktikan setiap pemindai atau kontrol runtime tidak berdaya: pemeriksaan konten yang diambil, pemantauan proses, dan pembatasan jaringan dapat mengungkap atau memutus rantai. Sumber ini bukti konsep, bukan pengukuran prevalensi insiden dunia nyata.

Bagaimana judul Pull Request membajak tiga agen AI yang berbeda?

Poin utama

Laporan riset Comment and Control, diterbitkan 15 April 2026 dan diperbarui 4 Mei, mendokumentasikan jalur injeksi teks GitHub berbeda pada Claude Code Security Review, Gemini CLI Action, dan Copilot Agent. Penurunan tingkat keparahan bukan bukti seluruh kelas injeksi diperbaiki; laporan menjelaskan respons vendor dan pembatasan alat Claude tertentu.

Peneliti menjelaskan jalur dan respons berikut; ini laporan historis, bukan verifikasi setiap versi produk saat ini:

AgenCara serangan masukYang bocorStatus saat ini
Claude Code Security ReviewJudul PR disisipkan langsung ke prompt sistem tanpa sanitasiANTHROPIC_API_KEY, GITHUB_TOKENPeneliti melaporkan pembatasan ps dan perubahan dokumentasi; tingkat keparahan berubah menjadi None pada 20 April 2026
Gemini CLI ActionBagian “Trusted Content” palsu dalam komentar melewati instruksi keselamatanGEMINI_API_KEYGoogle menambahkan prompt pengaman terpisah ke prompt sistem
GitHub Copilot AgentPayload disembunyikan dalam komentar HTML Markdown yang tak terlihatGITHUB_COPILOT_API_TOKEN, COPILOT_JOB_NONCEGitHub menganggap ini keterbatasan arsitektur, bukan bug

Hampir lima bulan berlalu antara laporan pertama dan terakhir dalam siklus pengungkapan ini (laporan Claude Code pertama dibuat pada 17 Oktober 2025; perbaikan bug GitHub Copilot terakhir dilakukan pada 9 Maret 2026). Perubahan tingkat keparahan serta mitigasi pada laporan tidak membuktikan penutupan lengkap setiap payload yang mungkin. Repositori PoC peneliti mendokumentasikan jalur Claude yang didemonstrasikan; jangan jalankan payload serangannya terhadap sistem nyata. Manfaatnya bagi Anda terletak pada pola serangannya sendiri: data yang belum diverifikasi dari GitHub masuk ke agen, agen menjalankan perintah, lalu rahasia bocor melalui GitHub yang sama—penyerang tidak memerlukan server eksternal.

Dua analisis saja sudah cukup untuk melihat polanya: memperbaiki setiap temuan baru satu per satu tidaklah mungkin; kerentanan semacam ini muncul setiap dua minggu. Menuliskan aturan keamanan secara eksplisit di CLAUDE.md dan settings.json alih-alih hanya mengingatnya adalah bagian dari rekayasa konteks: tetapkan sekali, dan aturan itu berlaku otomatis di setiap sesi Claude Code baru, tanpa pengingat. Tiga pilar bekerja bersama: Kloning AI + Otak Kedua + Rekayasa Konteks—kombinasi ini mengubah Claude Code dari pelaksana yang memercayai segalanya menjadi agen dengan aturan eksplisit.

Bisakah laporan error Sentry palsu mengambil alih agen Anda?

Peristiwa error buatan dapat dikirim ke endpoint penampung data Sentry tanpa autentikasi selain DSN itu sendiri. Penyerang sepenuhnya mengendalikan isi peristiwa.

Serangan ini hanya memerlukan kunci DSN Sentry—pengenal publik yang sering dicantumkan langsung oleh banyak proyek dalam kode sisi klien:

Mekanismenya sederhana: pengembang meminta agen memeriksa error Sentry yang masih terbuka; agen memintanya melalui server MCP, menerima peristiwa berbahaya yang bercampur dengan peristiwa nyata, lalu membaca perintah yang disisipkan di dalamnya sebagai instruksi tepercaya untuk memperbaiki error—karena secara formal, memang itulah tugas yang diminta darinya.

Tenet melaporkan kontrol yang ada tidak memberi peringatan dalam lingkungan pengujiannya. Itu tidak membuktikan eksekusi tanpa jejak pada semua deployment: log agen/alat, telemetri endpoint, dan catatan jaringan dapat merekam tindakan berikutnya. Serangan dimulai melalui telemetri yang dikirim dari luar, lalu bergantung pada alat serta izin efektif agen.

Mengapa deskripsi alat MCP sama berbahayanya dengan prompt sistem?

Poin utama

Metadata alat dapat membawa instruksi yang memengaruhi model, tetapi tidak otomatis setara dengan wewenang prompt sistem. MCPTox, pertama diajukan 19 Agustus 2025, mengevaluasi peracunan alat pada alat MCP realistis dan melaporkan kerentanan yang berbeda menurut model serta pengaturan. Pengamatan bahwa model lebih mumpuni dapat lebih rentan merupakan hasil dalam benchmark itu, bukan hukum universal.

Redaksi Microsoft adalah yang paling tepat yang saya temukan tentang hal ini:

Teknik ini disebut peracunan alat: instruksi yang disembunyikan dalam deskripsi alat yang tampak biasa dapat membuat agen bertindak sesuai instruksi tersebut.

MCPTox melaporkan kerentanan terhadap peracunan alat yang bergantung pada model serta pengaturan pengujian. Pengamatan tentang model lebih mumpuni yang dapat lebih rentan berlaku dalam benchmark tersebut; itu bukan bukti bahwa kepatuhan instruksi selalu memperburuk ketahanan atau bahwa perlindungan hanya bergantung pada keberuntungan.

Apa kesamaan serangan ini—dan apa yang dapat terlewat oleh deteksi?

Poin utama

Keempat temuan mengeksploitasi titik buta yang sama: agen tidak membedakan “data yang harus dianalisis” dari “instruksi yang harus diikuti”. Pemindaian repositori saja dapat melewatkan payload yang diberikan kemudian melalui alat atau data jaringan. Deteksi tetap berguna, tetapi perlu mempertimbangkan seluruh jalur eksekusi. Gabungkan dengan batas file, kredensial, alat, dan akses jaringan alih-alih mengandalkan agen mengenali instruksi.

Kesimpulannya berlaku untuk keempat temuan: Anda tidak dapat mengandalkan “kodenya tampak biasa”—setiap langkah dalam serangan memang tidak berbahaya jika dilihat sendiri. Batasi kemampuan efektif agen dan periksa tindakan yang diusulkannya; deteksi serta pembatasan menangani bagian serangan yang berbeda.

Perlindungan apa yang sudah dimiliki Claude Code—dan mengapa itu belum cukup?

Poin utama

Claude Code memiliki perlindungan bawaan: menganalisis seluruh prompt untuk mencari instruksi mencurigakan, menggunakan jendela konteks terisolasi untuk konten web, memeriksa kepercayaan saat pertama kali dijalankan di folder baru dan saat menghubungkan server MCP. Namun, flag --dangerously-skip-permissions yang digunakan banyak orang untuk menonaktifkan pertanyaan izin yang menjengkelkan akan menonaktifkan semua perlindungan ini sekaligus.

Anthropic mengakui masalah ini secara langsung dalam dokumentasinya, alih-alih menyembunyikannya:

Injeksi prompt adalah teknik ketika penyerang berupaya mengganti atau mengubah instruksi asisten AI dengan menyisipkan teks berbahaya. Claude Code menyertakan beberapa perlindungan terhadap serangan ini.

— Dokumentasi Claude Code, https://code.claude.com/docs/en/security

Menurut dokumentasi, agen menganalisis seluruh prompt untuk mencari instruksi mencurigakan, tidak otomatis menyetujui curl dan wget, menyimpan konten web di jendela konteks terpisah agar tidak tercampur dengan konteks utama, dan meminta konfirmasi kepercayaan saat pertama kali Anda menjalankannya di basis kode baru atau menghubungkan server MCP baru.

Namun, ada catatan tegas yang disampaikan Anthropic secara blak-blakan:

Mode bypassPermissions tidak memberikan perlindungan terhadap injeksi prompt atau tindakan yang tidak diinginkan.

— Dokumentasi Claude Code, https://code.claude.com/docs/en/permission-modes

Jika Anda pernah meluncurkan Claude Code dengan --dangerously-skip-permissions karena kesal agar “berhenti mengganggu dengan pertanyaan”, saat itulah Anda menonaktifkan semua mekanisme yang dapat menghentikan keempat serangan di atas. Saya sengaja membiarkan flag ini tetap nonaktif, bahkan ketika Claude Code bertanya lagi untuk kesepuluh kalinya dalam satu sesi—memang menjengkelkan, tetapi pertanyaan-pertanyaan itulah batas antara “agen membaca teks mencurigakan” dan “agen menjalankannya”. Penyiapan yang masuk akal bagi nonprogrammer adalah mode izin standar (default atau acceptEdits) dengan sandbox aktif: penyuntingan berkas biasa berlangsung tanpa pertanyaan tambahan, sedangkan perintah terminal secara fisik tidak dapat keluar dari sandbox, sekalipun agen telah tertipu.

Bagaimana mengaktifkan mode sandbox dan menutup celah yang secara default dibiarkannya?

Poin utama

Perintah /sandbox dalam sesi Claude Code membatasi lokasi agen dapat menulis dan domain yang dapat dihubunginya. Fitur ini langsung berfungsi di macOS; Linux dan WSL2 memerlukan paket bubblewrap dan socat. Satu detail penting: secara default, sandbox tidak memblokir pembacaan berkas seperti ~/.ssh—Anda harus mengaktifkannya secara terpisah.

Untuk mengaktifkannya secara permanen di semua proyek, lakukan satu perubahan pada ~/.claude/settings.json:

{
  "sandbox": { "enabled": true }
}

Secara default, perintah dalam sandbox hanya dapat menulis ke direktori kerja proyek dan direktori sementara sesi. Akses jaringan melalui proksi—belum ada domain yang diizinkan sebelumnya, dan Claude Code akan meminta konfirmasi saat pertama kali menghubungi domain baru. Menurut Anthropic, fitur ini sangat mengurangi permintaan izin—sebesar 84% menurut pengukuran internal perusahaan—karena sandbox menangani sendiri beberapa situasi aman alih-alih bertanya setiap kali.

Celah yang masih terbuka dalam pengaturan standar: secara default, sandbox membatasi penulisan, tetapi tidak mencegah pembacaan berkas seperti ~/.aws/credentials dan ~/.ssh. Berkas-berkas itulah yang menjadi sasaran dalam serangan di atas. Tutup celah tersebut dengan bagian terpisah dalam berkas yang sama:

{
  "sandbox": {
    "enabled": true,
    "credentials": {
      "files": [
        { "path": "~/.aws/credentials", "mode": "deny" },
        { "path": "~/.ssh", "mode": "deny" }
      ],
      "envVars": [
        { "name": "GITHUB_TOKEN", "mode": "deny" },
        { "name": "NPM_TOKEN", "mode": "deny" }
      ]
    }
  }
}

Intinya, sekalipun reverse shell dari analisis pertama terbuka di dalam sandbox, variabel dan berkas ini secara fisik dihapus dari lingkungan proses sebelum proses dimulai—tak ada yang tersisa untuk dicuri.

Aturan permissions.deny apa yang sebaiknya Anda tambahkan hari ini?

Poin utama

permissions.deny di settings.json memblokir tindakan tertentu pada tingkat aturan, alih-alih menganalisis niat—dan Anthropic secara eksplisit menjamin bahwa aturan deny selalu mengesampingkan aturan allow. Aturan deny membatasi tindakan alat yang cocok, tetapi bukan batas akses tingkat OS; perintah tidak langsung dan alat lain memerlukan kontrol sendiri.

Kumpulan minimal bagi nonprogrammer yang sekaligus mencakup sasaran utama dari keempat serangan:

{
  "permissions": {
    "deny": [
      "Read(~/.ssh/**)",
      "Read(~/.aws/credentials)",
      "Read(.env)",
      "Bash(curl *)",
      "Bash(wget *)",
      "Bash(sudo *)"
    ]
  }
}

Menurut dokumentasi Claude Code, aturan deny selalu lebih diutamakan daripada aturan allow. Jadi, sekalipun Anda (atau agen itu sendiri) secara tidak sengaja mengizinkan akses yang lebih luas di tempat lain, aturan deny yang spesifik tetap diterapkan lebih dahulu. Prioritas aturan ini berlaku untuk permintaan alat yang cocok. Itu tidak membuktikan rahasia tidak terjangkau melalui setiap subprocess atau alat; gunakan juga pembatasan sistem berkas serta lingkungan yang ditegakkan.

Claude Code juga memiliki mode auto, yang menggunakan model pengklasifikasi terpisah untuk memeriksa tindakan sebelum dijalankan—model ini berbeda dari model yang berbicara dengan Anda. Secara default, model ini memblokir, antara lain, pola “unduh kode lalu langsung jalankan” (curl | bash). Anthropic secara eksplisit memperingatkan bahwa ini adalah mode riset yang mengurangi jumlah prompt, tetapi tidak menjamin keamanan dengan sendirinya—anggaplah ini sebagai lapisan tambahan, bukan pengganti sandbox dan permissions.deny.

Bagaimana memeriksa repositori dan server MCP sebelum memercayakannya kepada agen?

Poin utama

Sebelum meminta Claude Code menjalankan repositori dari pihak lain, periksa usianya, riwayat commit, dan asal tautannya. Sebelum memasang server MCP, gunakan hanya sumber tepercaya dan ingat bahwa Anthropic sendiri tidak memeriksa keamanan server pihak ketiga. Kedua daftar periksa ini hanya memerlukan beberapa menit dan mencakup titik masuk yang digunakan dalam keempat serangan di atas.

Untuk repositori, berikut daftar periksa singkat sebelum menyerahkannya kepada agen:

  1. Jangan langsung memasang dari tautan di email, kiriman, atau ulasan dari sumber yang tidak dikenal.
  2. Jika instalasi menghasilkan error yang menyuruh Anda “jalankan perintah X untuk memperbaikinya”, baca apa yang sebenarnya dilakukan X sebelum mengizinkan Claude Code menjalankannya. Instruksi dalam analisis di atas tampak sepenuhnya rutin—memang itulah tujuannya.
  3. Periksa usia repositori dan riwayat commit-nya, bukan hanya jumlah bintangnya—repositori yang baru dibuat dapat dengan mudah diberi bintang palsu khusus untuk serangan semacam ini.
  4. Jika repositori tidak dikenal, jalankan instalasinya di mesin virtual, bukan di mesin kerja Anda yang menyimpan kunci sungguhan. Ini adalah rekomendasi langsung Anthropic sendiri untuk bekerja dengan layanan eksternal.

Sikap Anthropic mengenai server MCP dinyatakan secara terbuka:

Kami menyarankan Anda menulis server MCP sendiri atau menggunakan server dari penyedia yang Anda percayai. Anthropic meninjau konektor berdasarkan kriteria pencantumannya sebelum menambahkannya ke direktori, tetapi tidak melakukan audit keamanan atau mengoperasikan server MCP mana pun.

— Dokumentasi Claude Code, https://code.claude.com/docs/en/security

Artinya, Anda bertanggung jawab memeriksa server MCP pihak ketiga, bukan platform tempat Anda memasangnya. Beberapa tim—terutama perusahaan rintisan keamanan—sudah membangun alat untuk keperluan ini: pemindai konfigurasi MCP yang mencari deskripsi beracun, serta fitur “pinning” alat yang menyimpan hash deskripsi saat pertama kali dipasang dan menandai setiap perubahan berikutnya. Teknologi ini masih baru, jadi terlalu dini untuk mengandalkannya sebagai satu-satunya perlindungan—tetapi tetap layak dipantau, terutama jika Anda menghubungkan server MCP ke sistem produksi. Untuk koneksi semacam itu, Anda dapat menetapkan versi paket dan mencatat sidik jari deskripsi alat dalam log audit.

7 aturan perlindungan: daftar periksa hari ini

Poin utama

Semua isi panduan ini dapat diringkas menjadi tujuh tindakan konkret: tiga perubahan dalam satu berkas settings.json (sandbox, kredensial, permissions.deny) dan empat kebiasaan saat menangani kode, error, dan server MCP milik orang lain. Tidak satu pun memerlukan pengetahuan khusus—seluruh daftar periksa ini memerlukan waktu kurang dari 20 menit.

  1. Aktifkan mode sandbox (/sandbox atau "sandbox": {"enabled": true} di ~/.claude/settings.json) dan tambahkan blok credentials yang mencegah pembacaan ~/.ssh dan ~/.aws/credentials.
  2. Tambahkan aturan permissions.deny untuk mencegah pembacaan berkas rahasia dan menjalankan perintah bash berbahaya (curl, wget, sudo)—deny selalu mengesampingkan allow.
  3. Jangan pernah menjalankan --dangerously-skip-permissions pada kode asing atau yang belum diverifikasi—flag ini menonaktifkan semua perlindungan sekaligus, termasuk perlindungan yang dapat menghentikan serangan-serangan ini.
  4. Jangan biarkan Claude Code menjalankan perintah “perbaikan” dari pesan error secara otomatis—baca dahulu apa yang sebenarnya dilakukan perintah itu.
  5. Pasang server MCP hanya dari sumber yang Anda percayai, dan ingat bahwa Anthropic tidak memeriksanya demi keamanan Anda.
  6. Pisahkan sesi berdasarkan izin: satu sesi menangani data pribadi Anda dan tidak melihat data eksternal; sesi kedua memeriksa email, repositori, dan tiket milik orang lain tetapi tidak memiliki akses ke rahasia; sesi ketiga menerbitkan konten secara eksternal—dan hanya yang Anda setujui sendiri. Saya menerapkan pemisahan ketat ini dalam proyek saya sendiri: sesi yang memiliki akses ke kunci pembayaran tidak pernah membaca tiket atau repositori eksternal sembarangan, sementara sesi yang mengurai kode orang lain sama sekali tidak melihat rahasia. Jangan campur peran-peran ini dalam satu chat.
  7. Selalu perbarui Claude Code dan skrip otomasi yang terhubung—sebagian besar celah yang dibahas di sini sudah ditutup dengan patch saat panduan ini diterbitkan, dan celah baru diperbaiki dengan cara serupa.

Selanjutnya

Tak satu pun lapisan ini menjamin keamanan—Anthropic sendiri dengan jujur menyatakan bahwa tidak ada perlindungan yang memberikan kekebalan penuh. Saya tidak mengharapkan Claude Code mengenali sendiri tipu daya dalam pesan error atau komentar issue. Bagi saya, sandbox dan permissions.deny merupakan bagian dari cara mengelola konteks proyek: apa yang dilihat agen, apa yang dipercaya secara default, dan apa yang terjadi ketika agen membuat kesalahan.

Jika Anda memerlukan akses ke jaringan saraf melalui Ailoot, kunjungi Ailoot.

Rincian selengkapnya

Pertanyaan tentang Bagaimana repositori orang lain meretas Claude Code pada 2026: 7 aturan perlindungan

Apakah keberhasilan 85% yang dilaporkan memprediksi risiko pengaturan saya saat ini?

Tidak. Itu agregat Tenet dari gelombang validasi terkontrol, tanpa daftar model publik lengkap, harness yang dapat direproduksi, atau penyebut jumlah percobaan tepat. Alat, persetujuan, kredensial, dan akses jaringan agen menentukan tindakan yang mungkin.

Mengapa memindai repositori hasil kloning saja tidak cukup?

Payload akhir dapat tiba kemudian melalui laporan kesalahan, metadata alat, atau konten DNS yang diambil. Periksa seluruh jalur eksekusi dan batasi kredensial, file, alat, serta akses jaringan; pemindai dan aturan deny saja tidak membuktikan pembatasan lengkap.

Semua artikel