본문으로 건너뛰기

취약점 데이터 출처

TRUSCA는 5개 공개 취약점 피드를 컴파일한 번들인 Trivy DB로 SBOM을 CVE에 대조합니다. 본 페이지는 각 출처가 무엇을 기여하는지, 언제 갱신되는지, 어떤 생태계를 커버하는지 정리한 레퍼런스입니다.

대상 독자

"이 CVE는 어디서 오는가?", "왜 이 생태계는 빠졌나?"에 답해야 하는 보안 리드·감사인·운영자. 다운로드·갱신·air-gapped 미러 같은 운영자 라이프사이클은 취약점 데이터 (Trivy DB)를 참조하세요.

출처 매트릭스​

출처주체업스트림 갱신기여 항목
NVD — National Vulnerability DatabaseNIST약 6시간CVE ID, CVSS v3 벡터, CPE 매칭, 참조. CVE 백본.
OSV — Open Source VulnerabilitiesGoogle연속생태계별 어드바이저리 + 정밀 버전 범위(introduced / fixed / last_affected).
GHSA — GitHub Security AdvisoriesGitHub연속어드바이저리 메타데이터, 수정 버전, 철회 상태. npm / pip / Maven은 GHSA가 먼저인 경우가 많음.
EPSS — Exploit Prediction Scoring SystemFIRST일간30일 익스플로잇 확률 0.0–1.0 + 백분위. 선택적 EPSS 게이트 구동.
KEV — Known Exploited VulnerabilitiesCISA발표 시해당 CVE의 실환경 익스플로잇 확인 여부 boolean. 최우선 트리아지 신호.

다섯 중 셋(NVD, OSV, GHSA)이 같은 Trivy DB 번들에 들어 있습니다. 포털은 스캔 시점에 어떤 API도 호출하지 않습니다. 스캔별 매칭은 워커의 /var/lib/trivy/db/에서 읽으며, Trivy DB refresh 태스크가 이를 최신으로 유지합니다.

EPSS와 KEV는 스캐너에서 오지 않습니다. 스캐너 출력에 둘 다 없기 때문에 각각 별도의 일간 동기화가 취약점 카탈로그에 값을 씁니다. KEV는 CISA 피드에서, EPSS는 FIRST의 일간 CSV에서 받습니다.

두 동기화 모두 네트워크를 쓰므로 끌 수 있고, EPSS_REFRESH_ENABLED는 기본값이 꺼짐입니다. 꺼져 있는 동안 epss_score와 epss_percentile은 비어 있고, 이를 읽는 표면도 함께 빕니다. Vulnerabilities 탭의 EPSS 열과 min_epss 필터, sort=priority의 EPSS 항목, Excel·PDF 보고서의 EPSS 열, 그리고 선택적 GATE_EPSS_THRESHOLD 빌드 게이트입니다. 특히 게이트는 임계를 아무리 낮춰도 모든 빌드를 통과시킵니다. 이 기능들에 기대기 전에 동기화를 켜거나 EPSS_FEED_URL을 사내 미러로 지정하세요.

EPSS는 FIRST의 EPSS Special Interest Group이 관리하며 점수 생성과 발행은 Empirical Security가 맡습니다. FIRST는 가능한 곳에 귀속 표기를 요청하며, 제시하는 인용은 다음과 같습니다.

Jay Jacobs, Sasha Romanosky, Benjamin Edwards, Michael Roytman,
Idris Adjerid (2021), Exploit Prediction Scoring System,
Digital Threats Research and Practice, 2(3)

전체 조건은 THIRD_PARTY_NOTICES.md에 있습니다. 수집 경로를 벌크 CSV 하나로 둔 것은 의도적입니다. FIRST는 자사 조회 API를 벌크 내려받기나 로컬 사본 동기화에 쓰지 말라고 안내합니다.

컴포넌트 수준 출처 하나는 Trivy DB 밖에 있습니다:

출처발행처갱신기여 내용
endoflife.date — 제품 라이프사이클 날짜endoflife.date 커뮤니티 (코드는 MIT, 라이프사이클 날짜는 사실 데이터)릴리스마다 저장소에 포함되는 스냅샷 (scripts/refresh_eol_snapshot.py)선별된 런타임·프레임워크 목록의 지원 종료 판정 — EOL 배지와 필터. 스캔 시 번들된 스냅샷에서 읽으며 네트워크 호출이 없습니다.

포털에서의 갱신 주기​

레이어주기노브
업스트림 Trivy DB 재빌드약 6시간 (Aqua가 새 OCI 태그 게시)—
포털 워커가 새 DB pull주간TRIVY_DB_REFRESH_HOURS (기본 168)
로컬 DB에 대한 스캔별 매칭스캔당 (네트워크 없음)—
기존 SBOM 자동 재매칭DB 성공 갱신 후 매번Celery beat 태스크 tasks.rematch.run_rematch

자동 재매칭 beat(roadmap)은 DT가 우리 배포에서 제공하지 못했던 킬러 기능입니다 — 새 CVE가 갱신된 DB에 들어오면, beat 태스크가 모든 프로젝트의 최신 SBOM을 순회해 매칭되는 vulnerability_findings 행을 새로 씁니다. 사용자는 재스캔 없이 Vulnerabilities 탭에서 새 발견을 확인합니다.

재탐지의 사용자 뷰(배너·알림 트리거)는 재탐지를 참조하세요.

생태계 커버리지​

Trivy DB는 컴포넌트를 package URL(purl)로 매칭합니다. 아래 생태계는 커버리지가 조밀합니다 — 각각 전용 OSV 스트림 + GHSA 기여가 있습니다.

생태계purl 타입주 피드비고
npm (JavaScript / Node)pkg:npm/*OSV + GHSA + NVD1급 — 대부분 CVE는 GHSA에 먼저.
PyPI (Python)pkg:pypi/*OSV + GHSA + NVD1급.
Maven (Java / Kotlin)pkg:maven/*OSV + GHSA + NVD1급. v0.10.0(roadmap)부터 classifier 인식.
Go 모듈pkg:golang/*OSV + GHSA + NVD1급. 취약점 DB는 vuln.go.dev.
RubyGemspkg:gem/*OSV + GHSA1급.
crates.io (Rust)pkg:cargo/*OSV + GHSA1급.
Packagist (PHP)pkg:composer/*OSV + GHSA1급.
NuGet (.NET)pkg:nuget/*OSV + GHSA + NVD1급.
Hex (Elixir / Erlang)pkg:hex/*OSV견고.
Pub (Dart / Flutter)pkg:pub/*OSV견고.
Conan (C / C++)pkg:conan/*OSV위보다 희소 — C/C++ CVE는 OS 패키지 CVE인 경우가 많음(아래).
OS 패키지 (Alpine, Debian, RHEL 등)pkg:apk/*, pkg:deb/*, pkg:rpm/*NVD + 배포판별 보안 어드바이저리컨테이너 스캔 파이프라인(scan_container.py)이 사용. C/C++ 코드 레포의 소스 스캔에선 생성되지 않음.

컴포넌트의 purl이 피드 엔트리와 일치하지 않으면 finding이 만들어지지 않습니다 — 설계상 조용히. 흔한 두 원인:

  • 비정규 purl. cdxgen은 보수적입니다 — 잘못된 package.json은 정규화되지 않는 purl을 낼 수 있습니다. 스캔 ID와 함께 이슈로 보고하세요. 생성기는 점진 강화.
  • OSV / GHSA에 아직 없는 생태계. 커버리지는 매월 늘어납니다. 업스트림 진실은 OSV 생태계 목록.

finding별 데이터 신호​

Dependency-Track 급 도구와 비교해 Trivy DB는 finding별로 다음 신호를 노출합니다. 포털은 Vulnerabilities 탭과 API로 모두 노출합니다.

신호출처포털 위치
CVE IDNVD / OSV / GHSA행 식별자, 헤더 chip.
Severity (critical / high / medium / low)NVD CVSS v3 (우선) → GHSA → OSV행 배지, 분포 카드, severity 필터.
CVSS v3 벡터NVDFinding drawer → Summary.
설명 / 제목NVD / GHSAFinding drawer → Summary.
CWENVDFinding drawer → Summary.
수정 버전GHSA → OSV (fixed 범위)Finding drawer → Affected component → "Fixed in".
영향 버전 범위OSV (introduced / last_affected / fixed)매처가 사용; 직접 노출은 없음.
EPSS 점수 / 백분위EPSSFinding drawer → Summary; 정렬 가능 컬럼; GATE_EPSS_THRESHOLD 게이트.
KEV (실환경)KEV 카탈로그Finding 행 배지; 게이트 구동 가능 (post-GA 로드맵).
ReferencesNVD / GHSA / OSV (URL 중복 제거)Finding drawer → References.

포털이 소비하지 않는 것:

  • 상용 SCA 도구가 번들하는 독점 피드의 큐레이션된 취약점 리서치 — 설계상 공개 피드만 사용.
  • NVD로 흘러드는 것 외 벤더 어드바이저리(Oracle CPU, Microsoft MSRC). 향후 릴리스에서 추가 Trivy data source로 붙일 수 있음.
  • Trivy DB 신호로서의 reachability — Trivy DB는 reachability를 담지 않습니다. TRUSCA는 reachability를 실행하지만, Trivy DB 데이터가 아니라 Go를 위한 별도 govulncheck 분석기로 실행합니다(분석 유형 → Reachability 참조). Go finding을 reachable / not-reachable / not-analysed로 표시하며, 다른 생태계의 finding은 분석되지 않고 "영향 가능"으로 표시됩니다.

트리아지에의 의미​

위 매트릭스는 모든 분석가가 자동으로 받는 입력입니다. 다음 두 관행이 신호 대 잡음을 높입니다.

  1. CVSS 위에 EPSS를 겹쳐 보세요. EPSS 백분위 > 95인 medium은 EPSS < 5인 critical보다 먼저 봐야 합니다. 컬럼 정렬 또는 GATE_EPSS_THRESHOLD env로 게이트.
  2. KEV로 필터링하세요. Vulnerabilities 탭은 KEV 필터를 제공합니다 — CISA 카탈로그에 있는 것은 실환경 익스플로잇이 확인된 것이며, severity 단독 순위보다 먼저 패치해야 합니다.

사용자 흐름(drawer, VEX 상태 머신, suppression)은 Vulnerabilities를 참조하세요.

참고​