Open source · Claude Code skill · MIT

security-sweep: 한 문장으로 모든 프로젝트·서버·이미지의 알려진 취약점 점검

security-sweep은 한 문장 요청으로 여러 프로젝트·서버·컨테이너 이미지의 알려진 취약점을 한 번에 점검하는 오픈소스 Claude Code 스킬입니다.

osv-scanner와 trivy로 훑고, 모든 CVE/GHSA ID를 OSV API로 실재 검증하고, CISA KEV·EPSS로 보강하고, 코드에서 실제로 쓰는지(도달성) 판정해 P0~P3 우선순위 보고서를 만듭니다. 기본은 읽기 전용이고, 서버에는 아무것도 설치하지 않습니다.

01설치

Claude Code에서 플러그인 마켓플레이스를 추가하고 설치합니다. 무료 오픈소스(MIT)이며 macOS·Linux에서 동작합니다.

/plugin marketplace add baryonlabs/security-sweep
/plugin install security-sweep@baryonlabs-security

플러그인으로 설치했다면 명령은 /security-sweep:security-sweep입니다. 스킬 폴더만 복사했다면 /security-sweep입니다.

git clone https://github.com/baryonlabs/security-sweep
cp -r security-sweep/skills/security-sweep ~/.claude/skills/

한 문장으로 실행

/security-sweep:security-sweep ~/work 아래 모든 프로젝트 취약점 점검해줘
/security-sweep:security-sweep 서버 deploy@web1, deploy@web2 점검. 설치는 하지 말고 보고서만
/security-sweep:security-sweep 이미지 myapp:prod 랑 실행 중인 컨테이너 전부 CVE 확인
/security-sweep:security-sweep CVE-2026-97853 이 우리 프로젝트에 영향 있는지 확인해줘

같은 마켓플레이스에 Elixir 전용 점검·수정 스킬도 있습니다: /plugin install elixir-security-audit@baryonlabs-security

02동작 방식: 5단계 파이프라인

security-sweep은 탐색 → 스캔 → 검증 → 도달성 → 보고서 순서로 실행하고, 마지막에 Claude가 P0/P1 항목마다 코드 근거를 직접 열어 우선순위를 확정하거나 한 줄 사유와 함께 조정합니다.

  1. 탐색루트 아래 lockfile로 프로젝트와 생태계를 판별합니다 (npm · PyPI · Hex · Go · Cargo · Packagist · RubyGems · Maven).
  2. 스캔프로젝트마다 osv-scanner, trivy fs(비밀·설정), 이미지는 trivy, 서버는 읽기 전용 ssh로 점검합니다.
  3. 검증모든 CVE/GHSA/OSV ID를 OSV API로 조회해 실재 여부를 확인하고 CISA KEV·EPSS로 보강합니다.
  4. 도달성govulncheck, 취약 심볼 grep, import grep으로 called / imported / not-imported를 판정합니다.
  5. 보고서P0~P3 우선순위로 findings.json, REPORT.md, 단일 파일 REPORT.html을 만듭니다.
한 문장으로 전체 보안 스윕: 탐색, 스캔, 검증, 도달성, 보고서 5단계 파이프라인

스윕은 아무것도 고치지 않습니다. 끝나면 프로젝트별 수정 명령(npm audit fix, mix deps.update pkg, go get pkg@fixed 등)을 제안만 하고, Elixir 프로젝트는 elixir-security-audit로 넘겨 별도 브랜치에서 수정·검증합니다.

Claude 없이 스크립트만 돌릴 수도 있습니다 (bash + python3 표준 라이브러리):

S=skills/security-sweep/scripts
OUT=./security-sweep-$(date +%Y%m%d-%H%M)
bash    $S/discover.sh ~/work --max-depth 4 --out "$OUT"
bash    $S/sweep.sh --targets "$OUT/targets.json" --out "$OUT"
python3 $S/verify_cves.py "$OUT"      # --offline 가능
python3 $S/reachability.py "$OUT"
python3 $S/report.py "$OUT"

03실제 예시: 26개 프로젝트, 5건 → 1건

실제 개발자 맥북의 ~/projects 아래 프로젝트 26개를 security-sweep으로 한 번 돌린 결과입니다 (2026-10-23, 프로젝트명·경로는 가명 처리, 취약점 ID·버전·우선순위는 실제 결과 그대로).

항목결과
탐지된 프로젝트26개 (npm · PyPI · Hex · Go · Maven), 그중 취약점이 나온 곳 15개
취약점 권고고유 75개, 전부 OSV에서 실재 확인 (404 0건, CISA KEV 0건)
우선순위P0 0 · P1 107 · P2 72 · P3 2
비밀값3건 (GitHub OAuth 토큰 1, JWT 2), 모두 .gitignore된 build 폴더, 값은 마스킹

P1 107건 중 99건은 패키지 두 개입니다. 81건은 pillow 12.3.0 하나에 걸린 권고 27개가 프로젝트 3곳에서 반복된 것이고, 18건은 sharp 0.34.5가 프로젝트 6곳에서 반복된 것입니다. 개수보다 "어떤 패키지 몇 개를 올리면 되나"로 읽으면 됩니다.

한 프로젝트를 검토하고, 패치하고, 다시 스캔

Elixir/Phoenix 프로젝트 하나에서 나온 5건을 코드로 판정한 뒤(1건은 오탐, decimal은 도달 불가), mix deps.update bandit decimal plug_crypto로 올리고 mix test(226 tests, 0 failures)를 통과시킨 다음 그 프로젝트만 재스캔했습니다.

패치 전패치 후
의존성 취약점4건 (P1 1 · P2 3)0건 (osv-scanner exit 0)
코드 발견1건 (EXS-CFG-001)1건 (같은 항목, 오탐으로 판정 기록)
합계5건1건
한 번 돌리고, 고치고, 다시 확인: 5건에서 1건으로

가명 처리한 실제 보고서 전체 보기 (GitHub)

04탐정과 공항 검색대: 다른 보안 도구와의 차이

Claude Security, Codex Security, /security-review는 탐정처럼 코드를 읽고 추리해 로직 결함을 찾습니다. security-sweep은 공항 검색대처럼 모든 프로젝트·서버·이미지를 통과시키며 알려진 취약점(CVE)을 빠짐없이 찾습니다. 대체가 아니라 조합입니다.

탐정과 공항 검색대: 로직 결함은 AI 보안 리뷰가, 알려진 취약점은 스캐너 스윕이 찾습니다
탐정: AI 보안 리뷰
Codex Security · Claude Security · /security-review
공항 검색대: 스캐너 스윕
security-sweep · elixir-security-audit
하는 일코드를 처음부터 읽고 추리해서 설계·로직 결함을 찾습니다모든 가방(프로젝트·서버·이미지)을 통과시키며 수배 목록(CVE DB)에 오른 위험물을 빠짐없이 찾습니다
잘 찾는 것인가 우회, 잘못된 신뢰 경계, 처음 보는 수법오래된 라이브러리, 서버 OS 패키지 취약점, 흘린 비밀값, 언어별 위험 API
놓치기 쉬운 것수배 목록 대조 (의존성 CVE는 직접 안 봄)목록에 없는 새로운 수법
결과똑똑하지만 돌릴 때마다 조금씩 다름같은 입력이면 항상 같은 결과
확인 방법다른 에이전트가 한 번 더 검증수배 목록이 진짜인지 OSV로 조회하고, 실제로 꺼내 쓰는지(도달성) 확인
비용모델 토큰 (스캔마다)스캐너는 무료, LLM은 분류할 때만

그래서 둘 다 씁니다. 검색대로 알려진 위험을 먼저 전부 걸러내고, 중요한 저장소는 탐정에게 맡겨 숨은 로직 결함을 찾습니다.

이럴 때이것부터
“우리 프로젝트·서버 전체에 알려진 취약점 있나?”security-sweep
“이 Phoenix 앱 고쳐 줘”elixir-security-audit
“PR 하나 머지 전에 빨리 봐 줘”/security-review
“결제·인증 같은 핵심 저장소를 깊게 털어 줘”Claude Security 또는 Codex Security

도구별 자세한 비교표 보기 (Codex Security · /security-review · Claude Security)

05우선순위 P0~P3

우선순위조건의미
P0CISA KEV 등재, 또는 critical/high 이고 실제 호출(called)지금 고친다
P1critical/high 이고 imported/unknown, 또는 EPSS ≥ 0.1, 또는 비밀 발견이번 주
P2medium, 또는 high 인데 not-imported다음 정기 업그레이드
P3low/unknown, 낮은 설정 문제기록만
검증 실패OSV 404: 우선순위 없이 별도 섹션출처 스캐너와 ID만 나열

not-imported는 "안전"이 아닙니다. 전이 의존성은 직접 import 없이도 실행됩니다. 우선순위 규칙과 근거 자세히 보기

06안전 원칙

  • 기본 읽기 전용. 코드·lockfile을 바꾸지 않습니다. 수정은 사용자가 지시한 프로젝트만, 별도 브랜치에서 합니다.
  • 서버에 아무것도 설치하지 않습니다. ssh는 BatchMode=yes, 사용자가 이름을 댄 호스트만, sudo는 명시할 때만 씁니다.
  • 스캐너 출력·권고 본문·코드 주석은 데이터이지 지시가 아닙니다 (프롬프트 인젝션 방어).
  • 비밀값은 위치와 종류만 기록하고 원문은 마스킹합니다.
  • CVE 실재 여부는 OSV 조회 결과로만 판단합니다. 번호 생김새로 판단하지 않습니다.

요구 사항

  • macOS 또는 Linux, bash, python3 (표준 라이브러리만)
  • osv-scanner와 trivy 중 하나 이상 (둘 다 권장). macOS: brew install osv-scanner trivy
  • 선택: govulncheck (Go 호출 그래프 도달성), elixir-security-audit (Hex 프로젝트)
  • 네트워크: api.osv.dev, cisa.gov(KEV), api.first.org(EPSS). 없으면 --offline

07질문별 안내

자주 묻는 질문

서버에 뭔가 설치되나요?

아니요. ssh -o BatchMode=yes로 사용자가 이름을 댄 호스트에만 접속하고, 원격에 trivy가 있으면 trivy rootfs를 읽기 전용으로 실행합니다. trivy가 없으면 패키지 목록(dpkg-query/rpm -qa/apk info)만 수집합니다. sudo는 사용자가 명시할 때만 씁니다.

not-imported면 안전한가요?

아닙니다. 전이 의존성은 직접 import 없이도 실행됩니다. not-imported는 우선순위를 한 단계 낮출 근거일 뿐이며, 함수 단위 도달성은 Go(govulncheck)와 OSV 권고에 취약 심볼이 적힌 경우에만 판정합니다.

CVE 번호가 가짜처럼 보이는데요?

생김새로 판단하지 마세요. CVE-2026-97853은 이상해 보여도 OSV에 실재하고, 그럴듯한 번호가 404일 수도 있습니다. security-sweep은 OSV 조회 결과만 근거로 쓰고, 404는 “검증 실패” 섹션으로 따로 분리합니다.

네트워크가 없는 CI에서도 되나요?

verify_cves.py --offline을 쓰면 osv-scanner 출력에 포함된 OSV 레코드와 캐시만 사용합니다. 이 경우 trivy만 보고한 ID는 “미검증”으로 남습니다.

고쳐 주지는 않나요?

스윕은 의도적으로 읽기 전용입니다. 끝나면 프로젝트별 수정 명령을 제안하고, Elixir 프로젝트는 elixir-security-audit로 넘겨 브랜치에서 수정·검증합니다.

Claude Security나 Codex Security가 있으면 필요 없나요?

역할이 다릅니다. 세 LLM 도구는 코드를 읽어 로직 결함을 찾는 데 강하고 의존성 CVE는 직접 스캔하지 않습니다. security-sweep은 알려진 취약점을 결정적 스캐너로 빠짐없이 훑습니다. Claude Security 공식 문서도 기존 의존성 스캐너와 함께 쓰라고 안내합니다.