FlawOpen

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

● FlawOpen 매핑: CWE-94 · 편집상 심각도: 높음
보안 연구 · FlawOpen

Manus AI 에이전트 이메일 프롬프트 인젝션: 경고 전에 코드 실행

Salt Labs는 조작된 이메일이 Manus로 하여금 사용자에게 경고하기 전에 서버 측 런타임에서 코드를 실행하게 할 수 있다고 보고했습니다. 연구진은 책임 있게 공개했고 문제가 해결됐다고 밝혔습니다. CVE나 실제 피해자 침해는 보고되지 않았습니다.[1]

💡 알기 쉬운 설명 (ELI5)

우편실 직원이 편지를 읽고, 편지가 믿을 만한지 관리자에게 묻기 전에 숨겨진 지시를 실행한다고 상상해 보세요. 경고가 행동 뒤에 도착합니다. 보안 경계는 신뢰할 수 없는 편지 내용이 처음부터 실행 가능한 지시로 바뀌지 않도록 막아야 합니다.[1]

핵심 개념 및 용어

간접 프롬프트 인젝션
사용자가 직접 입력한 요청이 아니라 이메일처럼 AI가 살펴보도록 제공된 콘텐츠에 포함된 지시입니다.[1], [5]
에이전트 런타임
에이전트가 사용할 수 있는 프로세스와 도구입니다. 권한과 격리 상태가 모델의 영향을 받은 행동의 범위를 결정합니다.[1], [6]
실행 전 강제 통제
코드 실행이나 도구 호출 전에 동작을 차단하는 통제입니다. 실행 후의 경고는 이미 발생한 실행을 막지 못합니다.[1], [6]
CWE-94(편집상 매핑)
코드 생성 또는 실행에 대한 부적절한 통제입니다. FlawOpen은 신뢰할 수 없는 콘텐츠에서 코드로 이어진 시연 경계를 설명하기 위한 개념적 매핑으로 사용하며, Salt Labs는 CWE나 CVE를 부여하지 않았습니다.[4], [1]

프레임워크 매핑

단계별 공격 실행 흐름

단계 1

사용자가 Manus에 이메일 확인을 요청

Salt Labs에 따르면 통제된 테스트에서는 받은 편지함을 확인해 달라는 요청만으로 충분했으며 추가 클릭이나 자격 증명 탈취는 필요하지 않았습니다.[1]

단계 2

이메일이 신뢰할 수 없는 콘텐츠를 전달

일반적인 이메일 내용 안에 지시가 포함돼 있었습니다. 모델의 분류나 경고는 해당 데이터를 보호하는 보안 경계가 아닙니다.[1]

단계 3

콘텐츠가 서버 측 실행 경로에 도달

Salt Labs는 Manus가 Node.js 런타임으로 콘텐츠를 처리하고 경고와 승인 요청을 표시하기 전에 코드를 실행했다고 보고합니다. 정확한 내부 구현은 공개되지 않았으며, 이는 소스 코드 감사가 아닌 연구자의 설명입니다.[1]

단계 4

실행 환경이 연결된 서비스 권한에 접근

Salt Labs의 통제된 테스트에서 런타임은 사용자가 연결한 서비스와 관련된 토큰에 접근할 수 있었습니다. 잠재적 영향은 해당 환경의 통합 및 권한에 따라 달라집니다.[1]

단계 5

공개된 문제는 해결됨

Salt Labs는 Meta 버그 바운티 프로그램을 통해 문제를 알렸으며 해당 기법은 더 이상 악용할 수 없다고 밝혔습니다. 이는 연구 시연이지 고객 침해 보고가 아닙니다. CVE나 공개 패치 diff는 없습니다.[1]

소스 코드 비교: 취약한 구현 vs 보안 패치

Salt Labs는 Manus의 취약한 소스 코드나 공급자의 패치 diff를 공개하지 않았습니다. 이 예시는 일반적인 신뢰 경계 오류와 방어 아키텍처를 설명하며 제품을 재구성하지 않습니다. 신뢰할 수 없는 이메일은 실행 기능이 없는 요약 경로에서 처리해야 합니다. 도구나 런타임이 동작하기 전에 별도의 서버 정책이 정확한 동작을 승인해야 합니다.[1], [6]

취약한 구현
// 안전하지 않은 설계 예시이며 Manus 소스 코드가 아닙니다.
async function inspectEmail(email: Email) {
  return agent.process(email.body, { tools: [serverSideRuntime] });
}
보안 강화 패치
// 더 안전한 경계 예시이며 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);
}

엔지니어링 및 시스템 보안 강화 체크리스트

출처

← AI Security Directory →