KEV 등재·심각도·도달성·EPSS를 조합한 규칙으로 매깁니다.
security-sweep의 report.py가 아래 규칙으로 1차 우선순위를 매기고, 이어서 Claude가 P0/P1 항목마다 코드 근거를 직접 열어 확정하거나 한 줄 사유와 함께 조정합니다. 여러 조건이 겹치면 가장 높은 우선순위를 씁니다.
규칙
| 우선순위 | 조건 | 의미 |
|---|---|---|
| P0 | CISA KEV 등재, 또는 critical/high 이고 실제 호출(called) | 지금 고친다 |
| P1 | critical/high 이고 imported/unknown, 또는 EPSS ≥ 0.1, 또는 비밀 발견 | 이번 주 |
| P2 | medium, 또는 high 인데 not-imported | 다음 정기 업그레이드 |
| P3 | low/unknown, 낮은 설정 문제 | 기록만 |
| 검증 실패 | OSV 404: 우선순위 없이 별도 섹션 | 출처 스캐너와 ID만 나열 |
근거
| 신호 | 왜 이렇게 쓰나 |
|---|---|
| CISA KEV | 실제 공격에 쓰인 것이 확인된 목록입니다. “공격받을 수 있다”가 아니라 “공격받고 있다”이므로 도달성과 무관하게 P0입니다. |
| EPSS ≥ 0.1 | 30일 내 악용 확률 추정치(0~1)입니다. 0.1 이상은 상위 소수에 해당하므로 심각도가 medium이어도 P1로 올립니다. |
| 도달성 | 실제 호출(called)이면 심각도 그대로, import만 있으면(imported) P1, 흔적이 없으면(not-imported) 한 단계 내립니다. 판정 불가(unknown)는 보수적으로 P1입니다. |
| 비밀값 | 이미 노출된 자격 증명은 교체 전까지 위험이 그대로이므로 항상 P1 이상입니다. |
not-imported ≠ 안전. 앱 코드가 B를 import하지 않아도 의존성 A가 B의 취약 함수를 호출할 수 있습니다. 그래서 P3가 아니라 P2로 둡니다. 동적 로딩(importlib, require(variable), apply/3)도 grep으로는 보이지 않습니다.
실제 조정 예시
도구의 imported는 “코드 어딘가에서 이 패키지를 쓴다”까지만 말해 줍니다. 실제 예시에서 Elixir 프로젝트 하나를 코드로 판정한 결과입니다.
| 도구 우선순위 | 발견 | 사람 판정 | 근거 |
|---|---|---|---|
| P1 | bandit 1.12.5 EEF-CVE-2026-105659 (HTTP/2 리소스 고갈) | 실제 (조건부) | Bandit이 실제 HTTP 서버. 앞단 프록시가 HTTP/1.1로만 전달하면 위험 감소 |
| P2 | decimal 3.1.1 CVE-2026-97853 (Decimal.round/3 DoS) | 도달 불가 | 유일한 호출이 Decimal.round(0)으로 자릿수가 상수라 공격자가 조종 못 함 |
| P1 | config/config.exs 하드코딩 비밀값 (EXS-CFG-001) | 오탐 | Phoenix가 생성한 LiveView signing_salt는 비밀이 아님 |
좋은 사유는 “위치 + 무엇이 어디로 흐르는지 / 왜 닿지 않는지”이고, 나쁜 사유는 “아마 안 씀”, “오래된 CVE”, “ID가 이상함”입니다. 근거 위치가 없는 조정은 하지 않습니다.
전체 규칙 문서 (prioritize.md) · CVE 실재 검증 방법 · security-sweep 소개
자주 묻는 질문
P1이 100건 넘게 나오면 어떻게 읽나요?
패키지별로 묶어 읽습니다. 실제 예시의 P1 107건 중 99건은 pillow와 sharp 두 패키지였습니다. 할 일은 건수가 아니라 올릴 패키지 수입니다.
KEV 항목도 코드에서 안 쓰면 내려도 되나요?
아니요. KEV 항목은 도달성과 무관하게 P0를 유지합니다. 도달성 판정이 grep 기반 추정이라 오판 비용이 너무 크기 때문입니다.
security-sweep이란?
security-sweep은 한 문장 요청으로 여러 프로젝트·서버·컨테이너 이미지의 알려진 취약점을 한 번에 점검하는 오픈소스 Claude Code 스킬입니다.
/plugin marketplace add baryonlabs/security-sweep
/plugin install security-sweep@baryonlabs-security