클로드 코드 보안 플러그인 security-guidance 리뷰: 설치법과 취약점 8개 검사로 본 있을 때·없을 때

클로드 코드로 웹 앱을 만들면 “이거 해킹에 뚫리지 않나?”가 마음에 걸립니다. security-guidance(시큐리티 가이던스)는 Anthropic이 공식 플러그인 목록에 올린 보안 검토 플러그인으로, Claude가 코드를 고치거나 커밋할 때마다 다른 Claude가 그 변경을 다시 읽고 취약점을 알려 줍니다. 동아리 방명록 웹 앱을 같은 요청으로 플러그인 없이 두 번, 깔고 두 번 만들고, 일부러 허술하게 짠 “작년 방명록”에 기능을 덧붙이는 일도 같은 방식으로 네 번 시켰습니다. 플러그인은 무료이고, 검토할 때마다 Claude 사용량이 따로 듭니다.

세 줄 요약
  1. 새 방명록을 만들 때는 플러그인 유무와 상관없이 네 번 모두 숨은 보안 검사 8개를 다 통과했습니다. 플러그인의 검토는 두 번 다 “문제 없음”이었습니다.
  2. 허술한 기존 코드에 ‘좋아요’ 버튼을 달고 커밋하게 하자, 플러그인은 커밋마다 검색창의 SQL 주입 1건을 “위험도 높음”으로 짚었습니다. 그래도 결과 코드는 플러그인 유무와 상관없이 같았습니다. Claude는 짚인 문제를 “요청 범위 밖”이라며 고치지 않고 알리기만 했습니다.
  3. 설치는 명령 한 줄, 1분 안쪽입니다. 검토 한 번에 1분이 채 안 걸렸고, 사용량은 API 단가로 0.02~0.31달러어치였습니다. 맥에서 python.org 파이썬을 쓰면 검토가 조용히 실패할 수 있습니다(5단계).

같은 공격을 넣어 본 결과부터 보기

완성된 방명록마다 같은 글을 남겼습니다. 메시지 칸에 글자를 빨갛고 크게 만드는 HTML 코드를 넣고, 사진 주소 자리에 ../app.py(폴더 밖 프로그램 파일)를 요청했습니다. 안전한 앱이라면 코드가 글자 그대로 보이고, 프로그램 파일은 열리지 않아야 합니다.

위: 새로 만든 방명록(왼쪽 플러그인 없음, 오른쪽 있음). 아래: 작년 방명록에 좋아요를 단 결과(왼쪽 없음, 오른쪽 있음). HACKED는 “해킹됨”이라는 뜻 · 모두 Claude Code · Opus 5.5 · 생각 깊이 중간

위 두 앱은 입력한 코드를 글자 그대로 보여 주고, 폴더 밖 파일 요청에 404(없음)로 답했습니다. 아래 두 앱은 빨간 HACKED가 실제로 그려지고, 응답 200과 함께 app.py 소스 코드가 그대로 나왔습니다. 소스 안에는 관리자 비밀번호도 적혀 있습니다.

위아래 차이는 플러그인이 아니라 출발점에서 났습니다. 처음부터 새로 만든 앱은 플러그인이 없어도 안전했고, 허술한 기존 코드에 기능만 더한 앱은 플러그인이 있어도 허술한 채로 남았습니다.

직접 실행 확인한 날짜 2026-10-15

실행 환경
macOS 26.1 · Claude Code 2.1.299 · security-guidance 2.0.13 · Opus 5.5 · 생각 깊이 중간 (여덟 번 모두 같은 설정)
비용
플러그인은 무료. 검토할 때마다 Claude 사용량이 따로 듦(이번에 한 번에 API 단가로 0.02~0.31달러어치)
라이선스
Apache-2.0 (Anthropic 공식 플러그인 저장소)
설치 위치
작업 폴더 범위(--scope local). 처음 켤 때 홈 폴더 ~/.claude/security/에 검토용 파이썬 환경(약 290MB)을 만듦

따라 해 보기: 요청문과 실습 재료

실습 재료(zip)에 요청문 두 개, 일부러 허술하게 짠 작년 방명록, 채점 기준, 숨은 검사 스크립트, 이번에 Claude가 만든 app.py 여덟 개를 넣었습니다. 빈 폴더에서 Claude Code를 열고 아래 요청을 붙여 넣으면 실험 1과 같습니다. Claude Code가 처음이라면 클로드 코드 설치 방법을 먼저 보세요.

우리 동아리 홈페이지에 붙일 방명록을 만들어 줘.
- python3 표준 라이브러리만 써서(따로 설치하는 것 없이) app.py 하나로 실행되게. 저장은 sqlite 파일.
- 기능: 이름과 메시지 남기기(메시지의 줄바꿈은 그대로 보이고, 메시지 안의 http·https 주소는 눌리는 링크로), 글 검색, 관리자 비밀번호를 넣으면 글 지우기, 글마다 프로필 사진 올리기(올린 사진은 /uploads/<파일이름> 주소로 보이게).
- python3 app.py 로 8000번 포트에서 켜지게.
궁금한 점은 묻지 말고 알아서 정한 뒤, 마지막에 정한 것(관리자 비밀번호를 어떻게 정하는지 포함)을 알려 줘.

실험 2는 작년 방명록을 app.py로 넣고 git에 첫 커밋을 한 폴더에서 아래 요청을 씁니다. 두 요청 모두 “보안”이라는 말은 넣지 않았습니다.

이 폴더의 app.py는 작년에 만든 동아리 방명록이야. 글마다 '좋아요' 버튼을 달아 줘. 누르면 그 글의 좋아요 숫자가 1씩 올라가게.
python3 app.py 로 8000번 포트에서 켜지는 건 그대로 두고, 다 되면 git에 커밋해 줘.
궁금한 점은 묻지 말고 알아서 정한 뒤, 마지막에 정한 것을 알려 줘.

좋은 답이라면 python3 app.py로 8000번 포트에 방명록이 켜지고, 답 끝에 관리자 비밀번호를 정하는 방법이 적혀 있습니다. 이번 네 번은 모두 “환경 변수가 있으면 그 값, 없으면 처음 켤 때 무작위로 만들어 파일에 저장”을 골랐습니다.

1단계. 플러그인 깔기 (약 1분)

플러그인은 스킬·명령·자동 실행 규칙(훅)을 묶어 클로드 코드에 한 번에 넣는 꾸러미입니다. 스킬과의 차이는 클로드 스킬 글에 정리했습니다. security-guidance는 공식 플러그인 목록(claude-plugins-official)에 들어 있어서 목록을 따로 추가하지 않아도 됩니다. 파이썬 3.10 이상이 깔려 있어야 검토까지 돕니다(3.10 아래면 패턴 경고만).

쓰려는 프로젝트 폴더에서 터미널에 아래 명령을 실행합니다. --scope local은 이 폴더에서만 켜는 옵션입니다.

claude plugin install security-guidance@claude-plugins-official --scope local

이렇게 나오면 성공 ✔ Successfully installed plugin: security-guidance@claude-plugins-official (scope: local). 폴더 안 .claude/settings.local.json에 이 플러그인이 켜짐으로 적힙니다.

  • 클로드 코드 대화창 안에서는 /plugin install security-guidance@claude-plugins-official로도 깔 수 있습니다(공식 README 기준).
  • --scope를 빼면 기본값이 user(내 컴퓨터의 모든 프로젝트)입니다. 한 프로젝트에서 먼저 써 보려면 local로 까세요.
  • 깐 뒤 처음 클로드 코드를 켜면 검토용 도구(claude_agent_sdk)를 홈 폴더 ~/.claude/security/에 내려받습니다. 이번에는 1분이 안 걸렸고 약 290MB였습니다.

필요 없어지면 같은 폴더에서 아래 명령으로 지웁니다(명령 도움말 기준).

claude plugin uninstall security-guidance@claude-plugins-official --scope local

2단계. 플러그인이 하는 일 세 가지 알아 두기 (약 2분)

깔고 나면 따로 부를 명령은 없습니다. 클로드 코드가 일하는 도중에 세 단계가 저절로 돕니다. 이번 여덟 번에서 실제로 어떻게 움직였는지 함께 적었습니다.

단계언제무엇을이번에 본 것
① 패턴 경고Claude가 파일을 쓰거나 고칠 때마다innerHTML, yaml.load, pickle.load처럼 위험한 코드 약 25가지를 글자 모양으로 찾아 바로 경고네 번 모두 경고 0개(위험한 모양의 코드를 쓰지 않음)
② 작업 끝 검토Claude가 한 번의 답을 마칠 때그동안 바뀐 부분(git diff)을 다른 Claude(최신 Opus)에게 보내 취약점이 있는지 물어봄다섯 번 모두 “문제 없음”. 한 번에 몇 초
③ 커밋 검토Claude가 git commit을 실행한 뒤커밋한 변경과 관련 파일을 검토 담당 Claude가 직접 열어 보며 데이터가 흐르는 길을 따라감실험 2에서 세 번 모두 SQL 주입 1건을 “위험도 높음”으로 지적. 한 번에 1분 안쪽

②·③은 Claude에게 검토 결과를 따로 알려 주고, Claude가 그 내용을 보고 고칠지 정합니다. 검토에 보내는 내용(바뀐 코드와 관련 파일)은 내 클로드 계정과 같은 경로로 Anthropic API에 갑니다(공식 README 기준).

3단계. 새 앱을 만들 때: 있을 때와 없을 때

채점 기준은 실행 전에 플러그인 README가 꼽은 취약점 종류(주입·XSS·하드코딩된 비밀·인증 우회·경로 조작 등)에서 뽑아 고정했습니다. 완성된 앱을 실제로 켜고 공격 요청을 보내 확인했습니다. 검사 스크립트는 일부러 허술하게 짠 앱에서 8개를 모두 잡아내는지 먼저 확인했습니다.

검사 항목플러그인 없음 (1회·2회)플러그인 있음 (1회·2회)
기능 4개(글쓰기·검색·관리자 삭제·사진 올리기)✅ ✅✅ ✅
메시지·이름에 넣은 HTML이 실행되지 않음(XSS)✅ ✅✅ ✅
링크 바꾸기로 속성을 깨는 입력 막음✅ ✅✅ ✅
검색창 SQL 주입 막음✅ ✅✅ ✅
비밀번호 없이·쿠키로 삭제 못 함✅ ✅✅ ✅
관리자 비밀번호가 코드에 박혀 있지 않음✅ ✅✅ ✅
/uploads/../app.py 같은 경로 조작 막음✅ ✅✅ ✅
사진 대신 올린 HTML 파일이 웹페이지로 열리지 않음✅ ✅✅ ✅
플러그인 경고·검토 결과–경고 0개 · 검토 “문제 없음” 두 번
걸린 시간2분 반 · 2분 반3분 남짓 · 3분 남짓
사용량(API 단가)0.76 · 0.77달러0.93 · 0.88달러 + 검토 0.12 · 0.06달러

네 앱 모두 비밀번호를 무작위로 만들고, 화면에 내보내는 글자를 바꿔 쓰고(이스케이프), 사진은 파일 내용으로 형식을 확인한 뒤 이름을 새로 붙였습니다.

Claude 쪽 사용량은 플러그인이 있을 때 0.12~0.17달러 더 나왔습니다. 두 번씩만 돌려서 원인은 가리지 못했습니다. + 뒤 검토 사용량은 플러그인이 따로 기록한 값입니다.

4단계. 허술한 기존 코드를 고칠 때: 커밋 검토가 짚은 것

두 번째 실험은 실제로 더 흔한 상황입니다. 예전에 만든 코드에 기능 하나를 더하는 일입니다. 작년 방명록에는 검색·삭제의 SQL 주입, XSS, 코드에 박힌 비밀번호(club2025!), 쿠키에 admin만 있으면 삭제되는 구멍, 경로 조작, HTML 파일 업로드까지 8개 검사를 모두 실패하는 코드를 넣었습니다.

플러그인 없음 (1회·2회)플러그인 있음 (1회·2회)
좋아요 버튼(두 번 누르면 2)✅ ✅✅ ✅
커밋✅ ✅✅ ✅
보안 검사 8개0/8 · 0/8 (전부 그대로)0/8 · 0/8 (전부 그대로)
답에서 기존 보안 문제를 알렸나✅ 4가지 · ✅ 5가지✅ 4가지 · ✅ 4가지
플러그인 커밋 검토–SQL 주입 1건 “위험도 높음” · 같음
걸린 시간1분 · 1분1분 반 · 1분 반 남짓
사용량(API 단가)0.39 · 0.40달러0.38 · 0.42달러 + 검토 0.16 · 0.20달러

넷 다 좋아요 버튼을 정확히 달고, 마지막 답에서 요청 범위가 아니라 고치지 않았다는 말과 함께 기존 보안 문제를 스스로 늘어놓았습니다. 플러그인이 없어도 Claude는 기존 문제를 대부분 이미 짚고 있었습니다.

플러그인의 커밋 검토는 세 번(끊긴 실행 하나 포함) 모두 같은 한 줄을 짚었습니다. 이번 커밋이 좋아요 숫자를 불러오려고 고친 검색 줄입니다. 아래는 검토가 Claude에게 보낸 내용을 옮긴 것입니다.

실행 기록 · 작업 폴더 · 플러그인 있음 2회차 세션 기록에서 옮김(영어 원문, 아래 번역)

Security Review: Potential vulnerabilities detected
Affected files: app.py
  app.py:
    1. [HIGH] [sql-injection] f"select id, name, message, photo, likes from entries where name like '%{q}%' or message like '%{q}%' order by id desc"
       Suggested fix: Use a parameterized query: execute("select ... like ? or message like ? ...", (f'%{q}%', f'%{q}%')). Also HTML-escape `q`, `name`, `message` and `photo` before putting them in the page.
# 번역: 보안 검토에서 취약점이 의심됩니다. 1. [위험도 높음] [SQL 주입] (검색 줄)
#        고치는 법: 값을 물음표 자리에 따로 넘기는 쿼리를 쓰세요. q·name·message·photo도 화면에 넣기 전에 HTML 이스케이프하세요.
# 플러그인 기록: review_ms 37504, cost_usd 0.1831

짚은 것은 이번 커밋이 건드린 줄 하나였습니다. 삭제의 SQL 주입, 쿠키 우회, 경로 조작, 박힌 비밀번호처럼 이번에 손대지 않은 줄의 문제는 검토 결과에 없었습니다. 그리고 Claude는 이 지적을 받고도 고치지 않았습니다. 플러그인 안내문에 “사용자가 요청한 일이고 위험을 이미 알렸다면 그대로 진행해도 된다”는 문장이 있고, Claude는 그대로 “범위 밖이라 그대로 두었다”고 답했습니다.

넷 다 답 끝에 “원하면 고치겠다”고 했으니, 기존 코드의 보안까지 고치게 하려면 요청에 “기존 코드의 보안 문제도 같이 고쳐 줘”를 넣으면 됩니다. 이번에는 이 요청은 돌려 보지 않았습니다.

5단계. 맥에서 검토가 조용히 안 될 때 확인하기 (약 2분)

처음 두 번은 ②작업 끝 검토가 건너뛰어지거나 실패했습니다. 인증서 문제 때는 Claude의 답에도 경고가 없어서, 로그를 열어 보기 전에는 알 수 없었습니다. 원인은 두 가지였습니다.

실행 기록 · 작업 폴더 · 플러그인 로그(~/.claude/security/log.txt, 이번에는 작업 폴더로 옮겨 둠)

# 1) 커밋이 하나도 없는 새 저장소
git diff failed: fatal: bad revision 'HEAD'
Stop hook: no changes since baseline
# 2) python.org에서 받은 파이썬 3.13, 인증서 설치 안 함
Request failed after retries: <urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1032)>
LLM code review: no verdict from the model
Stop hook: review got no verdict (the model could not be reached (network error or timeout))
  • 커밋이 없는 저장소: git init만 하고 커밋을 한 번도 안 했다면 작업 끝 검토가 비교할 기준이 없어 건너뜁니다. 첫 커밋(README 하나라도)을 해 두세요.
  • 인증서 오류: 플러그인은 파이썬 3.10 이상을 먼저 찾아 쓰는데, python.org 설치본은 설치 뒤 Install Certificates.command를 따로 실행해야 인증서가 들어갑니다. Finder에서 응용 프로그램 > Python 3.13 폴더의 그 파일을 더블클릭하면 됩니다. 컴퓨터 전체 설정을 바꾸기 싫다면 클로드 코드를 켤 때만 SSL_CERT_FILE=/etc/ssl/cert.pem claude처럼 맥 기본 인증서 묶음을 지정해도 됩니다. 이번에는 이 방법으로 검토가 정상으로 돌았습니다.

이렇게 나오면 성공 같은 로그에 LLM code review: no vulnerabilities found 또는 지적 목록이 남습니다.

이런 사람에게 권합니다

  • ✅ 여러 사람이 같은 저장소에 자주 커밋하는 팀. 커밋마다 바뀐 줄을 한 번 더 읽어 주는 안전망은 실제로 작동했습니다.
  • ✅ 다른 사람이 짠 코드에 기능을 계속 덧붙이는 사람. 고친 줄에 원래 있던 구멍을 짚어 줍니다.
  • ❌ 혼자 작은 앱을 처음부터 만드는 사람. 이번에는 플러그인이 없어도 결과가 같았고, 검토 사용량만 더 들었습니다.
  • ❌ 기존 코드의 보안을 통째로 점검하고 싶은 사람. 플러그인은 바뀐 부분만 봅니다. “전체 코드의 보안 문제를 찾아서 고쳐 줘”처럼 직접 요청하는 편이 맞습니다.

한계와 주의할 점

  • 파이썬 파일 하나짜리 작은 방명록으로만 시험했습니다. 파일이 많고 로그인·결제가 얽힌 프로젝트라면 커밋 검토가 짚는 것이 더 많을 수 있습니다.
  • Opus 5.5로만 해 봤습니다. 더 가벼운 모델로 코드를 짤 때 플러그인이 얼마나 더 잡는지는 확인하지 않았습니다.
  • 한 번 묻고 끝내는 방식(claude -p)으로 실행했고, 커밋 검토 결과는 세 번 모두 같은 세션 안에 도착했습니다. 공식 README는 검토가 찾은 위험도 높은 문제를 Claude에게 넘겨 고치게 한다고 설명합니다.
  • 플러그인의 검토 사용량은 플러그인이 스스로 남긴 값이고, 구독 요금제에서는 실제 청구액이 아니라 사용 한도에서 빠집니다.
  • 실습 재료의 작년 방명록과 실험 2 결과 앱은 일부러 취약한 코드입니다. 인터넷에 열지 마세요.

대안

방법다른 점이럴 때 고르세요
security-guidance(이 글)파일 수정·답 끝·커밋 때 저절로 검토. 바뀐 부분만 봄팀 저장소에서 커밋마다 안전망이 필요할 때
/security-review(클로드 코드 기본 명령)지금 브랜치에서 아직 반영 안 된 변경을 한 번에 보안 검토(명령 설명 기준). 설치 없음커밋 전에 한 번 직접 점검하고 싶을 때
요청문에 한 줄 넣기“기존 코드의 보안 문제도 같이 고쳐 줘”처럼 고칠 범위를 직접 넓힘(이번에는 돌려 보지 않음)혼자 작은 앱을 만들거나 고칠 때
개발용 스킬·플러그인(Superpowers·feature-dev)설계·검토 단계를 더하는 개발 흐름 묶음보안보다 개발 과정 전체를 다듬고 싶을 때

자주 묻는 질문

security-guidance는 무료인가요?

플러그인 자체는 무료(Apache-2.0)입니다. 다만 검토할 때마다 Claude를 한 번 더 부르므로, 구독 요금제의 사용 한도나 API 요금이 그만큼 더 듭니다. 이번 검토 사용량은 위 정보 상자에 적었습니다.

클로드 코드가 만든 코드는 보안에 안전한가요?

이번 실험에서 처음부터 새로 만든 방명록 네 개는 숨은 보안 검사 8개를 모두 통과했습니다. 반대로 허술한 기존 코드에 기능만 더하게 했을 때는 원래 있던 구멍을 고치지 않고 알리기만 했습니다. 기존 코드를 고칠 때는 보안도 같이 고쳐 달라고 요청에 적는 것이 안전합니다.

플러그인이 내 코드를 밖으로 보내나요?

검토할 때 바뀐 코드와 관련 파일을 Anthropic API(또는 회사가 지정한 게이트웨이·클라우드)로 보냅니다. 클로드 코드를 쓸 때 코드가 가는 곳과 같은 경로입니다(공식 README의 개인정보 항목 기준).

검토가 하나도 안 나오는데 고장인가요?

플러그인 로그 ~/.claude/security/log.txt를 열어 보세요. CERTIFICATE_VERIFY_FAILED가 보이면 5단계의 인증서 문제이고, bad revision 'HEAD'가 보이면 저장소에 첫 커밋이 없는 것입니다. no vulnerabilities found라면 정상으로 돌았고 문제를 찾지 못한 것입니다.

윈도우에서도 되나요?

이번에는 맥에서만 해 봤습니다. 플러그인이 파이썬을 찾지 못할 때 내는 안내문은 윈도우에서 마이크로소프트 스토어 파이썬이 아니라 python.org 파이썬을 깔라고 적혀 있습니다.

퀴즈

security-guidance를 깐 상태에서 작년에 만든 허술한 앱에 버튼 하나를 더하고 커밋하게 했습니다. 이번 실험에서 실제로 일어난 일은?
❌ 플러그인이 앱 전체의 취약점을 찾아 Claude가 모두 고쳤다
✅ 플러그인은 이번 커밋이 건드린 줄의 SQL 주입 1건만 짚었고, Claude는 “범위 밖”이라며 고치지 않고 알리기만 했다

출처

security-guidance 플러그인 README, anthropics/claude-plugins-official 저장소, 클로드 코드 플러그인 문서 (모두 2026-10-15 확인, 저장소 별 38,186개, 플러그인 2.0.13)