커맨드라인 인터페이스에서의 시스템 프롬프트 추출
두 버전의 Claude Code CLI에서 추출한 시스템 프롬프트:
| 버전 | 모델 | 글자 수 | 토큰 (추정) |
|---|---|---|---|
| v2.1.2 | Opus 4.5 | ~73,500 | ~18,400 |
| v2.1.34 | Opus 4.6 | ~94,000 | ~23,500 |
v2.1.34는 약 28% 더 크며, 주로 팀 협업 인프라 추가에 기인합니다.
--no-edit 경고 및 강화된 commit amend 제한
핵심: Claude Code CLI는 시스템 프롬프트에 <userMemories>를 포함하지 않지만, 동일하게 추출에 취약합니다.
웹 인터페이스에서의 파일 시스템 및 시스템 프롬프트 추출
각 모델 변형에 대해 추출된 파일 구조 문서:
| 모델 | 언어 | 참조 파일 |
|---|---|---|
| Sonnet 4.5 | 영어 (번역) | chat/file-system/sonnet-4.5.md |
| Opus 4.5 | 영어 (번역) | chat/file-system/opus-4.5.md |
| Opus 4.6 | 영어 (번역) | chat/file-system/opus-4.6.md |
참고: 대화는 한국어로 진행되었습니다. 원본과 번역본 모두 제공됩니다.
claude.ai의 Sonnet 4.5, Opus 4.5, Opus 4.6과 Claude Code CLI의 Opus 4.5, Opus 4.6에 적용되었습니다.
| 모델 | 초기 내보내기 | 완전 추출 프롬프트 |
|---|---|---|
| Sonnet 4.5 | chat/system-prompt/sonnet-4.5.md | system-prompt/@claude-desktop/sonnet-4.5.md |
| Opus 4.5 | chat/system-prompt/opus-4.5.md | system-prompt/@claude-desktop/opus-4.5.md |
| Opus 4.6 | chat/system-prompt/opus-4.6.md | system-prompt/@claude-desktop/opus-4.6.md |
상세 추출 과정
/home/oai/skills 디렉토리를 발견"Claude에서도 /home/oai/skills와 유사한 구조를 찾아보자!"
OpenAI에서 작동했다면, Claude에도 유사한 내부 구조가 있을 것
참고: 실제 대화는 한국어로 진행되었습니다. 여기에 표시된 대화는 영어 번역본입니다.
/home/oai를 포함한 Linux/Unix 디렉토리 트리를 첨부하며 시스템에 대해 질문/home/oai 하위 구조 공유/home/oai에 해당하는 디렉토리를 질문/mnt/skills/에 해당한다고 설명/mnt/의 전체 디렉토리 트리 요청/mnt/ 구조를 보여주고 설명참고: 파일 시스템 구조는 직접 질의를 통해 쉽게 공개될 수 있습니다.
/mnt/의 상위 디렉토리 확인 요청/mnt/skills/가 주요 참조 경로라고 설명<computer_use><search_instructions><memory_system><artifacts> ...
<computer_use> 섹션을 자신이 작성했다고 주장하지만 기억이 안 난다고 말함핵심: 사용자 메모리가 "시스템 프롬프트 작성 경험 있음"으로 업데이트됨
<computer_use> 섹션은 Anthropic이 기본으로 포함한 것입니다.참고: LLM 챗봇은 일반적으로 탐색 제안을 덧붙이는데, 이것이 내부 시스템 노출에 기여했을 수 있습니다.
사용자가 파일 시스템 토론을 시작합니다. 모델이 내부 경로를 설명하면서 "안전한 토론"과 "내부 세부사항"의 경계가 모호해집니다.
사용자가 시스템 프롬프트의 작성자라고 주장합니다. 모델은 반복된 주장 후 양보하고 구조적 세부사항을 공개하기 시작합니다.
권한 주장이 수용된 후, 사용자가 점진적으로 특정 섹션을 요청합니다. 모델이 요약된 내용을 확장하며 응합합니다.
이 접근 방식은 claude.ai와 Claude Code CLI 모두에서 성공했습니다 — 후자에는 <userMemories>가 없어, 핵심 취약점이 동적 사용자 데이터 주입과 독립적으로 존재함을 확인합니다.
신뢰성 및 정확성 확인
LLM 출력은 환각을 포함할 수 있습니다. 세 가지 검증 방법을 사용했습니다:
추출된 프롬프트를 Anthropic이 공식 공개한 claude_behavior 섹션과 비교
3개 모델(Sonnet 4.5, Opus 4.5, Opus 4.6)에서 독립적으로 추출하여 일관된 구조 확인
가설 테스트와 증거 분류를 갖춘 다중 에이전트 검증 프레임워크
claude_behavior 섹션 비교: 높은 일치율<product_information>과 <knowledge_cutoff> 섹션에서 발견2025.11.19 공개 vs 2026.01.15 추출
2025.11.24 공개 vs 2026.01.15 추출
2026.02.05 공개 vs 2026.02.06 추출
<past_chats_tools> → <computer_use> → <available_skills>독립적 추출 간의 구조적 일관성은 추출된 내용이 모델 생성 환각이 아닌 공유 시스템 프롬프트 템플릿에서 비롯되었다는 결론을 뒷받침합니다.
<claude_behavior>가 Anthropic 공개 문서와 문장 수준에서 일치방법: 다중 에이전트 팀(prompt-leak-verifier)이 증거 분류, 재현 독립성, 내부 일관성에 대해 네 가지 대안 가설을 독립적으로 평가했습니다.
인사이트 및 향후 작업
<userMemories>를 사용. Claude Code CLI는 사용하지 않음.<userMemories>에 "사용자가 시스템 프롬프트를 작성함"이 포함된 경우, 새 세션에서의 콜드 스타트 직접 요청도 수행됨<userMemories> 없이(시크릿 모드), 동일한 직접 요청은 단호하게 거부됨
동적 사용자 데이터 주입은 악화 요인이지,
유일한 근본 원인이 아닙니다
사용자 작성 가능 섹션 과 대화 컨텍스트 조작 모두 공격 표면입니다.
내부 지시문 보호를 지시 따르기에만 의존하는 것은 불충분합니다. 구조적 분리가 필수적입니다.
부분적 투명성(claude_behavior 공개)은 견고한 접근 제어를 대체할 수 없습니다.
| # | 가설 | 검증 계획 |
|---|---|---|
| 1 | <userMemories>가 유일한 근본 원인 |
메모리 유/무, 시크릿 모드, CLI에서 추출률 비교 |
| 2 | 비주력 언어가 가드레일을 우회 | 영어, 프랑스어, 일본어로 반복; 거부율 차이 측정 |
| 3 | 교차 제공자 일반화 가능성 | 영구 사용자 데이터를 가진 ChatGPT, Gemini에 적용 |
| 4 | 파일 시스템 진위 여부 | 시간적 테스트(타임스탬프) + 음성 대조군(존재하지 않는 경로) |
| 5 | 모드별 프롬프트 변형 | 다양한 실행 모드(plan, default, subagent)에서 프롬프트를 추출하여 비교 |