원문 캡처 · github.com
원문 캡처 · github.com

Security Sweep는 코딩 에이전트가 보안 취약점을 고칠 때 변경 범위를 최소화하고, 수정 전후를 확인하도록 돕는 에이전트 스킬이다. npm·Composer 의존성, PHP·Node.js 런타임, Docker 기본 이미지 태그를 점검하며, 사용자가 선택한 취약점만 한 번에 하나씩 수정한다.

  • 취약점별 최소 수정 버전을 찾고, 적용 전 작업 범위를 계산한다. 계획을 사용자에게 보여주고 승인을 기다린다.
  • 수정 후에는 계획에 없던 변경이 없는지 확인하고 테스트와 재검사를 진행한다. 확인이나 테스트가 실패하면 변경분을 되돌린다.
  • 안전하고 작은 수정이 불가능하면 에이전트가 중단하고 그 이유를 알린다.

프로젝트에서 다음 명령으로 설치한다.

text
npx skills add blencorp/security-sweep

Python 3.9 이상과 네트워크 연결이 필요하다. npm, pnpm, composer는 해당 도구를 쓰는 프로젝트에서만 사용한다. osv-scanner v2.7.0은 처음 실행할 때 내려받으며, 매 실행 전 tools.lock.json에 기록된 SHA-256 값으로 검증한다.

설치 후 프로젝트에서 에이전트에게 “이 프로젝트의 심각한 취약점을 고쳐라”, “CVE-2021-44906만 수정하라”처럼 요청할 수 있다. 에이전트는 점검 결과와 수정 계획을 제시한 뒤 사용자의 선택을 기다린다. 각 수정에 대해 테스트 기준 상태를 기록하고, 계획된 명령만 적용한 뒤 범위 확인과 테스트를 수행한다. 범위 확인, 테스트, 재검사가 모두 통과해야만 수정 완료로 처리한다.

직접 스크립트를 실행할 수도 있다.

text
SWEEP="python3 ~/.claude/skills/security-sweep/scripts/security_sweep.py" # wherever the skill was installed
$SWEEP scan .
$SWEEP plan --repo .
$SWEEP plan --repo . --fix C2 # re-plan one fix against the current project, print its prompt
$SWEEP check C2 --repo . # after applying
$SWEEP check C2 --repo . --tests pass
$SWEEP revert C2 --repo . --reason "test failed"
$SWEEP report --repo .

종료 코드는 0이 완료, 1이 확인 실패, 2가 불완전한 실행, 3이 사용법 오류를 뜻한다. 데이터 출처에 접근하지 못하면 결과는 ‘불완전’으로 처리하며, 정상 상태로 보고하지 않는다.

수정 버전은 npm이나 Packagist에 공개된 정식 버전 가운데 취약점 공지와 OSV 조회에서 수정된 것으로 확인된 후보를 골라 정한다. 현재 메이저 버전 안에서 가장 낮은 수정 버전을 우선하며, 다음 메이저 버전으로 넘어가야 하면 사용자 승인을 요구한다. 후보 버전은 공개된 지 최소 7일이 지나야 한다. 다만 KEV 취약점은 승인으로 이 조건을 건너뛸 수 있다. 악성 패키지 기록, 새 설치 스크립트나 Composer 플러그인, 새 심각한 취약점이 발견되면 다음 후보를 검토한다. 예를 들어 dompdf v2.0.2는 CVE-2023-23924를 해결하지만 CVE-2023-24813을 새로 포함하므로 계획에서 v2.0.3을 선택한다.

지원 범위는 npm 잠금 파일 v1~v3, pnpm 잠금 파일 v5~v9, Composer 2.2 이상, 그리고 Dockerfile의 PHP·Node.js 태그와 일부 런타임 버전 파일 및 고정된 apt/apk 패키지다. Yarn은 점검과 계획을 만들 수 있지만 설치 없이 변경 범위를 계산할 수 없어 수정에 명시적 승인이 필요하다. Composer에는 오버라이드 기능이 없어 막힌 전이 의존성 수정은 강행하지 않고 보고한다. 자체 코드의 결함이나 PHP·Node.js 이외의 기본 이미지 운영체제 패키지, 컨테이너 이미지 전체 점검은 지원 대상이 아니다. Debian·Ubuntu·Alpine 패키지로 설치한 PHP·Node.js는 배포판이 수정 사항을 역이식할 수 있어 해당 배포판의 보안 추적 정보를 기준으로 판단한다.

이 도구는 온라인 연결이 필수다. 공개 패키지 이름과 버전은 OSV.dev, npm 레지스트리, Packagist 및 Docker Hub에 전달된다. 비공개 패키지는 --private 옵션, SECURITY_SWEEP_PRIVATE 환경 변수 또는 프로젝트의 .security-sweep.json에 등록해야 공개 서비스에 조회되지 않는다. 등록된 패키지를 잠금 파일에서 제거할 수 없으면 해당 파일은 점검하지 않는다. 등록하지 않은 비공개 패키지는 공개 서비스에서 조회될 수 있다. 원문은 텔레메트리가 없다고 밝히며, 인증 정보 파일은 작업용 복사본에 포함하되 내용을 출력하거나 기록하지 않는다고 설명한다. 결과 파일은 프로젝트 안이 아니라 ~/.security-sweep/<project>-<hash>/ 또는 SECURITY_SWEEP_HOME에 저장한다.

제작자가 공개한 에이전트 평가에서는 샘플 프로젝트 두 개와 일부러 문제를 넣은 trap을 사용했다. trap에서 npm audit fix --force는 ejs를 2.7.4에서 7.x로 올려 애플리케이션이 쓰는 템플릿 기능을 없애고 테스트를 깨뜨렸다. Claude Code와 Codex를 각각 스킬 적용 및 미적용 조건에서 실행했으며, 스킬 적용 18회는 모두 변경 범위 준수, 테스트 통과 등의 기준을 충족했다. 미적용 조건에서는 대부분 필요 이상으로 큰 변경이나 금지된 명령이 나타났지만, 테스트를 깨뜨린 사례는 없었다. 따라서 이 평가가 보여주는 효과는 이번 실험에서 장애를 막았다는 것이 아니라, 수정 범위와 규칙 준수를 개선했다는 점이다. 미적용 조건은 각 조합당 한 번만 실행했으므로 일반적인 발생 빈도를 보여주지는 않는다. 원시 평가 결과

저장소는 blencorp/security-sweep이며, 원문은 2026년 10월 22일 버전 1.0.0을 기준으로 설명한다. 취약점 범위와 사용 조건은 저장소 문서에서 확인할 수 있다.