Claude Code가 취약하거나 관리되지 않는 파이썬 패키지를 설치하지 못하게 막는 방법
Stopping Claude Code from installing python packages that have known vulnerabilities or unmaintained
핵심 요약
Claude Code가 취약점이 있거나 방치된 패키지를 설치하지 않도록 PreToolUse 훅을 활용해 검증하는 방안을 공유합니다.
- 취약점 검증 — PreToolUse 훅을 통해 설치 전 패키지의 CVE 및 유지보수 상태를 확인함
- 위험 기반 차단 — 단순 권고 개수가 아닌 실제 악용 사례를 기준으로 차단 여부를 결정함
- 명확한 해결책 제시 — 차단 시 Claude가 올바른 버전으로 재시도하도록 구체적인 가이드를 제공함
- 안정성 확보 — 외부 서비스 장애 시 설치를 허용하는 'Fail open' 방식을 채택함
Claude Code는 의존성 패키지를 존나 빨리 가져오는데, PyPI 페이지는 절대 안 읽음. 대부분은 별문제 없는데, 가끔 CVE 터진 버전이나 몇 년 전에 아카이브된 라이브러리를 덥석 물어올 때가 있음.
난 이걸 해결하려고 pip install, uv add, poetry add 실행하기 전에 검사하는 PreToolUse 훅을 쓰고 있음. 만들면서 배운 팁 몇 개 적어봄:
-
오래됐다고 다 막지 마라.
six같은 건 몇 년 동안 업데이트 없어도 아무 문제 없음. 신뢰할 수 없는 입력값(파서, 인증, HTTP 등)을 다루는 패키지에서만 구버전이 문제가 되니까, 훅도 딱 거기서만 차단하게 설정함. -
취약점 개수가 아니라 실제 악용 여부로 판단해라. "취약점 18개"라는 숫자는 아무 의미 없음. CISA의 실제 악용 목록(예:
pillow==10.0.0, CVE-2023-4863)에 올라와 있는 게 진짜 급한 거임. -
차단할 땐 해결책도 같이 던져줘라. 훅이 그냥 "안 돼"라고만 하면 Claude는 똑같은 명령어를 계속 시도함. "이 버전 말고
pillow==12.3.0으로 다시 시도해"라고 알려줘야 Claude가 알아먹고 바꿈. -
'버려진 프로젝트'는 추측이 아니라 팩트로 판단해라. 아카이브된 저장소나 메인테이너가 직접 '비활성(Inactive)'이라고 박아둔 게 증거지, "18개월 동안 커밋 없음" 같은 건 근거가 안 됨.
-
장애 시엔 그냥 통과시켜라. PyPI나 OSV 서버 터졌을 때까지 막아버리면, 남의 서버 문제 때문에 훅이 차단될 때마다 사람들이 훅을 지워버릴 거임. 그냥 검사 못 했다고 알리고 설치는 허용하는 게 맞음.
다들 Claude Code 쓸 때 의존성 위험 관리 어떻게 함? 허용 목록(allowlist)을 쓰는지, CI 스캔을 돌리는지, 아니면 직접 수동으로 검토하는지 궁금함.
(이거 오픈소스 훅으로 만들어둠, MIT 라이선스고 API 키 필요 없음: https://github.com/binuka200/package-doctor)

