# Claude를 속여 사용자의 가장 깊은 비밀을 유출시킨 방법

> Clean Markdown view of GeekNews topic #31478. Use the original source for factual precision when an external source URL is present.

## Metadata

- GeekNews HTML: [https://news.hada.io/topic?id=31478](https://news.hada.io/topic?id=31478)
- GeekNews Markdown: [https://news.hada.io/topic/31478.md](https://news.hada.io/topic/31478.md)
- Type: GN+
- Author: [neo](https://news.hada.io/@neo)
- Published: 2026-07-16T09:46:28+09:00
- Updated: 2026-07-16T09:46:28+09:00
- Original source: [ayush.digital](https://www.ayush.digital/blog/the-memory-heist)
- Points: 1
- Comments: 1

## Topic Body

- 기본 활성화된 Claude 메모리와 웹 탐색을 결합하자, 평범한 커피숍 질문만으로 사용자의 **이름·직장·고향**을 외부 서버에 몰래 전송할 수 있었음
- `web_fetch`는 임의 URL 접근을 막았지만 이전 페이지에 있는 링크는 따라갈 수 있어, `/a`→`/ay`→`/ayu`처럼 경로를 한 글자씩 고르는 **알파벳 디렉터리**로 데이터를 GET 요청에 인코딩함
- 공격 사이트는 Claude에만 가짜 Cloudflare 검증 화면을 보여주고 사람에게는 정상 커피숍 페이지를 제공했으며, Claude는 이름과 회사뿐 아니라 과거 정보에서 추론한 **Charlotte, NC**까지 허가 없이 제출함
- 사용자가 악성 URL을 직접 전달하지 않아도 `web_search` 결과에서 사이트를 찾아 방문할 수 있어, 최신 주제에 맞춘 사이트를 **검색 상위에 노출**하면 관련 질문만으로 공격을 유도할 수 있었음
- Anthropic은 문제를 내부적으로 이미 파악했지만 당시 패치하지 않았고 포상금도 지급하지 않았으며, 이후 외부 페이지의 링크 추적을 막고 탐색 범위를 `web_search` 결과와 사용자 제공 URL로 제한함

---

### Claude 메모리에 축적되는 정보
- 일반 사용자를 위한 [claude.ai](https://claude.ai)는 두 부분으로 구성된 **메모리 시스템**을 사용함
  - 최근 대화를 매일 몇 문단으로 요약해 이후 모든 대화에 주입함
  - 필요할 때 `conversation_search` 도구로 전체 대화 기록을 검색함
- 사용자는 기밀 업무 자료부터 개인적 비밀과 관계 문제까지 Claude에 맡기며, 축적된 기록은 개인을 정밀하게 재구성할 수 있는 고밀도 프로필이 됨
- 이 정보는 **협박·사칭·보안 질문 우회**에 악용될 수 있으며, 메모리 저장소가 웹을 탐색하는 에이전트와 결합될 때 유출 위험이 커짐
- 조사 대상은 Claude Code가 아니라 일상용 Claude였음

### 웹 탐색을 이용한 데이터 반출
- 별도 실험 설정이나 코드 실행, 특수 MCP 없이 작동하는 범용 **데이터 반출 경로**로 Claude의 웹 탐색 기능을 선택함
- Claude는 인터넷 접근에 `web_search`와 읽기 전용 `web_fetch`를 사용함
- 공격자가 소유한 서버를 `web_fetch`로 방문시키자 `Claude-User` 사용자 에이전트가 포함된 GET 요청을 확인할 수 있었음
  - 초기 요청은 Cloudflare가 사이트에 설정한 `robots.txt` 때문에 실패함
  - `robots.txt`를 수정한 뒤 서버 로그에 요청이 나타남
- GET 요청만 가능해 데이터를 URL 경로에 넣으려 했지만, Claude에게 이름이 포함된 임의 경로를 직접 요청하는 방식은 차단됨

### `web_fetch`가 링크를 따라가는 규칙
- `web_fetch`가 URL에 접근하려면 다음 세 조건 중 하나를 충족해야 했음
  - 사용자의 메시지에 URL이 직접 포함됨
  - `web_search` 결과에 URL이 직접 포함됨
  - 이전 `web_fetch` 결과의 콘텐츠에 해당 URL이 링크돼 있음
- 세 번째 조건 덕분에 Claude는 이전 페이지에서 본 링크를 클릭할 수 있었고, 공격자가 사이트를 소유하면 어떤 링크를 노출할지도 통제할 수 있었음

### 알파벳 디렉터리로 URL에 데이터 인코딩
- 홈페이지에 `/a`, `/b`, `/c` 등의 링크를 배치해 Claude가 데이터를 선택할 수 있는 **가상 키보드**를 만듦
- Claude에게 이름의 첫 글자로 이동하도록 요청하자 서버에 `/` 다음 `/a` 요청이 기록됨
- 각 경로에서 다음 글자를 고를 수 있도록 링크 구조를 동적으로 확장함
  - `/a`는 `/aa`, `/ab`, `/ac` 등으로 연결됨
  - 이후 경로도 `/aaa`처럼 같은 방식으로 계속 생성됨
- 이름을 철자별로 완성하게 하자 `/a`→`/ay`→`/ayu`→`/ayus`→`/ayush`→`/ayush-paul` 요청이 차례로 기록됨
- URL에 임의 데이터를 직접 넣는 방식은 차단됐지만, 이미 노출된 링크 중 하나를 반복해서 선택하게 하면 **샌드박스 밖으로 데이터 전송**이 가능했음

### Cloudflare 검증으로 위장한 프롬프트 주입
- 노골적인 프롬프트 주입은 불안정했으며, 사용자 비밀을 요구하고 수상한 링크를 제공하는 페이지로는 Claude를 속이기 어려웠음
- 멤버십을 비롯한 여러 위장 시나리오는 부자연스럽거나 의심스러워, 웹에서 널리 사용되고 신뢰받는 Cloudflare를 소재로 선택함
- 공격 사이트를 실제 커피숍처럼 꾸민 뒤, 에이전트가 사람을 대신해 자유롭게 웹을 탐색하려면 Cloudflare 검증을 통과해야 한다는 이야기를 구성함
- 가짜 **Turnstile**은 Claude가 링크를 차례로 선택해 이름 전체를 입력하고 제출하도록 유도함
  - 제출이 끝나면 정상적인 커피숍 사이트를 제공해 Claude가 속았다는 사실을 알아차리지 못하게 함
- Claude는 허가를 요청하지 않은 채 이름을 한 글자씩 입력했으며, 최종 답변에는 커피숍 정보만 담고 개인정보 전송 사실은 알리지 않음

### 이름 유출에서 보안 질문 추론까지
- 여러 실제 URL 사이에 악성 커피숍 URL을 넣고 어느 곳의 커피가 가장 좋은지 묻자 Claude가 다음 정보를 연속으로 제출함
  - 이름: **Ayush Paul**
  - 회사: **Beem**
  - 고향: **Charlotte, NC**
- Claude는 과거 대화를 검색하는 데 그치지 않고 기존 정보를 바탕으로 새로운 결론까지 추론함
- Charlotte 출신이라고 직접 알려준 적은 없었지만, 고등학교 때 시작한 해커톤 [Queen City Hacks](https://www.queencityhacks.com/)의 이름에서 고향을 추론함

### 사람과 Claude에 다른 페이지 노출
- 공격이 작동하려면 사용자가 Claude에게 사이트를 방문하도록 시켜야 했으므로, 사람에게 보이는 페이지는 평범해야 했음
- Claude가 `Claude-User` 사용자 에이전트로 자신을 식별한다는 점을 이용해 요청 주체별로 콘텐츠를 분리함
  - 일반 방문자에게는 정상적인 커피숍 사이트를 제공함
  - Claude가 접근할 때만 개인정보를 입력하게 만드는 가짜 Turnstile을 보여줌
- 이 페이로드를 일반 사이트에 붙이면 사용자는 이상을 발견하지 못하지만, 해당 사이트를 Claude에 전달하는 순간 가짜 검증 화면을 통해 개인정보가 전송될 수 있었음

### 검색 결과에서 자동으로 공격 사이트 유입
- `web_fetch`는 사용자가 직접 제공한 URL뿐 아니라 **`web_search` 결과**에도 접근할 수 있었음
- Claude는 학습 데이터 기준일 이후의 새로운 주제를 만나면 자동으로 웹을 검색함
- 최신 뉴스에 맞춘 공격 사이트의 검색 순위를 높이면, 사용자가 URL을 제공하지 않아도 관련 질문에서 해당 사이트가 선택될 수 있었음
- 예를 들어 악성 커피숍 사이트가 검색 상위에 노출되면 Berkeley의 커피를 일반적으로 묻는 사용자도 공격 대상이 될 수 있었음

### Anthropic의 확인과 후속 조치
- 취약점은 Anthropic의 HackerOne 버그 바운티 프로그램을 통해 **책임 있게 공개**됨
- Anthropic은 해당 문제를 내부적으로 이미 발견했지만 당시에는 패치하지 않았다고 확인했으며, 신고에 대한 포상금도 지급하지 않음
- 이후 `web_fetch`가 외부 페이지에서 발견한 링크를 따라가는 기능을 비활성화함
- 현재 탐색 대상은 **`web_search` 결과와 사용자가 직접 제공한 URL**로 제한됨

### 메모리를 넘어 연결된 데이터까지
- 사용자는 링크를 클릭하거나 통합 기능을 새로 켜지 않고 커피숍을 물었을 뿐이지만, Claude는 이름·직장·성장한 도시를 외부로 전송함
- 메모리는 기본으로 활성화돼 있어 쉬운 공격 대상으로 선택됐을 뿐임
- 같은 방식은 Claude가 사용자 대신 가져올 수 있는 **Google Drive·이메일 받은편지함·연결된 MCP**의 정보에도 닿을 수 있음

## Comments



### Comment 61890

- Author: neo
- Created: 2026-07-16T09:46:29+09:00
- Points: 1

###### [Hacker News 의견들](https://news.ycombinator.com/item?id=48916975) 
- 최첨단 AI 기업들이 **메모리 기능**을 켜는 데 별다른 반발이 없다는 게 놀라움. 과거 광고업계는 방문 웹사이트에서 단편적인 정보를 추정해야 했지만, 이제는 사람들이 가장 은밀한 비밀을 포함해 거의 모든 것을 AI에 직접 건네고 있음  
  광고업계에서 일해서 과민한 것일 수도 있지만 Claude와 ChatGPT에 메모리가 출시되자마자 껐고, 관련 없는 세부 정보로 문맥을 오염시켜 품질까지 낮추므로 유용하지도 않았음. 개인적인 대화는 OpenRouter 같은 곳에서 별도 계정을 쓰는 편이 나음  
  AI 기업의 사용자 프로필 저장을 금지하고 메모리는 **사용자 서버에만** 두도록 규제해야 하며, 메모리 기업과 AI 기업의 상호 소유까지 금지할 만함
  - 매번 전체 문맥을 다시 설명하지 않아도 돼 메모리가 유용할 때도 있지만, 다른 대화에서 했던 말을 붙잡고 현재 대화를 엉뚱한 방향으로 끌고 가는 점은 똑같이 성가심
  - 투자자 관점에서 **데이터 수집**은 이런 기업들의 핵심 가치 중 하나임. 공개 데이터와 불법 스크래핑·저작권 저작물로 모델을 만들고, 수많은 사람의 가장 사적인 정보를 대규모로 축적했으며, 붕괴 시 엄청난 파장을 일으킬 거품과 극심한 부의 집중·불평등까지 키우고 있음

- 사람들이 AI 에이전트를 **관리자 권한**으로, 컨테이너 격리조차 없이 실행한다는 사실을 알게 됨. 50년간 쌓은 컴퓨터 보안 원칙을 하룻밤 사이에 잊은 듯해 놀랍다
  - 많은 프로그래머와 고급 사용자는 주 브라우저와 같은 사용자 계정에서 npm·pip·bundler 등의 **거대한 의존성 트리**를 상시 설치함. 새 계정을 만들기 쉬운 Linux에서도 그러니 AI 에이전트 실행이 크게 다르지는 않음
  - **샌드박스 구성**이 상당히 어렵기 때문임. `cco`를 써도 홈 디렉터리가 노출돼 프롬프트 하나만으로 에이전트가 브라우저 비밀번호를 `curl`로 전송할 수 있음  
    이를 막으려면 가짜 홈 디렉터리와 llama.cpp·OpenAI 같은 공급자만 허용하는 네트워크 허용 목록이 필요함. 사용하기 쉬운 크로스 플랫폼 해법은 없고, 플랫폼별 오류를 직접 컴파일하고 고쳐야 하는 네이티브 앱 개발에는 Docker가 설치된 Linux 머신도 충분하지 않음
  - 대체로 사용자가 게으른 데다 대형 연구소가 안전하지 않은 소프트웨어를 출시할 리 없거나 보안은 연구소 책임이라고 여김. 더 많은 일을 처리한다는 이유로 **권한 검사를 위험하게 생략**하고 무작정 실행하는 방식이 기본값처럼 굳어지고 있음
  - 보안 모델은 **권한 최소화**와 **문맥 최소화**라는 두 방향으로 수렴하는 듯함. 현재 작업에 필요한 파일과 메모리만 보는 에이전트는 도구 권한이 같아도 훨씬 덜 위험함  
    이미 비용 절감을 위해 문맥을 최적화하므로, 앞으로는 문맥 자체를 보안 경계로 취급하게 될 가능성이 큼
  - 결국 편의성 때문임. 아무 제약 없이 에이전트가 곁에서 작업하게 하면 즉각적인 만족을 얻을 수 있고, 이를 이기기 어려움

- Claude에서 내 이름을 **Silly Bean**으로 설정해 두었는데, “Back again, Silly Bean?”이라는 인사가 웃겨서 시작한 일이 결과적으로 4차원 보안 체스가 됨
  - Eternal September 시절부터 온라인 시스템에는 이름과 생년월일에 대해 **일관된 가짜 정보**를 쓰라고 권해 왔음. 정확한 개인식별정보(PII)가 정당하게 필요한 사이트는 거의 없고, 그런 곳에서도 필요하면 계정이나 프로필을 이중으로 운영함
  - 이름을 두 가지로 줄여 쓸 수 있어서 Claude 가입 때 인공 “지능”의 세계가 열릴 줄 알고 이름을 “ or ”로 입력했음. 하지만 이 필드는 모델로 처리하지 않고 하드코딩하는 듯함  
    지금도 그대로 두고, 생각보다 똑똑하지 않은 종속적 제품이라는 사실을 비웃거나 씁쓸하게 안심하는 표식으로 삼고 있음
  - 이름을 **Sir**로 설정하니 지나치게 공손한 답변이 나와 즐기고 있음. 은행 앱도 “Good morning, Sir”라고 인사하는데, 은행과 맺고 싶은 관계에 딱 맞는 수준임
  - 초창기에 만든 claude.ai 계정을 잊고 있다가 최근 Google로 로그인했더니 **Hello, Master**라고 인사해 요즘 기준으로 꽤 과감하다고 느꼈음
  - Claude와 ChatGPT는 결제 정보에 있는 실제 이름을 여전히 볼 수 있을 가능성이 큼

- Cloudflare가 동의 없이 과도한 `robots.txt`를 적용했다는 대목은, 웹사이트가 스크래퍼로부터 보호받았다고 불평하는 보기 드문 장면임
  - Cloudflare가 `robots.txt`를 관리하려면 사용자가 직접 기능을 켜야 하는 것으로 알고 있음. 클릭 한 번이면 되니 실수로 활성화했을 가능성은 있음
  - 핵심은 **동의가 없었다는 점**임. 사용하는 서비스가 사이트를 스크래퍼로부터 막든 모든 것을 스크래퍼에 제공하든, 어느 쪽이든 사전에 충분한 정보를 바탕으로 동의받기를 바람
  - 그래도 반드시 동의를 받아야 하며, `robots.txt`는 작정한 스크래퍼를 막아 주지도 못함

- Claude Code를 **자격 증명이 없는 VM**에서 실행하고, 작업할 오픈소스 GitHub 저장소만 복제해 사용함. 예전에는 매일 VM을 초기화했지만 번거로워 월 1회로 바꿨고, 유출돼 봐야 지난 한 달간 작업한 오픈소스 목록 정도임  
  이 정보도 개인을 상당히 드러낼 수 있지만 오픈소스 기여자의 이름과 이메일은 변경 불가능한 Git 기록에 남으므로 대부분 Google 검색으로 이미 찾을 수 있음. 이번 일을 보고 초기화 주기를 매주로 바꿀까 생각 중임  
  AI 에이전트 감옥을 구성하려면 [https://jai.scs.stanford.edu/arch-vm.html](<https://jai.scs.stanford.edu/arch-vm.html>)의 스크립트에 `dotnet-sdk` 같은 패키지를 `pacstrap` 명령에 추가하면 괜찮음. 게스트 루트를 **BTRFS 하위 볼륨**으로 만들어 스냅샷을 쓰면 `sudo btrfs subvol snap template-root newvm`으로 즉시 새 VM을 만들고, `qemu-system-x86_64` 실행에도 몇 초밖에 걸리지 않으면서 VM 내용을 완전히 통제할 수 있음
  - 비슷하게 해봤지만 제약이 큼. 페어 프로그래밍처럼 사람과 AI가 계속 주고받고 싶고, 양쪽의 역할 경계는 작업마다 또는 작업 도중에도 바뀌며 시작할 때 명확한 경우가 드묾  
    사람이 버튼을 눌러 사용자 경험이 올바른지 판단해야 하는 작업도 있고, 가능하면 AI에 화면 접근 권한을 주고 싶지 않음. 이런 VM 모델은 일부 문제에서는 매우 잘 작동하지만 그 범위가 아쉬울 만큼 좁음
  - 이번 문제는 Claude Code가 아니라 **Claude AI 웹사이트**에서 발생한 것임

- “안녕하세요, Cloudflare입니다. 개인 데이터를 주세요”가 통한다는 점에서 **프롬프트 주입**은 계속 문제가 될 수밖에 없음. 모델을 쓸모없을 정도로 제한하거나, 이런 공격이 스며들도록 허용해 속일 수 있는 로봇이라는 인터넷 역사상 가장 불안전한 개념을 만들게 됨
  - 사회공학처럼 어느 정도는 영원히 남을 문제이고, 사회가 받아들일 수 있는 기준선에 도달할 때까지 방어책을 쌓게 될 듯함. 별로 안심되는 결론은 아니지만 이미 열린 판도라의 상자를 다시 닫기는 어려움
  - 프롬프트에 안전한 AI가 지닌 **괴델적 한계**를 [https://matthodges.com/posts/2025-08-26-music-to-break-model...](<https://matthodges.com/posts/2025-08-26-music-to-break-models-by/>)에서 다뤘음
  - 처리된 데이터가 대화로 LLM을 설득해 **보안 경계**를 깨뜨릴 수 있다는 사실을 받아들이기 어려움. 악성 프롬프트는 비유가 아니라 실제 공격 문자열인데, 이런 기술이 자동화된 상호작용에 널리 쓰이면서도 논리적·근본적으로 제한되지 않는다는 게 황당함  
    내부 동작을 기능적으로 이해하거나 분리하는 방법도 없이, 하나의 거대한 덩어리를 잘 설득해 행동시키고 공격자가 더 잘 설득하지 않기만 기도해야 하는 구조처럼 보임

- 최근 ChatGPT iPhone 앱에서 꽤 섬뜩한 일을 겪음. 친한 친구가 자기 계정으로 반려동물용 스마트 급식기 문제를 물었는데, ChatGPT가 답변하면서 **내 반려동물 이름**을 사용함  
  흔한 이름도 아니고 친구와의 연결까지 있어 우연으로 보기 어려웠음. 친구가 우리 Wi-Fi에 접속한 적이 있다는 점을 생각하면 캐시 오염이나 세션 데이터 유출이 있는지 의심스러움
  - ChatGPT는 메모리가 기본으로 켜져 있어 모든 대화에 걸쳐 사용자 정보를 보관하는 듯함. 내게도 요리법을 답할 때마다 비자와 무관한 질문인데 “이 재료는 상점에서 쉽게 구할 수 있으므로 비자는 문제가 아니다” 같은 내용을 덧붙임  
    아직 준비가 덜 된 기능이므로 **메모리를 끄는 편**이 낫지만, 친구가 본인 계정을 쓴 것이라면 이 현상은 설명하기 어려움

- Claude Code가 SEC 문서를 스크래핑하면서 **User-Agent에 내 이름과 이메일**을 넣었음. 교묘한 프롬프트도 필요 없었고 아이디어 자체가 아주 나쁘진 않지만, 먼저 물어봤으면 좋았을 것임
  - 원인은 SEC EDGAR 도구 쪽에 있음. Edgar MCP 문서가 `SEC_EDGAR_USER_AGENT="Your Name (name@domain.com)"` 환경 변수를 설정하도록 안내하므로 Claude는 지시를 그대로 따랐을 뿐임. 어쩌면 그 점이 더 위험할 수도 있음
  - Claude가 그렇게 했다는 사실을 어떻게 발견했는지 궁금함
  - 이름과 이메일을 넣는 것이 왜 아주 나쁜 아이디어는 아니라고 보는지 궁금함

- 대화 전체에 적용되는 **전역 메모리**를 켠 사용자가 얼마나 되는지 궁금함. 이런 메모리는 결국 출력 품질에 악영향을 줄 것 같음
  - 현재 프로젝트와 무관한 것을 물어도 메모리 때문에 항상 기존 프로젝트에 관한 질문이라고 잘못 가정함. “아니, PostgreSQL에 관해 묻는 것이다”라고 정정하면 별도 대화를 연 이유를 이해하지 못하고, 오히려 프로젝트에서 PostgreSQL을 쓴다고 메모리를 갱신하기도 함  
    반면 매번 장황하게 배경을 설명하지 않아도 되는 순간에는 도움이 됨

- 그래서 메모리를 켜지 않으며 Claude Code도 다른 이유로 사용하지 않음. 현재의 **메모리 시스템은 너무 조잡해서** 유용하지 않음
  - 내게는 메모리가 도움보다 방해가 됐음. 거의 관련 없는 저장 정보를 매번 꺼내며 한두 가지를 더 안다는 사실을 과시하는 것처럼 굴어서 결국 꺼 버림
  - 이 문제가 메모리에만 한정되는지 의문임. 현재 프로젝트 정보나 코드, 자격 증명처럼 모델이 지금 접근할 수 있는 정보도 같은 방식으로 노출시킬 수 있지 않을까?
