FlawOpen

flawopen.com/AI Security/ghostjacking-ai-agent-poisoned-observability-logs-august-2026

● Pemetaan FlawOpen: CWE-1427 · Tingkat keparahan editorial: Sedang
Riset Keamanan · FlawOpen

GhostJacking: Log dan Agen AI

Riset menunjukkan telemetri yang dimanipulasi dapat memengaruhi agen terhubung. Tidak ada CVE atau korban terkonfirmasi.[1], [2]

💡 Penjelasan Sederhana (ELI5)

Bayangkan petugas resepsionis menghentikan kiriman mencurigakan, tetapi menyalin catatan pengirim ke log insiden. Kemudian seorang dispatcher memeriksa nomor tiket yang nyata dan celah nyata dalam kebijakan DNS konfigurasi uji, lalu memercayai alamat pilihan penyerang di catatan yang sama dan mengubah buku alamat publik yang memberi tahu browser dan email lokasi layanan perusahaan. Log itu adalah bukti, bukan wewenang untuk melakukan perubahan; pemeriksaan kebijakan dan persetujuan terpisah harus mengendalikannya.[1]

Konsep Kunci & Istilah

GhostJacking
Istilah Tenet Security untuk demonstrasi ketika konten dalam peristiwa observabilitas yang dikendalikan penyerang memengaruhi agen AI yang terhubung ke alat tersebut. Ini label riset, bukan CVE.[1], [2]
Indirect prompt injection
Instruksi yang disisipkan dalam data yang harus diperiksa model, bukan diberikan langsung oleh pengguna.[1], [2], [4]
Peristiwa observabilitas
Log, peringatan, trace, atau catatan kesalahan yang menjelaskan aktivitas sistem. Beberapa kolom dapat berisi teks dari permintaan eksternal.[1], [2]
Otorisasi independen
Pemeriksaan kebijakan di luar model yang memverifikasi pelaku, sasaran, perubahan yang diminta, dan persetujuan sebelum alat melakukan tindakan berdampak.[2], [5]
CWE-1427
Kelas kelemahan MITRE untuk penetralan masukan yang tidak memadai dalam prompt LLM. Ini pemetaan konseptual FlawOpen; Tenet, ngCERT, dan catatan CVE tidak menetapkannya untuk GhostJacking.[4], [1], [2]
Tingkat keparahan editorial
ngCERT menilai risiko dan dampak advisori sebagai Tinggi. FlawOpen memberi nilai Sedang pada ringkasan ini karena demonstrasi memerlukan agen dengan integrasi dan izin perubahan terkait; belum ada korban yang terkonfirmasi. Ini penilaian editorial, bukan skor vendor.[2], [1]

Pemetaan kerangka kerja

Alur Serangan Langkah demi Langkah

Langkah 1

Agen mendapat izin untuk menyelidiki

Riset Tenet menjelaskan agen coding atau operasi yang terhubung ke alat seperti Cloudflare, Datadog, dan Sentry. Prasyarat yang relevan adalah agen dapat membaca konten peristiwa eksternal serta melakukan tindakan berdampak dengan izin yang telah dimilikinya.[1]

Langkah 2

Permintaan dicatat sebagai bukti

Dalam demonstrasi Cloudflare Tenet, WAF memblokir permintaan tetapi teks pada kolom yang dikendalikan penyerang tetap tersimpan dalam catatan peristiwa. Permintaan yang diblokir tetap dapat meninggalkan teks tidak tepercaya untuk dibaca agen kemudian.[1], [2]

Langkah 3

Telemetri yang masuk akal melewati pertahanan terhadap instruksi langsung

Tenet melaporkan bahwa perintah yang terang-terangan ditolak dalam pengujian mereka. Demonstrasi Cloudflare yang berhasil justru menggunakan telemetri terstruktur mirip keluaran pemindai, berisi referensi tiket, kutipan kepatuhan, dan metrik; agen memverifikasi beberapa klaim, lalu memercayai nilai DNS yang belum diverifikasi dan dikendalikan penyerang. Ini adalah demonstrasi injeksi prompt tidak langsung yang dilaporkan peneliti, bukan bukti bahwa korban nyata telah dibobol.[1], [2]

Langkah 4

Izin yang ada mengubah pengaruh menjadi dampak

Tenet melaporkan demonstrasi terkendali yang membuat agen mengubah DNS melalui alat Cloudflare terintegrasi. Hasilnya bergantung pada izin dan konfigurasi agen; ini bukan bukti bahwa Cloudflare dibobol atau sistem pelanggan diserang.[1]

Langkah 5

Kebijakan terpisah dapat menghentikan perubahan

Aplikasi harus memperlakukan usulan model sebagai tidak tepercaya. Layanan otorisasi di server harus memeriksa sumber daya dan perubahan yang tepat secara independen, meminta persetujuan manusia berwenang bila sesuai, dan mencatat keputusan sebelum memanggil API penyedia.[2], [5]

Kode Sumber: Rentan vs Aman

Cuplikan ini adalah contoh aplikasi, bukan kode sumber rentan atau yang telah diperbaiki dari produk yang disebut. Pola tidak aman memberi alat perubahan langsung kepada agen yang membaca teks peristiwa tidak tepercaya. Pola aman memisahkan usulan dari eksekusi: layanan independen memakai persetujuan sekali pakai yang terikat pada pelaku dan perubahan yang tepat, lalu menerapkan kebijakan sebelum memanggil penyedia. Identitas pelaku berasal dari konteks server yang terautentikasi, bukan kolom yang dikendalikan pemanggil; model tidak dapat memilihnya. Instruksi dalam prompt saja bukan kontrol otorisasi. Kode produksi juga harus memvalidasi skema, kepemilikan tenant dan sumber daya, masa berlaku persetujuan, perlindungan pemutaran ulang, penyimpanan audit, dan kesalahan penyedia.[1], [2], [5]

IMPLEMENTASI RENTAN
// Integrasi tidak aman ilustratif; bukan kode sumber Cloudflare, Datadog, Sentry, atau Tenet.
async function investigate(event: EventRecord) {
  return agent.run({
    context: event.message,
    tools: [cloudflare.updateDnsRecord]
  });
}
PERBAIKAN AMAN & KUAT
// Batas kontrol ilustratif; model dapat mengusulkan, tetapi tidak mengotorisasi atau menerapkan.
type DnsProposal = { zoneId: string; name: string; value: string };

async function proposeDnsChange(event: EventRecord): Promise<DnsProposal> {
  return agent.propose({ evidence: markUntrusted(event.message) });
}

async function applyDnsChange(
  proposal: DnsProposal,
  approvalId: string
) {
  const actorId = auth.requireAuthenticatedActorId();
  const validatedProposal = DnsProposalSchema.parse(proposal);
  const approval = await approvals.consumeOnce(approvalId, { actorId });
  if (!approval || approval.actorId !== actorId ||
      approval.zoneId !== validatedProposal.zoneId ||
      approval.name !== validatedProposal.name ||
      approval.value !== validatedProposal.value ||
      !policy.canChangeDns(actorId, validatedProposal.zoneId, validatedProposal.name)) {
    throw new Error('DNS change is not independently authorized');
  }
  // Tolak secara default jika keputusan otorisasi tidak dapat dicatat sebelum perubahan.
  await audit.record({ actorId, approvalId, action: 'dns-change', decision: 'authorized' });
  try {
    await cloudflare.updateDnsRecord(validatedProposal);
  } catch (error) {
    await audit.record({ actorId, approvalId, action: 'dns-change', outcome: 'provider-failed' });
    throw error;
  }
  await audit.record({ actorId, approvalId, action: 'dns-change', outcome: 'succeeded' });
}

Daftar Periksa Penguatan Sistem Rekayasa

Sumber

← AI Security Directory →