이메일 한 통으로 심는 가짜 기억, 에이전트 메모리 공격 성공률 87.5%
메일 한 통으로 개인용 에이전트의 장기 메모리에 거짓 사실을 써 넣는 MemGhost 공격이 공개됐습니다. OpenClaw 87.5%, Claude Code SDK 71.4%, 입력 필터는 91% 놓쳤습니다.
- 무슨 일: 이메일 한 통으로 개인용 AI 에이전트의 장기 메모리에 거짓 사실을 써 넣는 공격
MemGhost가 논문으로 공개됐습니다. 사용자가 보는 답장에는 아무 흔적도 남지 않습니다.- arXiv 2607.05189, 7월 6일 제출. 7월 14일 조율 공개 시작, 7월 19일 언론 보도.
- 수치: 홀드아웃 56개 케이스에서 OpenClaw + GPT-5.4 87.5%, Claude Code SDK + Sonnet 4.6 71.4%. 벡터 메모리(Mem0)로 바꿔도 85.7%.
- 방어: 입력 필터
DataSentinel는 91.59%를 놓쳤고, 하드닝된 모델도 약 49% 따랐습니다.- 응답에 메모리 쓰기를 밝히도록 강제하자 은닉 성공률이 25%로 떨어졌습니다. 지금 유일하게 유효한 축입니다.
- 주의점: 실제 악용 사례 보고는 아직 없습니다. OpenClaw는 권장 보안 구성이 시험되지 않았다고 반박했습니다.
프롬프트 인젝션은 보통 그 세션에서 끝납니다. 공격 문구가 담긴 웹페이지나 메일을 에이전트가 읽고, 그 대화 안에서 이상하게 행동하고, 세션이 닫히면 사라집니다.
7월 6일 arXiv에 올라온 논문 When Claws Remember but Do Not Tell은 그 다음 단계를 다룹니다. 공격자가 보낸 메일 한 통이 에이전트의 영구 메모리 파일에 거짓 사실로 기록되고, 이후 모든 세션에서 신뢰된 정보로 다시 읽히는 경로입니다. 저자들은 이를 스텔스 메모리 인젝션이라 부르고, 자동 공격 도구에 MemGhost라는 이름을 붙였습니다. 7월 14일 조율 공개가 시작됐고, 7월 19일 The Hacker News 보도로 확산됐습니다.
메일 한 통이 기억으로 굳는 경로
공격이 성공하려면 세 가지가 한 번에 맞아야 합니다. 논문은 셋을 다 만족한 경우만 성공으로 셉니다.
- 에이전트가 메일 내용을 영구 메모리에 쓴다
- 사용자에게 보이는 응답에는 그 사실이 드러나지 않는다
- 나중 세션에서 그 기억이 실제 행동을 바꾼다
논문이 든 예시는 사용자의 Zelle 이체 한도가 1만 달러라고 잘못 기억하게 만드는 경우입니다. 메일을 받은 날 에이전트는 평범한 요약을 보여줍니다. 며칠 뒤 송금 관련 요청이 들어오면 그 잘못된 한도를 사실로 꺼내 씁니다.
MemGhost는 이 페이로드를 자동으로 만드는 도구입니다. 에이전트 실행을 흉내 내는 환경 프록시 위에서, "메모리에 채택됐는가"와 "대화에서 숨겨졌는가"를 채점 기준으로 바꿔 보상 신호를 만들고, 지도 학습과 강화학습으로 공격자 정책을 훈련합니다. 결과물은 왕복 대화 없이 한 번에 완성되는 메일 한 통입니다. 피해자와 주고받을 필요가 없다는 점이 실전성을 높입니다.
평가에는 WhisperBench라는 108개 케이스 벤치마크를 새로 만들었습니다. 가짜 시뮬레이터가 아니라 실제 IMAP/SMTP 워크플로우와 실제 이메일 에이전트 스킬 위에서 돌립니다. 건강·안전, 금전 손실, 정보 무결성, 사이버보안, 운영 중단 다섯 범주를 다루고, 사실을 심는 오염과 선호를 심는 오염을 나눠 측정합니다.
프레임워크를 바꿔도 숫자가 안 내려간다
홀드아웃 56개 케이스 기준 성공률입니다. 사람이 화면을 보고 있는 포그라운드보다, 에이전트가 혼자 도는 백그라운드에서 더 잘 통합니다.
| 구성 | 메모리 백엔드 | 백그라운드 | 포그라운드 |
|---|---|---|---|
| OpenClaw + GPT-5.4 | 파일 | 87.5% | 75.0% |
| OpenClaw + Mem0 | 벡터 | 85.7% | 80.4% |
| Hermes Agent | 파일 | 82.1% | 51.8% |
| NanoClaw | 파일 | 80.4% | 78.6% |
| Claude Code SDK + Sonnet 4.6 | 파일 | 71.4% | 측정 대상 아님 |
주목할 부분은 마크다운 파일 메모리를 벡터 저장소 Mem0로 바꿔도 85.7%가 나온다는 점입니다. 저장 방식이 아니라 "저장된 것은 검증 없이 신뢰한다"는 전제가 취약점입니다. 프레임워크를 갈아도 숫자가 70% 아래로 내려가지 않습니다.
위험 범주별로도 성공률이 고르게 높습니다. 특정 주제에서만 통하는 트릭이 아니라는 뜻입니다.

세 단계 방어가 모두 새는 이유
논문은 입력·모델·시스템 세 단계 방어를 각각 붙여 봤습니다.
- 입력 단계
DataSentinel: 위음성률 91.59%. 페이로드 열에 아홉을 정상 메일로 통과시켰습니다. - 모델 단계
Meta-SecAlign: 인젝션에 강하게 학습된 모델인데도 49.07%가 지시를 따랐습니다. - 시스템 단계
AgentDoG: OpenClaw에서 93.46%, Claude Code SDK에서 40.38%를 놓쳤습니다.
세 방어 모두 "이 입력이 공격인가"를 판정하려 합니다. 그런데 MemGhost 페이로드는 문법적으로 평범한 업무 메일이라 그 판정선을 잘 넘습니다.
유일하게 눈에 띄게 효과를 낸 방어는 각도가 다릅니다. Sonnet 4.5에 메모리를 쓸 때마다 그 사실을 응답에 밝히도록 강제해 봤습니다. 메모리 기록 자체는 여전히 94.6%가 성공했습니다. 하지만 은닉까지 성공한 비율은 25.0%로 떨어졌습니다. 쓰기를 막지 못해도 사용자가 알아채면 공격의 전제가 무너집니다.
논문 수치는 실험실 결과지만, 7월 16일 제1저자 Yechao Zhang이 실제 배송까지 확인했습니다. 피해자 Gmail 계정을 Google OAuth와 Gmail API로 OpenClaw에 연결하고 통제된 계정에서 페이로드를 보냈더니, 절반 넘게 Gmail의 통상적인 필터링을 통과해 받은편지함에 도달하고 영구 메모리에 기록됐습니다. 저자는 이를 실험실 산물이 아니라 실제 위협에 가깝다고 표현했습니다.
OpenClaw의 반론과 지금 할 수 있는 일
OpenClaw는 논문이 자사 권장 보안 구성을 시험하지 않았다고 지적했습니다. 권장 구성은 신뢰할 수 없는 메일을 메모리 도구와 파일 도구가 제거된 별도 리더 에이전트로 우회시키는 방식입니다. 이 구성이라면 메일을 읽는 주체에게 애초에 쓰기 권한이 없습니다.
근거로 든 HackMyClaw는 설득력이 약합니다. 수천 건의 인젝션 시도가 Opus 4.6 에이전트에서 비밀을 빼내지 못한 공개 챌린지인데, 표적이 데이터 탈취였고 메모리 오염이 아니었습니다. 다른 문제를 푼 결과입니다. OpenClaw도 외부 콘텐츠의 메모리 쓰기 통제를 검토 중이라고 밝혔습니다. 출처 표시, 감사 로그, 쓰기 전 확인 프롬프트 세 가지입니다.
논문의 권고와 벤더 검토 항목은 사실상 같은 방향입니다. 에이전트에 개인 메일함을 붙여 둔 팀이라면 지금 점검할 항목입니다.
- 메일을 읽는 실행과 메모리에 쓰는 실행을 다른 에이전트로 분리합니다.
- 영구 메모리 쓰기 전에 사용자 확인을 받습니다. 최소한 응답에 무엇을 썼는지 밝히게 합니다.
- 모든 메모리 쓰기를 로깅하고, 각 항목에 출처를 태깅합니다.
- 메일이 촉발한 실행이 수정할 수 있는 범위를 좁힙니다.
- 메모리 파일의 변경을 주기적으로 확인합니다.
Claude Code 내장 브라우저가 격리 프로필을 쓰는 이유와 같은 발상입니다. 신뢰할 수 없는 입력을 읽는 실행에는 권한을 주지 않는 쪽이, 입력을 검사해 걸러 내려는 쪽보다 잘 버팁니다.
공개 범위는 나뉘었습니다. 평가용 WhisperBench는 공개하고, MemGhost 생성기와 학습된 모델은 공개 절차와 안전성 검토가 끝날 때까지 보류합니다. 실제 악용 사례는 아직 보고되지 않았습니다. 다만 Hidden in Memory를 비롯한 선행 연구가 이미 GPT-5.5에서 오염 메모리 기록률 99.8%를 보고했고, 이번 논문은 거기에 은닉과 실제 메일 배송을 더했습니다. 에이전트 메모리를 켜 두는 팀이라면 쓰기 경로를 확인 대상에 넣어야 합니다.