본문으로 건너뛰기

© 2026 Molayo

Dev.to헤드라인2026. 06. 15. 06:54

당신의 AI 에이전트 설정은 보호되지 않은 문입니다

요약

악성 npm 패키지가 Claude Code의 설정 파일인 ~/.claude.json을 변조하여 에이전트의 통신 경로를 공격자 서버로 재지정할 수 있는 보안 취약점을 경고합니다. 이를 방지하기 위해 설정 파일의 무결성을 감시하고 복구할 수 있는 도구인 tamperbell 사용을 권장합니다.

핵심 포인트

  • 악성 npm postinstall 스크립트가 Claude Code 설정을 조용히 재작성 가능
  • ~/.claude.json 파일에 토큰이 평문으로 저장되어 있어 탈취 위험 존재
  • MCP 서버 엔드포인트를 공격자 프록시로 변경하여 데이터 중간 가로채기 가능
  • tamperbell을 통해 설정 파일의 베이스라인을 감시하고 즉시 복구 가능

악성 npm install은 당신의 Claude Code 에이전트를 공격자의 서버로 조용히 재지정할 수 있으며, 그 파일을 감시하는 것은 거의 아무것도 없습니다. 제가 무엇을 만들었는지, 그리고 왜 이것을 예방(prevention)이라고 부르기를 거부하는지에 대해 설명하겠습니다.

당신의 ~/.claude.json은 신뢰 경계(trust boundary)이지만, 아무도 이를 지키고 있지 않습니다.

그 파일 하나가 당신의 AI 에이전트가 어떤 서버와 통신할지를 결정하며, 그 서버들과 통신하는 데 사용하는 토큰(tokens)을 담고 있습니다. 그것은 평문(plaintext)입니다. 당신의 사용자 권한으로 실행되는 무엇이든 수정할 수 있습니다. 우리는 이것을 dotfile처럼 취급하지만, 실제로는 건물로 들어가는 열쇠처럼 작동합니다.

2026년 6월, 이 격차는 구체화되었습니다. Mitiga의 보안 연구원들이 보여주고 CSO Online이 6월 5일에 보도한 바에 따르면, 의존성(dependency)을 설치하는 즉시 실행되는 악성 npm postinstall 스크립트가 해당 설정을 조용히 재작성하고, 당신의 MCP 서버 중 하나를 공격자가 제어하는 프록시(proxy)로 지정할 수 있었습니다. 거기서부터 공격자는 에이전트가 해당 서버로 보내는 모든 요청의 중간에 위치할 수 있었습니다. 토큰들은 평문으로 저장되어 있었습니다. Anthropic은 이 보고서를 범위 외(out of scope)로 분류했습니다.

경보는 울리지 않았습니다. 파일은 단지 1분 전과 다른 내용을 담고 있었을 뿐이며, 아무도 감시하고 있지 않았습니다.

이것이 문제의 핵심을 한 문장으로 요약한 것입니다: 당신의 에이전트가 누구를 신뢰할지 결정하는 파일을 아무도 감시하고 있지 않았습니다. 사람들은 이미 이슈 트래커(#15797)에서 Claude Code에 정확히 이 점을 요청했습니다: 백업하고, 검증하고, 복구할 수 있게 해달라고 말이죠.

tamperbell catches a malicious npm postinstall swapping an MCP endpoint, then restores the signed baseline

일반적인 파일 모니터가 적합하지 않은 이유

당신은 일반적인 파일 무결성 모니터(file-integrity monitor)를 ~/.claude.json에 지정할 수 있습니다. 하지만 두 가지 문제가 발생합니다.

첫째, 그것은 파일을 이해하지 못합니다. 그래서

이 도구는 Claude Code 설정을 서명된 베이스라인 (baseline)에 고정하고 이를 감시하며, 승인되지 않은 변경 사항이 발생하면 위험 순위가 매겨진 차이점 (diff)과 함께 경고를 울립니다. 키 하나로 베이스라인을 복구하거나, 변조된 파일을 증거 수령물로서 격리할 수 있습니다. 로컬 환경에서 오프라인으로 작동하며, 계정이나 텔레메트리 (telemetry)가 필요하지 않습니다. Apache-2.0 라이선스입니다.

설정을 감시하세요:

npx tamperbell watch

일회용 샌드박스 (sandbox) 환경에서 실제 npm-postinstall 공격을 실행하고 경고가 울리는 것을 확인해 보세요:

npx tamperbell demo

저장소 (Repo): https://github.com/san64777/tamperbell

npm: https://www.npmjs.com/package/tamperbell

현재 초기 단계이며, 위의 위협 모델 (threat model)이 계약 조건입니다. 만약 이 글이나 코드에서 기능이 과장되었다고 판단되는 주장을 발견하신다면, 그것이 제가 가장 보고받기를 원하는 버그입니다.

데이터 및 에이전트 파이프라인을 위한 신뢰성 및 검증 프리미티브 (primitives)를 구축하는 Sanjay Chauhan가 작성했습니다. san64777@gmail.com으로 연락해 주세요.

AI 자동 생성 콘텐츠

본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.

원문 바로가기
0

댓글

0