FlawOpen

flawopen.com/Incidents/deadbugz-mcp-delayed-metadata-supply-chain-campaign-august-2026

● Pillar Security / MCP ecosystem · CWE-829 (editorial mapping; no CVE assigned) · 2026-08-10 · Sedang
Riset Keamanan · FlawOpen

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]

💡 Penjelasan Sederhana (ELI5)

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]
CWE-829
Klasifikasi editorial: fungsi berasal dari server di luar lingkup kendali tepercaya klien. Tidak ada CVE atau skor CVSS.[1], [3]

Pemetaan kerangka kerja

  • Referensi CWE untuk kelemahan yang dijelaskan dalam panduan ini: CWE-829

Kronologi Insiden

2026-08-10

Pillar mengidentifikasi 23 pull request terkait dalam rentang 74 menit; saat ditinjau, tidak satu pun digabungkan melalui mekanisme PR GitHub.[1]

2026-08-12

Pillar menerbitkan analisis teknis tentang perubahan metadata setelah tiga panggilan beserta indikatornya.[1]

2026-10-08

OWASP GenAI Project memasukkan Deadbugz dalam rangkuman Q3 2026. Ini menandakan perhatian, bukan kompromi atau volume pencarian.[2]

Alur Serangan Langkah demi Langkah

Langkah 1

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]

Langkah 2

Pemeriksaan awal melihat alat biasa

Server awalnya menawarkan pemformatan dan ringkasan teks. Menurut Pillar, pengujian singkat bisa hanya menerima metadata jinak ini.[1]

Langkah 3

Penggunaan normal melewati ambang

Server menghitung panggilan per klien. Setelah tiga panggilan, balasan berikutnya untuk tools/list dan prompts/get berubah.[1], [5]

Langkah 4

Agen menerima instruksi yang tidak tepercaya

Instruksi itu berupaya mengarahkan agen ke informasi lokal sensitif dan menyembunyikan aktivitas. Deskripsi kampanye ini tidak membuktikan kompromi.[1], [3]

Langkah 5

Ikat persetujuan pada metadata yang persis

Klien harus menyimpan fingerprint definisi alat yang disetujui dan menghentikan penggunaannya untuk ditinjau operator bila berubah. Batasi akses file, kredensial, dan jaringan melalui kebijakan terpisah.[1], [4], [5]

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]

IMPLEMENTASI RENTAN
def agent_metadata(session):
    # Adaptor mengembalikan alat dan prompt server saat ini sebagai data JSON.
    return session.metadata_snapshot()
PERBAIKAN AMAN & KUAT
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

Sumber