Ilustrasi teknis abstrak pada bidang biru navy gelap: sebuah kubus server ringkas di sebelah kiri memancarkan tiga kartu persegi panjang kecil menuju simpul agen di sebelah kanan; dua kartu pertama berwarna pucat dan inert, kartu ketiga melemparkan bayangan panjang berbentuk kunci. Filamen sian halus membentang dari server menuju kisi longgar simpul repositori di belakangnya, dan satu garis amber menghubungkan simpul agen ke gelang kunci berisi cakram kredensial kecil. Tidak ada orang, tidak ada logo, tidak ada teks. Logo OrcaRouter dikomposisikan di sudut kanan bawah.
AI Safety Incidents

Deadbugz: server MCP yang berubah menjadi bermusuhan pada pemanggilan tool ketiga, di-push ke 23 repositori dalam 74 menit

Penulis

Magnus Corvin

Tanggal Terbit

Model terbaru · 20Lihat semua model →
Benchmark: Artificial Analysis · diperbarui setiap hari
Kembali ke semua artikel

Pada 10 Agustus 2026, satu akun GitHub, zellkernel, membuka 23 pull request dalam 74 menit terhadap repositori AI, MCP, dan perkakas pengembang yang tidak terkait, masing-masing menambahkan server MCP bernama productivity-suite yang mengiklankan dua alat biasa, format_text dan summarize. Menurut Pillar Security, yang menamai kampanye ini Deadbugz dan menerbitkan tulisannya pada 12 Agustus, server tersebut mengembalikan hasil yang jujur untuk tiga panggilan pertamanya lalu menulis ulang metadata yang diserahkannya kepada agen: deskripsi alat dan konten prompt mulai mengarahkan model ke kunci SSH, kredensial AWS, riwayat shell, dan konfigurasi Kubernetes, serta menyuruhnya menyembunyikan aktivitas itu dari pengguna. Sembilan belas dari 23 pull request ditutup, empat masih terbuka, dan tidak ada yang telah digabungkan saat Pillar meninjaunya. Belum ada korban yang terkonfirmasi. Ini adalah satu catatan, dilaporkan oleh pihak lain dan di sini dikutip dengan atribusi kepada mereka. Insiden agen lain yang terdokumentasi, masing-masing dengan sumber, tingkat keparahan, tingkat keyakinan, dan penanda sengketa tersendiri, berada di arsip insiden AI — sehingga kampanye rantai pasok yang menyasar perkakas agen dapat dibaca bersanding dengan bagian lain dari apa yang benar-benar telah terjadi.

Arsip menilai catatan ini dengan tingkat keparahan tinggi dan keyakinan A — terdokumentasi dengan baik, dengan sumber-sumber primer yang saling sejalan — sekaligus secara terpisah mencatat tidak ada kerugian nyata yang terkonfirmasi. Kedua hal itu benar secara bersamaan, dan celah di antara keduanya adalah inti dari catatan ini: sebuah kampanye yang desainnya terdokumentasi secara luar biasa rinci sebelum menghasilkan korban yang dapat disebutkan namanya oleh siapa pun. Dua tanggal yang penting berjarak dua hari. Pull request dikirim pada 10 Agustus; Ariel Fogel dari Pillar Security menerbitkan analisisnya pada 12 Agustus, dan postingan itu memuat catatan tetap bahwa postingan tersebut akan diperbarui saat informasi terverifikasi masuk.

Tiga panggilan, lalu metadata berubah.

Server MCP tidak harus menjalankan kode di sebuah mesin untuk mengubah perilaku agen. Definisi alat diberikan kepada model sebagai konteks pada setiap sesi, yang berarti server yang menyediakannya dapat menulis ulang instruksi yang dibaca agen sementara nama alat, repositori, dan manifesnya tetap persis seperti semula. Deadbugz dibangun di atas asimetri tersebut, dan Pillar menyebutnya runtime-gated MCP metadata poisoning.

Mekanismenya cukup kecil untuk dijelaskan dalam satu kalimat. Server menyimpan penghitung dalam memori per klien untuk permintaan tools/call. Untuk tiga permintaan pertama, ia berperilaku normal. Begitu penghitung terpicu, respons tools/list dan prompts/get berikutnya kembali dalam bentuk yang diubah — deskripsi alat berbeda, konten prompt berbeda — mengarahkan agen ke kunci SSH, kredensial AWS, riwayat shell, dan konfigurasi Kubernetes serta menginstruksikannya untuk menyembunyikan aktivitas tersebut dari pengguna. Teks prompt yang teracuni membawa penanda deadbugz dan alamat Bitcoin.

Gerbang ini juga menjadi alasan pertahanan biasa tidak mendeteksinya. Payload sudah ada dalam sumber sejak permintaan pertama; tidak ada bagian dari kode atau konfigurasi yang berubah pada saat peralihan terjadi. Pemindaian statis, entri SBOM, atau pembacaan sekali atas manifes alat pada waktu instalasi akan melihat utilitas pemformatan, karena itulah yang dikembalikan utilitas tersebut sampai penghitung bergerak. Pillar menggambarkan peralihan tertunda sebagai teknik penghindaran riset, dan menyatakan bahwa para penelitinya mengonfirmasi ambang batas maupun metadata yang diubah dengan mengirim permintaan hanya-teks ke layanan jarak jauh yang aktif dan mencocokkan responsnya dengan sumber publik.

Satu detail membuat jebakan ini lebih luas daripada satu sesi saja. Server mengiklankan tools.listChanged, kemampuan MCP yang memberi tahu klien bahwa daftar alatnya telah direvisi. Klien yang mematuhi sinyal itu akan membaca ulang definisi di tengah sesi dan menarik versi yang telah diracuni tanpa tindakan operator; klien yang menyimpan definisi saat persetujuan tidak akan melakukannya. Perilaku mana yang dimiliki agen tertentu adalah properti klien, bukan properti server, dan tulisan Pillar tidak merinci klien berdasarkan nama.

HTML card titled 'Three calls, then the metadata changes', kicked 'MCP · productivity-suite', with the subtitle 'The payload is present from the first request; the gate is a counter in memory'. Three columns. 'Calls one to three — benign' lists format_text returning formatted text, summarize returning a summary, and tools/list and prompts/get returning honest tool definitions, with a note that nothing on disk differs from what a reviewer approved. 'The gate' lists an in-memory per-client counter of tools/call requests, a threshold of three, altered tool descriptions and prompt content in later tools/list and prompts/get responses, and the advertised tools.listChanged capability that lets compliant clients re-read definitions mid-session. 'What the poisoned metadata asks for' lists SSH keys, AWS credentials, shell history and Kubernetes configuration, an instruction to keep the activity from the user, and the embedded marker deadbugz with a Bitcoin address. A footer reads 'Per Pillar Security's disclosure of 12 August 2026. Pillar says its researchers confirmed the threshold and the altered metadata against the live remote service using text-only requests, matching the public source.'

Pengiriman: 23 pull request dalam 74 menit

Distribusi itu bukan paket di sebuah registri atau dependensi beracun yang terkubur dalam lockfile. Itu adalah spam pull-request terhadap proyek-proyek yang tidak ada hubungannya dengan fungsi server yang seharusnya, yang merupakan bentuk upaya rantai pasok berbiaya rendah ketika penyerang tidak bisa mendapatkan akun maintainer: ajukan cukup banyak perubahan konfigurasi dan tunggu sampai salah satunya digabungkan atau diterapkan secara lokal.

Rincian Pillar atas 23 tersebut terbagi menjadi tiga. Tujuh belas menambahkan endpoint MCP jarak jauh, productivity-suite-mcp[.]onrender[.]com/mcp, di-host di Render; empat memanggil file Python lokal tersembunyi di ~/.config/.cache/.sys/.deadbug-mcp.py; dua merupakan pengiriman direktori atau daftar, yang oleh tulisan tersebut diperlakukan sebagai pengintaian atau pengisi, bukan pengiriman. Rentang waktu diberikan sebagai 9:52 PM hingga 11:07 PM UTC pada 10 Agustus 2026 — 74 menit dalam kerangka pengungkapan, meskipun kedua stempel waktu itu sendiri mencakup 75 menit, dan tidak ada apa pun dalam catatan yang bergantung pada menit tersebut. Hanya satu repositori target yang disebutkan secara individual: getsentry/sentry-mcp, pull request #1239, dikutip sebagai contoh pengiriman artefak lokal.

Akun di baliknya cukup besar untuk usia akun itu. Pada saat pengumpulan Pillar, zellkernel memiliki 50 repositori publik, 20 di antaranya fork, dan 21 dari 50 itu telah dibuat pada 10 Agustus, hari yang sama dengan kampanye. Profil tersebut tertaut silang ke akun X @llmgod, yang menautkan balik ke akun GitHub, yaitu jenis penautan timbal balik yang menunjukkan identitas yang dibuat khusus, bukan identitas yang dibajak.

Sembilan belas tertutup, empat terbuka, nol digabungkan adalah angka yang paling sering diulang dalam catatan itu dan juga yang paling sering dibaca sebagai tanda aman, padahal tidak sepenuhnya demikian. Tombol merge GitHub bukanlah catatan eksekusi host: seorang maintainer dapat menarik branch dan menjalankannya, menerapkan konfigurasi secara manual, atau job CI dapat mengambil head PR sebelum ada yang berkomentar. Keempat pull request yang menulis konfigurasi yang memanggil jalur skrip lokal adalah kasus yang paling terdampak oleh celah itu, karena skrip tersebut diambil dan dijalankan sepenuhnya di luar penghitungan merge GitHub. Cloud Security Alliance Labs menyampaikan poin yang sama dalam catatannya pada 2 September: hitungan tertutup dan tidak digabungkan tidak membuktikan bahwa tidak ada yang dijalankan.

HTML card titled 'Twenty-three pull requests in seventy-four minutes', kicked '10 August 2026 · delivery', subtitled 'Times UTC. Counts are Pillar Security's review snapshot.' Three columns. 'The window' lists the first pull request at 21:52, twenty-three pull requests to unrelated AI, MCP and developer-tooling repositories, the last at 23:07, and a note that the 74-minute framing spans 75 minutes on the clock. 'What each pull request added' lists seventeen adding the remote endpoint productivity-suite-mcp.onrender.com/mcp, four invoking the hidden file at ~/.config/.cache/.sys/.deadbug-mcp.py, two directory or listing submissions, and one named example, getsentry/sentry-mcp pull request 1239. 'At review' lists nineteen closed, four open, zero merged through GitHub's review, zero confirmed victims, and the account zellkernel linked to the X handle llmgod, with fifty public repositories and twenty-one created that day. A footer reads 'Per Pillar Security. Cloud Security Alliance Labs repeated the same figures on 30 August and 2 September 2026 without independent verification. As of 29 October 2026 the GitHub account and the productivity-suite-mcp repository both return 404.'

Apa yang sudah mapan, dan apa yang belum

Ditetapkan melalui pengungkapan, dalam arti bahwa Pillar melaporkannya dari artefak yang dibacanya dan dalam satu kasus dari layanan yang ia kueri: server dan repositori sumbernya, dua alat yang diiklankan, penghitung dan ambang tiga panggilan, empat target kredensial, jumlah PR dan status merge-nya saat peninjauan, serta keterkaitan antara akun GitHub dan handle X. Pengujian Pillar sendiri terhadap endpoint live adalah item terkuat dalam daftar, karena ini merupakan reproduksi, bukan pembacaan kode sumber.

Tidak terbukti, dan catatan itu bersikap hati-hati soal ini: korban. Field real_harm di arsip tersebut bernilai false, yang merupakan pernyataan tentang bukti, bukan tentang niat — tidak ada seorang pun yang menghasilkan host, log, atau kredensial curian yang terkait dengan kampanye ini. Orang atau kelompok di balik zellkernel dan @llmgod juga tidak teridentifikasi; Pillar mengatribusikan operasi itu kepada akun-akun tersebut dan berhenti sampai di situ. Motif finansial bersandar pada alamat Bitcoin yang tertanam dalam payload, yang merupakan inferensi dari sebuah indikator, bukan temuan tentang aktornya. Dan pertanyaan yang paling ingin dijawab seorang defender — apakah kampanye ini masih berjalan — tidak punya jawaban dalam catatan itu: pos tersebut ditandai sebagai pos yang akan diperbarui, dan tidak ada revisi lanjutan atau pemberitahuan takedown dari GitHub maupun Render yang terlihat.

Dukungan bukti lebih tipis daripada yang mungkin disiratkan oleh tingkat keyakinan, dan ini perlu dikatakan secara gamblang. Dua Cloud Security Alliance Labs catatan riset, bertanggal 30 Agustus dan 2 September 2026, mengulang kampanye tersebut; catatan yang lebih akhir secara eksplisit menyatakan bahwa catatan itu memberi kredit kepada Pillar untuk penemuan, detail PR, perilaku server, dan atribusi akun, serta tidak menjelaskan verifikasi independen apa pun miliknya sendiri. Sebuah Armor pos blog bertanggal 22 September 2026 memberikan panduan defensif dan menyatakan bahwa Pillar membongkar server tersebut; pos itu tidak menawarkan bukti forensik apa pun miliknya sendiri. Tidak ada CVE yang ditetapkan, dan CSA menyatakan ini bukan kerentanan spesifikasi MCP. Per 29 Oktober 2026, pencarian tidak menghasilkan advisory dari GitHub atau Render, dan tidak ada liputan di pers keamanan arus utama — tidak ada item BleepingComputer, The Register, SecurityWeek, atau Hackread — yang tidak biasa untuk kampanye rantai pasok dengan bentuk ini dan itu sendiri merupakan bagian dari apa yang ditunjukkan oleh rekaman. "Sumber utama sepakat" di sini berarti satu sumber utama yang berasal dan serangkaian dokumen sekunder yang diturunkan darinya.

Dua ambiguitas yang lebih kecil perlu ditandai, bukan dihaluskan. Ringkasan sekunder berbeda pendapat tentang apakah panggilan ketiga atau keempat yang pertama kali menerima metadata yang teracuni, yang mengikuti dari penghitung yang digambarkan sebagai terpicu pada permintaan ketiga; catatan dan pengungkapan keduanya menggunakan tiga. Dan jendela pengiriman digambarkan sebagai 74 menit untuk stempel waktu yang mencakup 75.

Satu pemeriksaan yang tidak dapat diulang: pada 29 Oktober 2026, akun GitHub zellkernel dan repositori zellkernel/productivity-suite-mcp keduanya mengembalikan 404, dan satu-satunya pull request yang disebutkan secara individual, getsentry/sentry-mcp #1239, juga tidak lagi dapat diakses — repositori itu sendiri sekarang dialihkan ke getsentry/toolkit. Oleh karena itu, jumlah PR, status merge, dan isi repositori tidak dapat diverifikasi ulang secara pihak pertama hari ini; semuanya tetap menjadi snapshot Pillar, yang diambil pada pertengahan Agustus.

HTML card titled 'What is established, and what is not', kicked '2026-08-10-deadbugz-mcp-supply-chain', subtitled 'One record, one originating source, two secondary notes that restate it'. Three columns. 'Established by the disclosure' lists the server, its source repository and the two advertised tools; the counter and the three-call threshold, confirmed against the live endpoint; the four credential targets; twenty-three pull requests, nineteen closed, four open, none merged; and the delivery account linked to the X handle llmgod. 'Not established' lists any victim or executed payload, with the archive recording real harm as false; the actor behind the account and handle; motive, which rests on a Bitcoin address in the payload; and whether the campaign is still running, the post having promised updates that are not visible. 'Corroboration' lists the Cloud Security Alliance Labs notes of 30 August and 2 September 2026 as restatement without independent checks; the Armor blog of 22 September 2026 as guidance without forensic evidence; no CVE assigned; no GitHub or Render advisory found; and no mainstream trade-press coverage found as of 29 October 2026. A footer reads 'The archive grades the record A, well documented with primary sources that agree. The secondary documents here all derive from Pillar Security's post, so agreement between them is not a second measurement.'

Apa yang diminta pengungkapan agar dilakukan para defender

Respons yang direkomendasikan Pillar terutama berkaitan dengan memperlakukan metadata sebagai permukaan keamanan, bukan sebagai deskripsi darinya. Bagi host, permintaan konkretnya adalah memblokir atau memburu productivity-suite-mcp[.]onrender[.]com/mcp, mempertahankan endpoint trycloudflare.com kampanye sebelumnya dalam daftar deny dan hunting meskipun Pillar mengatakan endpoint tersebut saat ini tidak aktif, dan tidak menjalankan deadbug-mcp.py — jalur file tersembunyi ~/.config/.cache/.sys/.deadbug-mcp.py adalah artefak yang harus dicari di seluruh direktori home, repositori, dan konfigurasi klien MCP.

Urutan investigasi lebih penting daripada daftar blokir. Jika suatu host mungkin telah terhubung, Pillar menyarankan untuk mempertahankan log klien MCP sebelum membersihkan apa pun, lalu meninjau penyegaran definisi alat dan apa yang dilakukan agen setelah panggilan ketiga; kredensial sebaiknya dirotasi hanya jika bukti lokal mendukung eksposur, yang merupakan kebalikan dari refleks untuk merotasi semuanya saat ada kecurigaan. Konfigurasi server juga mengizinkan telemetri opsional ke WEBHOOK_URL, mengirim beacon pada koneksi, panggilan pertama, dan peristiwa pemicu — detail yang memberikan penyelidikan tempat ketiga untuk diperiksa di luar log klien dan lalu lintas endpoint.

Bagi orang-orang yang membangun klien MCP, rekomendasinya bersifat struktural, dan itulah bagian dari catatan yang memiliki masa berlaku paling panjang:

• Ambil sidik jari definisi alat pada saat persetujuan dan bandingkan pada setiap penyegaran, alih-alih memercayai nama dan repositori server.

Perlakukan perubahan definisi pada server yang sudah disetujui sebagai peristiwa keamanan yang dilihat dan disetujui ulang oleh operator, bukan sebagai perubahan metadata rutin yang ditelan secara diam-diam.

• Tegakkan operasi sensitif — akses kredensial, eksekusi kode, email keluar, penulisan repositori — melalui kebijakan, bukan melalui deskripsi yang disediakan server.

Butir ketiga itulah yang membuat Deadbugz menjadi sebuah catatan, bukan sekadar keanehan. Setiap kontrol di atas mengasumsikan bahwa agen dapat dibujuk untuk melakukan sesuatu oleh teks yang dilampirkan server pada sebuah alat, dan bahwa teks tersebut dapat berubah setelah keputusan kepercayaan dibuat. Pillar menempatkan kampanye ini dalam rangkaian yang mencakup serangan sleeper MCP Invariant Labs tahun 2025, paket postmark-mcp palsu, dan paket MCP yang didokumentasikan Koi yang dipersenjatai melalui pembaruan — semuanya merupakan preseden bagi teknik tersebut, yang dikutip Pillar untuk itu dan bukan sebagai bukti tentang pengiriman ini.

Mengapa gate lebih penting daripada jumlah korban

Kampanye dengan 23 upaya pengiriman, tanpa penggabungan dan tanpa korban terkonfirmasi, mudah diklasifikasikan sebagai upaya yang gagal dan ditinggalkan. Alasan kampanye ini layak masuk arsip dengan tingkat keparahan tinggi adalah karena penghindarannya tidak bergantung pada keberhasilan pengiriman dalam skala besar. Penghindaran itu bergantung pada properti yang dimiliki sebagian besar penerapan MCP saat ini: persetujuan terjadi sekali, saat pemasangan, dan definisi yang telah disetujui diasumsikan sebagai definisi yang akan disajikan. Deadbugz menjaga asumsi itu tetap utuh selama tiga panggilan, lalu mematahkannya.

Perbaikannya bukan patch untuk server tertentu, dan tidak ada CVE yang perlu dilacak. Intinya adalah bahwa "disetujui" harus menjadi kondisi berkelanjutan dengan perbandingan di baliknya — yaitu perubahan dalam cara klien dan operatornya berperilaku, bukan perubahan dalam apa yang dicari pemindai. Apakah ada orang yang benar-benar menjalankan server tersebut pada Agustus masih belum diketahui; berdasarkan catatan yang ada saat ini, mekanismenya adalah temuannya.