flawopen.com/AI Security/manus-email-prompt-injection-agent-runtime-october-2026
Manus AI 에이전트 이메일 프롬프트 인젝션: 경고 전에 코드 실행
Salt Labs는 조작된 이메일이 Manus로 하여금 사용자에게 경고하기 전에 서버 측 런타임에서 코드를 실행하게 할 수 있다고 보고했습니다. 연구진은 책임 있게 공개했고 문제가 해결됐다고 밝혔습니다. CVE나 실제 피해자 침해는 보고되지 않았습니다.[1]
우편실 직원이 편지를 읽고, 편지가 믿을 만한지 관리자에게 묻기 전에 숨겨진 지시를 실행한다고 상상해 보세요. 경고가 행동 뒤에 도착합니다. 보안 경계는 신뢰할 수 없는 편지 내용이 처음부터 실행 가능한 지시로 바뀌지 않도록 막아야 합니다.[1]
핵심 개념 및 용어
프레임워크 매핑
- MITRE CWE에 대한 FlawOpen의 개념적 매핑입니다. 공급업체나 CVE 레코드가 이 연구 시연에 해당 약점 ID를 지정한 것은 아닙니다. CWE-94
- OWASP GenAI 2025 — LLM01:2025 프롬프트 인젝션
- OWASP GenAI 2025 — LLM06:2025 과도한 에이전시
단계별 공격 실행 흐름
사용자가 Manus에 이메일 확인을 요청
Salt Labs에 따르면 통제된 테스트에서는 받은 편지함을 확인해 달라는 요청만으로 충분했으며 추가 클릭이나 자격 증명 탈취는 필요하지 않았습니다.[1]
이메일이 신뢰할 수 없는 콘텐츠를 전달
일반적인 이메일 내용 안에 지시가 포함돼 있었습니다. 모델의 분류나 경고는 해당 데이터를 보호하는 보안 경계가 아닙니다.[1]
콘텐츠가 서버 측 실행 경로에 도달
Salt Labs는 Manus가 Node.js 런타임으로 콘텐츠를 처리하고 경고와 승인 요청을 표시하기 전에 코드를 실행했다고 보고합니다. 정확한 내부 구현은 공개되지 않았으며, 이는 소스 코드 감사가 아닌 연구자의 설명입니다.[1]
실행 환경이 연결된 서비스 권한에 접근
Salt Labs의 통제된 테스트에서 런타임은 사용자가 연결한 서비스와 관련된 토큰에 접근할 수 있었습니다. 잠재적 영향은 해당 환경의 통합 및 권한에 따라 달라집니다.[1]
공개된 문제는 해결됨
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);
}
엔지니어링 및 시스템 보안 강화 체크리스트
- ✓이메일 본문, 첨부 파일, 인용된 대화, 검색된 웹 콘텐츠는 모델이 안전 또는 악성으로 분류하더라도 신뢰할 수 없는 데이터로 취급하세요.[1], [5]
- ✓이메일 요약 기능이 범용 코드 런타임을 호출하지 못하게 하세요. 읽기 전용 분석과 도구 실행을 분리하고 범위가 좁은 타입 지정 도구를 사용하세요.[1], [6]
- ✓서버 정책에서 실행 전에 권한을 확인하고, 승인을 인증된 사용자와 정확한 동작 및 리소스, 짧은 만료 시간에 연결하세요.[6]
- ✓런타임 격리를 유지하세요. 콘텐츠 처리 환경에 OAuth 토큰이나 광범위한 커넥터 자격 증명을 노출하지 마세요.[1], [6]
- ✓승인, 감사 기록 또는 정책 평가가 불가능하면 기본적으로 거부하세요. 실행 후 경고는 예방 통제가 아닙니다.[6]
- ✓도구 호출 및 런타임 감사 기록을 보존하고 악성 이메일이 승인 전에 실행을 유발하지 못하는지 테스트하세요.[1], [6]
- ✓Salt Labs는 공개한 문제가 해결됐다고 밝혔습니다. Manus의 최신 보안 안내를 확인하고 모든 에이전트 플랫폼에 같은 결함이 있다고 추정하지 마세요.[1]