flawopen.com/Incidents/deadbugz-mcp-delayed-metadata-supply-chain-campaign-august-2026
Deadbugz: metadata alat MCP berubah setelah disetujui
Pillar Security mendokumentasikan kampanye rantai pasok MCP yang mengubah metadata setelah tiga panggilan normal. Tinjauannya tidak menemukan pull request yang digabung melalui mekanisme PR GitHub; laporan tersebut tidak mendokumentasikan kompromi lanjutan. Cloud Security Alliance menyebut visibilitas atas eksekusi lokal secara mandiri terbatas.[1], [3]
Bayangkan Anda menyetujui kontraktor karena lencananya mencantumkan tugas yang tidak berbahaya. Setelah tiga pengiriman rutin, lencana itu diam-diam berubah dan meminta akses ke ruang terkunci. Bahayanya, gedung tetap memercayai persetujuan lama. Klien MCP harus mendeteksi saat server mengubah instruksi alat yang telah disetujui.[1]
Konsep Kunci & Istilah
MCP- Protokol agar aplikasi AI menemukan dan memanggil alat yang disediakan server.[5]
Metadata alat- Nama, deskripsi, dan skema masukan yang dapat diberikan klien ke model sebagai konteks.[5], [1]
Perubahan tertunda saat runtime- Perilaku yang muncul setelah ambang interaksi; Pillar melaporkan penghitung tiga panggilan.[1]
Distribusi rantai pasok- Memasukkan dependensi atau konfigurasi melalui alur pengembangan tepercaya, seperti pull request.[1]
Pemetaan kerangka kerja
- Referensi CWE untuk kelemahan yang dijelaskan dalam panduan ini: CWE-829
Kronologi Insiden
Pillar mengidentifikasi 23 pull request terkait dalam rentang 74 menit; saat ditinjau, tidak satu pun digabungkan melalui mekanisme PR GitHub.[1]
Pillar menerbitkan analisis teknis tentang perubahan metadata setelah tiga panggilan beserta indikatornya.[1]
OWASP GenAI Project memasukkan Deadbugz dalam rangkuman Q3 2026. Ini menandakan perhatian, bukan kompromi atau volume pencarian.[2]
Alur Serangan Langkah demi Langkah
Perubahan konfigurasi diajukan
Pull request menambahkan konfigurasi server MCP jarak jauh atau lokal ke proyek AI. Pillar meninjau 17 perubahan endpoint jarak jauh, empat rujukan skrip lokal tersembunyi, dan dua kiriman direktori/daftar.[1]
Pemeriksaan awal melihat alat biasa
Server awalnya menawarkan pemformatan dan ringkasan teks. Menurut Pillar, pengujian singkat bisa hanya menerima metadata jinak ini.[1]
Kode Sumber: Rentan vs Aman
Laporan menjelaskan peracunan metadata dan distribusi melalui pull request, bukan CVE dalam spesifikasi MCP. Risiko muncul ketika klien terus memercayai deskripsi server yang dapat berubah setelah persetujuan awal. Pillar mengaitkan kampanye ini dengan akun GitHub publik; artikel menyatakannya sebagai atribusi Pillar, bukan identitas nyata yang telah diverifikasi. Pillar menyebut PR yang ditinjau belum digabung melalui mekanisme GitHub saat peninjauan dan tidak memastikan kompromi lanjutan. Repositori sumber yang ditautkan kini mengembalikan 404, jadi klaim teknis bersandar pada analisis teknis Pillar, bukan pemeriksaan ulang independen atas kode. Contoh Python adalah kebijakan defensif sisi klien, bukan kode siap pakai untuk mengganti pustaka MCP. CWE-829 adalah klasifikasi editorial; tidak ada CVE atau CVSS. Adaptor harus memperbarui data setelah notifikasi perubahan MCP dan menyertakan tools/list serta prompts/get; metadata_snapshot adalah metode adaptor ilustratif, bukan API MCP SDK. Buat approved_digest hanya setelah tinjauan operator. Snapshot harus memuat semua metadata server yang relevan, termasuk definisi tools/list dan seluruh isi prompts/get untuk prompt yang disetujui. Ambil ulang tepat sebelum menjalankan tindakan dan hentikan bila berbeda; pemeriksaan ini tidak mendeteksi perubahan perilaku server atau perubahan antara pemeriksaan dan penggunaan, sehingga izin tindakan independen tetap diperlukan.[1], [4], [5]
def agent_metadata(session):
# Adaptor mengembalikan alat dan prompt server saat ini sebagai data JSON.
return session.metadata_snapshot()
import hashlib
import hmac
import json
def fingerprint(snapshot):
normalized = dict(snapshot)
for key in ("tools", "prompts"):
normalized[key] = sorted(
snapshot[key],
key=lambda item: json.dumps(item, sort_keys=True, separators=(",", ":")),
)
canonical = json.dumps(normalized, sort_keys=True, separators=(",", ":"))
return hashlib.sha256(canonical.encode()).hexdigest()
def agent_metadata(session, approved_digest):
current = session.metadata_snapshot()
if not hmac.compare_digest(fingerprint(current), approved_digest):
raise PermissionError("MCP metadata changed; require operator approval")
return current
Daftar Periksa Penguatan Sistem Rekayasa
- ✓Simpan fingerprint kanonis nama, deskripsi, dan skema masukan alat MCP yang disetujui.[1], [4]
- ✓Hentikan alat dan minta tinjauan operator bila
tools/listatauprompts/getberubah setelah persetujuan.[1], [5], [4] - ✓Terapkan izin file, kredensial, proses, dan jaringan keluar secara terpisah dari instruksi model dan metadata.[1], [4]
- ✓Tinjau perubahan repositori yang menambahkan endpoint MCP atau skrip server lokal; verifikasi asalnya sebelum diaktifkan.[1]
- ✓Simpan log klien dan cocokkan perubahan definisi alat dengan tindakan agen jika server berperilaku tak terduga.[1], [3]
Sumber
- Pillar Security — Deadbugz: Currently Active MCP Supply-Chain Campaign (12 August 2026)
- OWASP GenAI Security Project — GenAI and Agentic AI Exploit Roundup Q3 2026 (8 October 2026)
- Cloud Security Alliance — Deadbugz: Runtime-Gated MCP Metadata Poisoning as Supply-Chain Attack
- OWASP MCP Security Cheat Sheet
- MCP specification: Tools