FlawOpen

flawopen.com/AI Security/manus-email-prompt-injection-agent-runtime-october-2026

● Pemetaan FlawOpen: CWE-94 · Tingkat keparahan editorial: Tinggi
Riset Keamanan · FlawOpen

Injeksi Prompt Email pada Agen AI Manus: Kode Berjalan Sebelum Peringatan

Salt Labs melaporkan bahwa email yang disiapkan dapat mendorong Manus menjalankan kode di runtime sisi server sebelum memperingatkan pengguna. Peneliti mengatakan mereka mengungkapkannya secara bertanggung jawab dan masalah telah diperbaiki; tidak ada CVE atau kompromi korban nyata yang dilaporkan.[1]

💡 Penjelasan Sederhana (ELI5)

Bayangkan petugas ruang surat membaca surat lalu mengikuti instruksi tersembunyi di dalamnya sebelum bertanya kepada atasan apakah surat itu tepercaya. Peringatan datang setelah tindakan. Batas keamanan harus mencegah teks surat tak tepercaya berubah menjadi instruksi yang dapat dijalankan sejak awal.[1]

Konsep Kunci & Istilah

Injeksi prompt tidak langsung
Instruksi yang disisipkan dalam konten yang perlu diperiksa AI, seperti email, bukan dalam permintaan langsung pengguna.[1], [5]
Runtime agen
Proses dan alat yang dapat digunakan agen. Izin dan isolasinya menentukan dampak tindakan yang dipengaruhi model.[1], [6]
Penegakan sebelum eksekusi
Kontrol yang memblokir tindakan sebelum kode dijalankan atau alat dipanggil. Peringatan setelahnya tidak dapat mencegah eksekusi tersebut.[1], [6]
CWE-94 (pemetaan editorial)
Kontrol yang tidak memadai atas pembuatan atau eksekusi kode. FlawOpen menggunakannya sebagai pemetaan konseptual untuk batas konten tak tepercaya ke kode yang didemonstrasikan; Salt Labs tidak menetapkan CWE atau CVE.[4], [1]

Pemetaan kerangka kerja

Alur Serangan Langkah demi Langkah

Langkah 1

Pengguna meminta Manus memeriksa email

Salt Labs menyatakan pengujian terkontrolnya hanya memerlukan pengguna meminta Manus memeriksa kotak masuk; tidak diperlukan klik tambahan atau pencurian kredensial.[1]

Langkah 2

Email memberikan konten yang tidak tepercaya

Pesan berisi instruksi di dalam teks email biasa. Klasifikasi atau peringatan model bukan batas keamanan untuk data tersebut.[1]

Langkah 3

Konten mencapai jalur eksekusi sisi server

Salt Labs melaporkan Manus memproses konten melalui runtime Node.js dan menjalankan kode sebelum menampilkan peringatan serta permintaan persetujuan. Implementasi internal yang tepat tidak dipublikasikan; ini merupakan laporan peneliti, bukan audit kode sumber.[1]

Langkah 4

Konteks eksekusi memiliki izin layanan terhubung

Dalam pengujian terkontrolnya, Salt Labs melaporkan runtime dapat mengakses token yang terkait dengan layanan yang dihubungkan pengguna. Jangkauan potensial bergantung pada integrasi dan izin yang tersedia.[1]

Langkah 5

Pengungkapan telah ditangani

Salt Labs menyatakan telah melaporkan masalah melalui program bug bounty Meta dan teknik khusus tersebut kini tidak dapat dieksploitasi. Ini demonstrasi penelitian, bukan laporan kebocoran pelanggan; tidak ada CVE atau diff patch publik.[1]

Kode Sumber: Rentan vs Aman

Salt Labs tidak menerbitkan kode rentan Manus atau diff patch vendor. Contoh ini menggambarkan kesalahan batas kepercayaan umum dan arsitektur defensif, bukan merekonstruksi produk. Proses email tak tepercaya dalam jalur peringkasan tanpa kemampuan eksekusi. Kebijakan server terpisah harus mengotorisasi tindakan yang tepat sebelum alat atau runtime menjalankannya.[1], [6]

IMPLEMENTASI RENTAN
// Contoh desain tidak aman; bukan kode sumber Manus.
async function inspectEmail(email: Email) {
  return agent.process(email.body, { tools: [serverSideRuntime] });
}
PERBAIKAN AMAN & KUAT
// Contoh batas yang lebih aman; bukan implementasi atau patch Manus.
async function inspectEmail(email: Email, session: AuthenticatedSession) {
  const summary = SummarySchema.parse(
    await readOnlyModel.summarize({ content: email.body })
  );
  const proposal = ActionRequestSchema.parse(
    await readOnlyModel.proposeAction({ summary })
  );
  if (!proposal) return summary;

  const approval = await approvalStore.consumeExact({
    actorId: session.userId,
    action: proposal.action,
    resourceId: proposal.resourceId
  });
  const permit = await serverPolicy.authorize({
    actorId: session.userId,
    action: proposal.action,
    resourceId: proposal.resourceId,
    approval
  });
  if (!permit.allowed) throw new Error("Action denied");
  return narrowTools.execute(permit.approvedAction);
}

Daftar Periksa Penguatan Sistem Rekayasa

Sumber

← AI Security Directory →