본문으로 건너뛰기

v0.18.0 — 취약점 SLA 추적, 규제 대응 SBOM 적합성, 업그레이드 클러스터링

기능 릴리스입니다. v0.14.0 이후 첫 릴리스라 그동안의 개발 사이클 전체를 담았습니다. 모든 변경은 추가·하위 호환이며, 새로 추가된 forward-only 마이그레이션과 바뀐 기본값은 아래 업그레이드 안내를 읽으십시오. 전체 머신 리더블 체인지로그는 CHANGELOG.md에 있습니다.

주요 변경 사항

재스캔에도 유지되는 조치 시계 — 취약점 SLA/aging

이제 findings에 프로젝트 단위 최초 탐지 시각(first_detected_at)이 붙고, 이 값은 재스캔·재매칭·컨테이너 재스캔에도 유지됩니다 — 조치 시계가 스캔마다 초기화되지 않습니다. 그 위에 심각도별 SLA 기한이 얹힙니다 (VULN_SLA_DAYS_CRITICAL/HIGH/MEDIUM/LOW, 기본 7·30·90·180일. info와 unknown 심각도는 SLA가 없습니다). 취약점 목록·상세 API가 first_detected_at / sla_due_date / sla_status(overdue · imminent · ok)를 내려주고, sla= 필터와 sort=sla_due도 지원합니다. Vulnerabilities 탭에 "SLA due" 열, 인라인 SLA 필터, 드로어의 최초 탐지 줄이 추가됩니다. 매일 도는 sweep (trustedoss.vuln_sla_sweep, VULN_SLA_ALERTS_ENABLED, 기본 켬)이 열린 findings가 기한을 넘기면 담당 팀에 프로젝트당 한 번 알립니다(알림 종류 vuln_sla_breach, 사용자별 환경설정을 따릅니다). CRA 컴플라이언스 매핑이 한계로 표시해야 했던 aging·"부당한 지연 없는 조치" 격차를 이로써 해소합니다. 자세한 내용은 조치 SLA와 aging을 참고하십시오.

규제 기관에 답하는 SBOM 적합성 — 필드 검사 + 크로스워크

업로드 SBOM 적합성 점수에 규제 기준(EU 사이버 복원력법의 BSI TR-03183-2, NTIA 최소 요소)이 명명하는 컴포넌트별 필드 검사 다섯 개가 추가됩니다: SHA-512 체크섬, 컴포넌트 작성자, 컴포넌트 파일명, 소스·배포 URI, 전달 파일 속성 커버리지. 이들은 판정 중립이라 SBOM이 규제 기관에 얼마나 잘 답하는지를 설명할 뿐 pass / warn / fail 뱃지를 움직이지 않습니다(SBOM_CONFORMANCE_FIELD_MIN_PCT, 기본 80이 커버리지 기준을 조정합니다). 적합성 응답과 패널에 규제 크로스워크가 추가됩니다: 프레임워크별 집계(BSI TR-03183-2, NTIA, EU AI법 부속서 IV, 한국 AI 기본법)로 매핑된 요구사항이 present인지, gap인지, 사람 검토만 가능한지를 보여줍니다 — 벤더링된 면책 문구가 붙은 문서 준비 보조 수단이지 컴플라이언스 판정이 아닙니다. 또한 커버리지 검사가 패키지 0개인 SBOM을 더는 실패로 처리하지 않고, 데이터셋(type: "data") 컴포넌트는 PURL 커버리지 같은 패키지 전용 필드에 반영되지 않습니다. 자세한 내용은 규제 대응표CRA 컴플라이언스 매핑을 참고하십시오.

버전 currency — 최신 패치보다 뒤처진 컴포넌트

EOL 플래그의 형제 격이지만 다른 질문에 답합니다: "이 릴리스 라인이 끝났는가?"가 아니라 "이 버전이 아직 지원되는 릴리스 라인의 최신 패치보다 뒤처졌는가?". 벤더링된 endoflife.date 스냅숏(각 사이클이 자신의 최신 패치를 담습니다)을 재사용하므로 완전 오프라인이며, 스캔 시 새로운 네트워크 접근이 없습니다. Components 탭과 드로어의 컴포넌트에 최신 패치 버전이 담긴 "Outdated" 뱃지(EOL보다 긴급도가 낮은 톤), "Outdated only" 필터(?outdated=true), 프로젝트 Overview의 "N outdated" 칩이 추가됩니다. 자세한 내용은 버전 currency를 참고하십시오.

"Group by upgrade" — 조치 작업 목록

프로젝트 Vulnerabilities 탭에 Flat ⇄ By upgrade 토글이 추가됩니다. "By upgrade"는 평면 findings 목록을 프로젝트 전체의 조치 클러스터로 바꿉니다 — 각 클러스터는 한 컴포넌트의 최소 안전 업그레이드(열린 findings의 fix 버전 중 semver 최댓값)로, Upgrade {component} {from} → {to}와 해소되는 findings 수를 보여주고, 펼치면 개별 findings까지 확인할 수 있습니다. 열린 findings에 게시된 fix가 없는 컴포넌트는 오해를 부르는 부분 업그레이드를 제시하는 대신 "No upgrade available"로 묶입니다. GET /v1/projects/{id}/vulnerabilities/upgrade-clusters가 빌드 게이트와 같은 열림 상태 집합을 재사용하므로 클러스터 수가 게이트와 어긋나지 않습니다. 자세한 내용은 Group by upgrade를 참고하십시오.

컨테이너 스캔이 베이스 이미지 OS 수명 종료(EOSL)를 드러냅니다

이제 Trivy가 스캔한 이미지의 베이스 OS 릴리스가 서비스 수명 종료를 지났는지 보고합니다 — 상위 보안 수정을 더는 받지 못하므로 새로 공개된 CVE가 영영 패치되지 않는데, 이는 개별 패키지 CVE로는 드러나지 않는 위험입니다. TRUSCA는 해당 OS 계열·릴리스와 EOSL 플래그를 저장하고, 릴리스가 EOL이면 스캔 상세 페이지에 "OS end-of-life" 패널을 보여줍니다. 판정은 Trivy 번들 데이터베이스에서 나오므로 추가 네트워크가 없고, 데이터베이스가 오래되면 최근 종료된 릴리스를 아직 표시하지 못할 수 있습니다. 자세한 내용은 베이스 이미지 OS 수명 종료를 참고하십시오.

라이선스 커버리지: RubyGems·NuGet, 그리고 한국어 라이선스 콘텐츠

라이선스 보강이 이제 RubyGems(rubygems.org)와 NuGet(api.nuget.org)까지 다루며, 기존 PyPI / Maven / crates.io / pkg.go.dev fetcher에 합류합니다 — 맨 매니페스트만 있는 Ruby·.NET 의존성이 더는 100% unknown이 아닙니다. 조회는 이제 LICENSE_FETCH_ENABLED(기본 — 패키지 이름과 버전만 네트워크로 나갑니다)로 제어하므로, 에어갭 환경은 false로 두어 조회를 깔끔하게 건너뛸 수 있습니다. 별개로, 인터페이스 언어가 한국어이면 분류 카탈로그 각 라이선스의 평이한 요약과 의무사항 텍스트가 한국어로 표시되고, 정본 영어 원문은 한 번의 클릭으로 볼 수 있습니다(52개 라이선스 카탈로그가 대상이며, 그 밖의 라이선스는 영어로 대체됩니다). 자세한 내용은 컴포넌트·라이선스 가이드를 참고하십시오.

정책 반영 SBOM 내보내기 프로파일

GET /v1/projects/{id}/sbom이 선택적 profile을 받습니다. policy-annotated는 프로젝트의 유효 라이선스 정책을 위반하는 각 컴포넌트를 원위치에서 표시합니다(금지·조건부 라이선스에 대해 CycloneDX properties / SPDX 주석). policy-filtered는 금지 컴포넌트와 이를 참조하는 취약점 항목을 제거하고, 제외한 수를 문서에 기록합니다. 기본 내보내기는 그대로이며 바이트 단위로 안정적입니다. 프로파일 내보내기는 cosign 서명 대상이 아닙니다 — 서명은 정본 기본 SBOM만 덮습니다. 자세한 내용은 정책 프로파일을 참고하십시오.

문서 — Wave 7 파리티

EN·KO 신규 페이지를 추가했습니다: finding이 VEX 취약점 분류, 컴포넌트 승인, 빌드 게이트를 거치며 어떻게 흐르는지 정리하고 거부된 컴포넌트 승인이 빌드를 막지 않는다는 점을 분명히 하는 Triage 가이드, 소스 SBOM 스캔 / 컨테이너 스캔 / 정책 게이트 / (예정) 도달성 매트릭스인 분석 유형 레퍼런스, Best practices 카테고리(스캔 빈도, 정책 설계, 팀 구조, 업그레이드 주기), FAQ 링크 허브.

수정

  • 동적 스캔 사이드카가 이제 git 클론 루트를 대상으로 합니다. SCAN_EXECUTOR=local_docker에서 git 저장소의 Android 스캔이 사이드카로 라우팅됐지만 compileSdk를 읽고 빌드를 실행할 때 한 단계 아래 클론 루트가 아니라 바깥 워크스페이스 디렉터리를 사용했습니다 — 그래서 기본 SDK 이미지를 고르고 빈 디렉터리를 스캔했습니다. 이제 스캔 executor가 해석된 프로젝트 루트를 전달하고 사이드카가 이를 사용합니다. 선택적 local_docker executor에만 영향을 주며, 기본 인프로세스 경로는 영향이 없었습니다.

업그레이드 안내

  • 마이그레이션은 컨테이너 기동 시 자동 적용됩니다(AUTO_MIGRATE, 기본값): 0040_component_version_currency, 0041_vulnerability_first_detected, 0042_notification_kind_vuln_sla_breach는 forward-only입니다.
  • SLA 추적은 기본 켬이며 기한은 7·30·90·180일입니다. 기존에 열려 있던 findings는 업그레이드 후 첫 재스캔에서 시계를 시작합니다. 기한은 VULN_SLA_DAYS_*로 조정하고, 위반 알림은 VULN_SLA_ALERTS_ENABLED=false로 끕니다.
  • 라이선스 보강의 외부 조회가 이제 제어됩니다. 레지스트리 조회가 이전에는 무조건 실행됐지만, 이제 LICENSE_FETCH_ENABLED(기본 켬)를 따릅니다. 에어갭 환경은 false로 두어 조회를 깔끔하게 건너뛰십시오.
  • 규제 필드 검사와 크로스워크는 참고용입니다 — 저장된 pass / warn / fail 판정을 바꾸지 않으며, 이전 스캔도 읽는 시점에 매핑 갱신을 재스캔 없이 반영합니다.

0.18.0 이미지를 받거나 0.18.0 이미지 태그로 helm upgrade 하십시오.