Skip to content

docs(supply-chain): require the distribution namespace in OS package PURLs - #302

Merged
haksungjang merged 1 commit into
masterfrom
docs/os-purl-distribution-namespace
Sep 4, 2026
Merged

docs(supply-chain): require the distribution namespace in OS package PURLs#302
haksungjang merged 1 commit into
masterfrom
docs/os-purl-distribution-namespace

Conversation

@haksungjang

Copy link
Copy Markdown
Member

OS 패키지 PURL에 배포판 네임스페이스가 필수임을 요구사항에 명시하고, 서버 납품 스캔에서 이 값이 빠지는 조건을 안내합니다.

배경

서버 납품 SBOM 한 건이 제출 요구사항의 필수 항목을 모두 충족했는데도, 등록 후 컴포넌트가 한 건도 매칭되지 않았습니다. SPDX 2.3 형식에 262개 패키지, PURL 보유율 99.6%, 버전 필드도 같은 비율로 채워져 있었습니다. 반려 사유 어디에도 걸리지 않는 SBOM이었습니다.

원인은 rpm PURL에서 배포판이 빠진 것이었습니다.

pkg:rpm/bind@9.11.36-16.el8_10.6?arch=x86_64&epoch=32

PURL 명세는 rpm, deb, apk 타입의 네임스페이스를 필수로 두고, 취약점 분석 시스템도 이 값으로 패키지를 특정합니다. 실제로 조회해 보면 이렇게 갈립니다.

pkg:rpm/bind@9.11.36-16.el8_10.6        조회 결과 없음
pkg:rpm/rhel/bind@9.11.36-16.el8_10.6   BIND9 9.11.36 으로 매칭

배포판만 채우면 그대로 매칭됩니다. 배포판 릴리스 태그(.el8_10.6)는 문제가 아니었습니다.

현행 문서에서 이 규칙을 알 수 있는 곳은 요구사항의 언어별 예시표에 있는 pkg:rpm/centos/glibc@... 한 줄뿐입니다. 같은 표의 npm 예시에는 네임스페이스가 없어 선택 요소로 읽히기 쉽고, 규칙을 서술한 문장도 잘못된 예시도 없었습니다.

변경 내용

  • 제출 요구사항: PURL 절에 규칙 한 문장을 넣고, 잘못된/올바른 예시표에 한 행을 추가했습니다.
  • 반려 사유: 표에 OS 패키지 PURL에 배포판 누락 행을 추가했습니다. 기존 실제와 다른 배포판·버전의 PURL과는 다른 유형입니다. 그쪽은 매칭이 성공해 화면에 오류가 보이지 않는 반면, 이쪽은 매칭이 전량 실패해 BOM이 비어 버립니다.
  • SBOM 생성 방법: 서버 납품 절에 스캔 대상 지침을 넣었습니다. Syft는 대상 안의 /etc/os-release로 배포판을 정하므로 rootfs의 루트를 지정해야 하고, 하위 디렉터리만 주면 패키지 데이터베이스는 읽혀도 배포판이 판정되지 않습니다. 스캔 전 확인 명령도 함께 넣었습니다.

기존 문장을 고치지 않고 세 곳에 18줄을 더하는 변경입니다. 한국어와 영어 양쪽에 반영했고 hugo 빌드와 세 페이지 렌더를 확인했습니다.

남은 부분

문서만으로는 부족합니다. 검증 도구의 PURL 문법 검사는 네임스페이스를 선택으로 두기 때문에 이런 SBOM에도 통과를 줍니다. npm이나 pypi에는 그게 맞는 판단이라 그 검사를 고칠 수는 없고, OS 패키지 타입만 보는 별도 검사가 필요합니다. 도구 쪽에서 따로 다루겠습니다.

@haksungjang
haksungjang merged commit a2df7ca into master Sep 4, 2026
2 of 3 checks passed
@haksungjang
haksungjang deleted the docs/os-purl-distribution-namespace branch September 4, 2026 05:34
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant