
Claude Code v2.1.214의 권한 취약성 수정 및 hooks 파괴적 변경 해설
요약
Claude Code v2.1.214 업데이트를 통해 보안 취약성 수정 및 hooks의 파괴적 변경 사항을 다룹니다. 권한 체크 우회 문제를 해결하고, hooks의 패턴 매칭 방식을 변경하여 보안성을 강화했습니다.
핵심 포인트
- 권한 체크 우회 및 자동 승인 취약성 7종 수정
- hooks의 if: 조건 패턴 매칭 방식 변경 (Breaking Change)
- Windows PowerShell 및 Docker 원격 모드 보안 강화
- EndConversation 도구 추가 및 OpenTelemetry 지원
2026년 7월에 출시된 Claude Code v2.1.214는 권한 체크 주변의 여러 보안 취약성을 수정한 중요한 업데이트입니다. 단순한 버그 수정에 그치지 않고, Edit(src/**)와 같은 허가 규칙이 의도하지 않은 범위까지 자동 승인해 버리는 문제나, Windows PowerShell 5.1 환경에서의 권한 체크 바이패스(bypass) 등, 실운용에서 간과하기 쉬운 심각한 허점들이 메워졌습니다.
이와 함께, hooks의 if: 조건 패턴의 매칭 범위가 변경되는 **파괴적 변경 (Breaking Change)**이나, 악의적인 대화를 Claude 스스로 종료할 수 있는 EndConversation 도구의 추가 등, 개발자가 파악해 두어야 할 토픽이 다수 포함되어 있습니다.
본 기사에서는 Claude Code를 CI/CD나 팀 개발에 도입하고 있는 엔지니어를 대상으로, 이번 릴리스에서 "무엇이", "왜" 바뀌었는지 정리하고 필요한 대응을 요약합니다.
📌 영향을 받는 사람
hooks의if:조건에서dir/**와 같은 단일 세그먼트 패턴을 사용하고 있는 사람permissions에Edit(src/**)등의 디렉토리 허가 규칙을 설정하고 있는 사람- Windows / PowerShell 환경에서 Claude Code를 사용하고 있는 사람
- OpenTelemetry로 세션의 비용·토큰을 측정하고 있는 사람
이번 릴리스는 크게 "보안 수정", "파괴적 변경", "신기능", "안정성 개선"의 4가지 계통으로 나뉩니다. 특히 권한 체크의 취약성 수정(change-001)과 그에 대응하는 hooks의 패턴 매칭 변경(change-002)은 밀접하게 연관되어 있습니다.
가장 중요한 것은 change-001입니다. 다음 7가지 문제가 동시에 수정되었습니다.
| # | 문제 | 리스크 |
|---|---|---|
| 1 | 단일 세그먼트 dir/** 허가 규칙이 <cwd>/dir 이외의 트리 내 동일 이름 디렉토리도 자동 승인 | 의도하지 않은 경로에 대한 쓰기가 승인됨 |
| 2 | Windows PowerShell 5.1에서의 권한 체크 바이패스 (bypass) | Windows 환경에서 권한 확인이 작동하지 않음 |
| 3 | bash와 권한 분석기(analyzer)에서 FD 리다이렉트 해석이 다를 경우의 처리 | 해석 불일치를 악용한 권한 우회 |
| 4 | 10,000자를 초과하는 명령어가 자동 실행됨 | 거대 명령어의 내용을 확인하지 않고 실행 |
| 5 | zsh [[ ]] 내의 변수 서브스크립트·수식자를 비활성 텍스트로 취급 | 실제로는 실행 가능한 코드가 간과됨 |
| 6 | help / man 명령어의 자동 승인을 통한 옵션 경유 실행 | 명령어 치환(command substitution) 등을 통한 의도하지 않은 실행 |
| 7 | 원격 세션에서 권한 프롬프트가 로컬 확인보다 먼저 진행 | 확인 전에 처리가 진행되어 버림 |
나아가 docker --url / --connection / --identity 및 Podman의 원격 모드 등, 데몬 리다이렉트(daemon redirect)를 동반하는 docker 명령어에도 새롭게 권한 프롬프트가 추가되었습니다.
⚠️ Breaking Change
수정 6에 의해, 기존에 자동 승인되었던 help / man 명령어의 일부가 앞으로는 권한 프롬프트를 요구하게 됩니다. CI 등에서 무인 실행(unattended execution)하는 스크립트가 있는 경우, 사전에 허가 규칙을 재검토해야 합니다.
change-002는 change-001의 허가 규칙 수정과 대칭되는 사양 변경입니다.
- 구 사양: hooks의
if:조건에서dir/**라고 쓰면, 트리 내 임의의 깊이에 있는dir/에 매칭됨 - 신 사양:
<cwd>/dir직하에만 매칭됨. 임의의 깊이에서 매칭시키고 싶다면 명시적으로**/dir/**라고 써야 함
참고로, deny / ask의 권한 규칙 자체는 기존과 동일하게 임의의 깊이에서 매칭되는 동작을 유지하며, 변경되는 것은 hooks의 if: 조건뿐입니다.
기타 파괴적 변경 (change-009, medium):
| 변경점 | 내용 |
|---|---|
file 명령 | -m /--magic-file , -f /--files-from 사용 시 읽기 전용(read-only)으로 취급되지 않고 권한이 필요함 |
| 연결 풀링 (Connection Pooling) | keep-alive의 stale-connection 에러 발생 후에는 비활성화되며, 재시도 시 새로운 소켓을 엶 |
| SessionStart hooks | 포크(fork) 시작 시의 소스가 "resume"가 아닌 "fork"가 됨 |
고도로 악의적인 사용자나 탈옥(jailbreak) 시도에 대해 Claude 스스로 세션을 종료할 수 있는 EndConversation 툴이 추가되었습니다 (change-003). 이는 claude.ai에서 2025년부터 제공되던 기능이 Claude Code에도 도입된 형태로, Anthropic의 모델 복지 (model welfare)를 위한 노력의 일환입니다.
| 변경 | 개요 |
|---|---|
| OpenTelemetry 강화 (change-004) | message.uuid · client_request_id · tool_source 속성 추가, CLAUDE_CODE_OTEL_CONTENT_MAX_LENGTH 환경 변수 추가, 트레이스 컨텍스트(trace context) 누락 및 토큰 이중 계상 수정 |
| UX/가시성 (Observability) 개선 (change-005) | 장시간 실행되는 툴의 진행 상황 하트비트(heartbeat), 메모리 파일의 업데이트 타임스탬프, 서브 에이전트 행의 추론 노력(inference effort) 표시 |
| Windows/PowerShell 수정 (change-006) | 행(hang), 문자 코드 충돌, UTF-16LE 쓰기 문제, 기업 프록시에서의 스트리밍 실패 등을 수정 |
| 백그라운드 세션 수정 (change-007) | 데몬(daemon)의 소켓 경합, 유휴(idle) 세션의 프로세스 잔류, 세션 삭제 불가 등을 수정 |
| hooks/MCP/안정성 수정 (change-008) | hook의 exit code 2가 차단되지 않던 문제, MCP 슬래시 명령 소실, 플러그인 로딩 회귀(regression) 등의 수정 |
반드시 확인해야 할 포인트:
-
hooks의
if:조건을 전수 조사하십시오.
dir/**와 같은 패턴을 사용하고 있는 경우, 의도가 "cwd 직하(direct child)만"인지 아니면 "임의의 깊이(arbitrary depth)"인지 확인하고, 필요하다면**/dir/**로 수정하십시오. -
permissions의 디렉토리 허용 규칙을 재확인하십시오.
Edit(src/**)와 같은 규칙은 이전까지 의도치 않게 넓은 범위를 자동 승인했을 가능성이 있습니다. 이번 수정으로 동작이 엄격해졌기 때문에, 기존에 통용되던 작업이 권한 프롬프트를 요구하게 될 수 있습니다. -
CI/무인 실행 환경에서의 동작을 확인하십시오.
help/man명령의 자동 승인 중단, 10,000자 초과 명령의 강제 프롬프트화,docker데몬 리다이렉트로의 권한 추가로 인해, CI 파이프라인이 중간에 권한 대기 상태에 빠질 수 있습니다. 사전에 스테이징 환경에서 릴리스를 테스트할 것을 권장합니다. -
SessionStart hooks에서
"resume"를 판정 조건으로 사용하고 있는 경우
포크 시작 시"fork"를 반환하게 되었으므로, 조건 분기(conditional branching)를 재검토해야 합니다.
💡 Tips
영향 범위를 빠르게 파악하려면, 프로젝트 내의 .claude/settings.json이나 hooks 설정 파일을 grep -r "dir/**"와 같이 검색하여 해당 부분을 하나씩 확인하는 것이 확실합니다.
# Before (v2.1.213 이전)
# 트리 내의 임의의 깊이에 있는 "dist" 디렉토리에 매칭됨
hooks:
...
# After (v2.1.214 이후)
# <cwd>/dist 에만 매칭되도록 변경됨. 임의의 깊이가 필요하다면 **/dist/** 를 사용
hooks:
...
# Before: "resume" 만을 체크하고 있었음
if [ "$SESSION_SOURCE" = "resume" ]; then
echo "기존 세션을 재개했습니다"
...
수정 후: 포크(fork) 시작 시 "fork"를 반환하므로, 두 경우를 모두 처리함
if [ "$SESSION_SOURCE" = "resume" ] || [ "$SESSION_SOURCE" = "fork" ]; then
echo "기존 세션에서 계속하고 있습니다 (source=$SESSION_SOURCE)"
...
- Claude Code v2.1.214는 **권한 체크 (permission check)와 관련된 7가지 보안 취약성**을 수정한 중요한 릴리스입니다. 특히 허가 규칙 (allow rules)의 과잉 매칭과 Windows PowerShell 5.1 우회 문제는 영향이 크므로, 즉각적인 업데이트가 권장됩니다.
- hooks의 `if:` 조건에서 사용하는 단일 세그먼트 `dir/**` 패턴의 매칭 범위가 변경되는 **파괴적 변경 (breaking change)**이 있습니다. 이로 인해 기존의 hooks 설정이 의도한 대로 실행되지 않을 수 있으므로, `**/dir/**`로의 재작성이 필요한지 점검해야 합니다.
- 남용되는 세션을 Claude 스스로 종료할 수 있는 `EndConversation` 도구가 새롭게 추가되었습니다.
- 그 외에도 OpenTelemetry의 상관 관계 속성 (correlation attributes) 추가, Windows/PowerShell 관련 및 백그라운드 세션 관리의 다수 버그 수정이 포함되어 있습니다.
업데이트 후에는 hooks 및 권한 (permissions) 설정의 동작 확인과 CI/CD 파이프라인에서 권한 프롬프트 (permission prompt) 발생 여부를 체크할 것을 강력히 권장합니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 Qiita AI의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기