v0.21.0 — 2026 SBOM 최소 요소, 아웃바운드 라이선스 충 돌, 제대로 된 대상을 보는 스캔
기능 릴리스이면서 교정이 유난히 많은 릴리스입니다. 새 기능 두 가지(2026 SBOM 최소 요소, 아웃바운드 라이선스 충돌 판정)와 함께, 스캔이 성공으로 끝나면서 실제로는 요청한 것과 다른 대상을 설명하던 결함들을 고쳤습니다. 나머지를 건너뛰더라도 이 부분은 읽을 값이 있습니다. 다른 브랜치를 측정한 통과는 근거가 되지 않고, 아무것도 대조하지 못한 빈 취약점 목록도 근거가 되지 않습니다.
기계가 읽는 전체 변경 목록은
CHANGELOG.md에 있습니다.
업그레이드 전에 읽어 주세요
이미 가지고 있는 데이터의 표시가 달라지는 변경이 둘 있습니다.
컨테이너 인벤토리는 다음 스캔부터 생태계가 바뀝니다. 컨테이너 스캔은 이미지가
무엇이든 모든 패키지를 Alpine 패키지로 기록했습니다. Rocky 이미지의 rpm도 Debian
이미지의 deb도 pkg:apk/*로 남았습니다. 실패한 것은 없고 놓친 취약점도 없습니다.
개수는 맞고 식별자만 틀렸기 때문에 눈에 띄지 않았습니다. 기존에 저장된 행은 그대로
두며, rpm·deb 이미지를 다시 스캔하면 교정됩니다. 다만 그 재스캔은 해당 프로젝트의
취약점 판정을 초기화합니다. 분석가의 판정과 최초 발견 시각은 컴포넌트를 기준으로
이어지는데 교정된 패키지는 다른 컴포넌트이기 때문입니다. Alpine 이미지만 스캔해 온
배포는 영향이 없습니다. 업그레이드를 참고하세요.
이미 올린 SBOM의 취약점 수가 늘어날 수 있습니다. 공급자 SBOM이 운영체제를 적지 않은 채 OS 패키지만 담고 있었다면 지금까지는 아무것도 대조되지 않았습니다. 다시 업로드하면 취약점이 나옵니다. 실측한 사례에서는 패키지 다섯 개짜리 CentOS 문서가 0건에서 306건이 되었습니다.
주요 변경
모든 SBOM을 2026 최소 요소로 측정합니다
2026 SBOM 최소 요소(v2.1, 2026-07-29, CISA·NSA·FBI와 15개 국제 파트너 발행)가 2021년 NTIA 최소 요소를 대체합니다. 일부가 아니라 모든 소프트웨어에 적용되므로 이 기준선에는 조건을 두지 않았고, 모든 CycloneDX 문서를 측정합니다. 데이터 필드 17개와 관행 6개, 합해서 23개 항목입니다.
모든 항목은 권고이고 통과·실패 판정을 움직이지 않습니다. 의도한 설계이며 지침 자체를 따른 것입니다. 지침은 값을 적을 수 없을 때 "모른다"고 명시하는 것을 값 대신 받아들이는데, 항목 을 필수로 올리면 정당하게 없을 수 있는 값 때문에 SBOM이 실패하게 됩니다. 여섯 관행 중 넷은 문서에 무엇이 담겼는지가 아니라 조직이 어떻게 일하는지를 다루므로, 점수 대신 무엇을 갖춰야 하는지 안내를 답니다.
규제 대응표의 미국 프레임워크도 이 요소들로 옮겼습니다. 롤업은 실패 수를 나머지로
추론하게 두지 않고 failed로 명시하며, 네 값의 합이 전체와 같습니다.
적합성 패널의 순서도 그에 맞춰 바꿨습니다. SBOM을 막는 것(필수 실패, 권고 부족, 사람이 봐야 하는 항목)을 첫머리에 두고 기준선마다 절을 나눴습니다. 권고 23줄이 필수 항목을 화면 아래로 밀어내지 않습니다. 부족한 항목에는 그것을 채울 CycloneDX 조각을 접이식 블록으로 보여 줍니다. 두 기준선 모두 해당합니다.
SBOM 적합성을 참고하세요.
배포 라이선스를 선언하면 의존성을 그에 비추어 판정합니다
라이선스 충돌은 아웃바운드 라이선스가 있어야 성립하므로 정책 축으로는 표현할 수 없었습니다. 정책은 AGPL-3.0을 금지한다고 말할 수는 있어도, 그것이 이 프로젝트가 배포하는 MIT 라이선스와 충돌한다고는 말하지 못합니다.
이제 프로젝트 설정에서 아웃바운드 라이선스를 선언합니다. 호환성 매트릭 스가 스캔에 담긴 모든 라이선스를 그에 비추어 판정하고, Compliance 표에 판정 열과 필터, 요약이 생기며 근거는 드로어에서 볼 수 있습니다.
선언하지 않으면 판정하지 않습니다. 비어 있는 열은 문제없음이 아니며, 요약은 "평가하지 않음"과 "평가했고 없음"을 구분합니다.
마이그레이션 0050이 컬럼을 추가합니다.
수출한 SBOM이 누가 언제 무엇으로 만들었는지 밝힙니다
2026 최소 요소는 SBOM에 어느 생명주기 단계에서 만들었는지, 누가 만들었는지, 어떤
도구의 어느 버전으로 만들었는지, 빈 필드가 모르는 것인지 밝히지 않는 것인지를 적으라고
합니다. 넷 다 기록하지 않았고 도구 버전은 0.0.1 이라는 고정 문자열이었습니다.
이제 단계는 스캔 종류에서 따라옵니다. 요소 문서가 그은 구분을 그대로 씁니다. 소스
매니페스트는 빌드 이전, 빌드된 이미지는 빌드 이후입니다. 업로드받은 공급자 문서를 다시
수출할 때는 단계를 적지 않습니다. 남의 문서를 변환했다고 우리가 그 문서의 작성자가
되지는 않기 때문입니다. 작성자는 SBOM_AUTHOR로 선언하며, 설정하지 않으면 필드를
비웁니다. 요소는 충족하면서 아무것도 답하지 않는 자리표시자를 넣지 않습니다.
이 진술들은 TRUSCA가 만드는 두 문서 모두에 들어 갑니다. 요청 시 다시 만드는 수출 문서와, 서명해서 내려받게 하는 스캔 문서입니다. 처음에는 수출 경로에만 들어가서 정작 소비자가 받는 SBOM이 아무 말도 하지 않는 상태였습니다.
알아 둘 만한 수정
풀 리퀘스트 스캔이 기준 브랜치를 설명했습니다
모든 소스 스캔이 git clone --depth 1로 원격의 기본 브랜치를 가져왔습니다. ref는
보관 키로만 함께 다녔습니다. 그래서 취약한 의존성을 추가한 PR이 통과하고, main의
Critical CVE가 아무 상관 없는 PR을 막았습니다. 브랜치 단위 판정이 엉뚱한 코드를
가리켰습니다.
이제 워커가 ref를 가져와 체크아웃합니다. 그 사이 사라진 ref는 기본 브랜치로 물러서고
metadata.ref_fallback을 남깁니다. 대체된 대상에서 나온 판정은 요청한 자리에서 나온
판정과 구분할 수 있어야 하기 때문입니다.