Claude Code · 2026년 9월 3일 ★★★★★

클로드 코드 v2.1.259가 `.env` 거부 규칙을 비껴가던 Bash 경로들을 또 막았어요 — 정작 같은 판에서 `allowedMcpServers` 는 회사가 심어 둔 MCP 서버를 더는 걸러 내지 않게 바뀌어, 올리면 막아 뒀던 서버가 다시 켜져요

오늘 아침 7시 반에 나온 클로드 코드 v2.1.259가, Bash 명령에 걸어 둔 `Read()` 거부 규칙이 파일을 옵션 값으로 넘긴 경우(`--ignore-revs-file=.env`·`-f.env`·`@file`)나 `git diff`·`git grep` 의 파일 인자, `cd DIR && cat FILE` 같은 복합 명령에는 걸리지 않던 문제를 고쳤어요 — 거부한 파일이 든 디렉토리를 `grep -r`·`cp -r` 로 훑는 것도 이제 물어봐요. 공개된 노트만 놓고 보면 같은 규칙을 다시 막은 게 이번이 세 번째예요: v2.1.251은 심링크로 도는 경로를, v2.1.257은 `< file` 리다이렉트와 `tac`·`egrep` 같은 읽기 명령을 막았거든요. 정작 같은 노트엔 `allowedMcpServers` 가 이제 사용자가 직접 추가한 서버만 관장하도록 바뀌어 그 목록으로 걸러 내던 `managed-mcp.json` 서버가 판올림하면 다시 로드된다고 적혀 있어요 — 막아 두려면 `deniedMcpServers` 로 옮겨야 하는데, 공식 관리자 문서는 아직 '허용·차단 목록은 관리 서버에도 적용된다'고 적어 두고 있어요.

용어 풀이
MCP
Model Context Protocol. 에이전트를 외부 도구·데이터에 붙이는 표준 규약
Read() 거부 규칙
설정 permissions.deny 에 적는 읽기 차단 규칙. 여기 걸린 파일은 묻지도 않고 막히지만, Bash 명령 안에서 그 파일을 읽는 모양까지 알아봐야 실제로 막힌다
allowedMcpServers
회사가 관리 설정으로 내려보내는 MCP 서버 허용 목록. 목록에 없는 서버는 로드되지 않는다
deniedMcpServers
MCP 서버 차단 목록. 모든 설정 범위에서 합쳐지고, 허용 목록보다 우선해 무조건 막는다
managed-mcp.json
관리자가 기계에 직접 배포하는 파일. 여기 적힌 MCP 서버만 로드되게 만든다
운영자 인사이트

`Read()` 거부 규칙을 비밀 파일의 마지막 방어선으로 쓰고 있다면, 우회 경로가 세 번째로 나왔다는 것 자체를 신호로 보세요 — 정말 안 보여야 하는 파일은 작업 디렉토리 밖에 두고 거부 규칙은 실수 방지용으로만 쓰는 쪽이 맞아요. 사내 배포를 맡고 있다면 `allowedMcpServers` 로 걸러 내던 관리 MCP 서버가 있는지 먼저 확인해서, 팀이 올리기 전에 `deniedMcpServers` 로 옮겨 두세요.

여러 관점으로 보기
  • 앞선 두 판도 같은 거부 규칙을 고쳤어요 v2.1.257 노트엔 "Bash `Read()`/`Edit()` 거부 규칙이 `< file` 리다이렉트와 `tac`·`egrep` 같은 읽기 명령에 걸리지 않던 문제를 고쳤다"가 있고, v2.1.251은 권한 검사를 통과한 뒤 심링크가 바뀌는 경로를 막았어요. 같은 규칙이 세 판에 걸쳐 세 가지 다른 모양으로 새고 있었던 셈이에요. GitHub
  • 공식 관리자 문서는 아직 반대로 적혀 있어요 MCP 접근 통제 문서는 지금도 "`allowedMcpServers` 와 `deniedMcpServers` 는 관리 서버에도 적용되므로, 이를 통과하지 못한 관리 서버는 로드되지 않는다"고 적어 두고 있어요. 이번에 새로 생긴 조직용 `managedMcpServers` 도 이 문서의 설정 요약 표에 아직 없고요. Claude Code Docs
  • 8월에 고쳤다던 OAuth 캐시 무효화가 아직 남아 있었어요 v2.1.248이 "긴 세션에서 OAuth 토큰 갱신 뒤 도구 정의가 다시 만들어져 한 시간에 한 번꼴로 프롬프트 캐시가 날아가던" 문제를 고쳤다고 적었는데, 이번 v2.1.259에 "텔레메트리를 꺼 둔 세션에서 OAuth 토큰이 갱신될 때 프롬프트 캐시가 무효화되던 문제를 고쳤다"가 다시 들어왔어요. 앞선 수정이 그 경로까지는 덮지 못했던 거예요. GitHub

원본 보기 (github-releases:claude-code)