

VEX Hub는 다양한 오픈소스 소프트웨어 프로젝트의 취약점 악용 가능성 교환(VEX) 문서를 수집하고 관리하는 중앙 집중식 저장소입니다. 이는 취약점 정보를 위한 포괄적인 리소스로, 사용자와 보안 도구가 여러 프로젝트와 생태계에서 VEX 데이터에 효율적으로 접근하고 활용할 수 있도록 지원합니다.
VEX Hub는 등록된 프로젝트의 소스 저장소에서 VEX 문서를 자동으로 가져옵니다. 등록된 Package URL (PURL)에서 소스 저장소를 식별하여 VEX 문서를 복사하고 정리함으로써, 더 넓은 커뮤니티가 쉽게 접근할 수 있도록 합니다.
그게 전부입니다! VEX Hub가 자동으로 VEX 문서를 가져와 처리합니다.
VEX Hub 크롤러는 등록된 패키지의 VEX 문서를 주기적으로 크롤링하여 VEX Hub에 유지 관리합니다. 등록된 패키지는 파일의 PURL 목록으로 정의되며, 누구나 Pull Request를 통해 업데이트할 수 있습니다.
PURL 등록, 지원되는 생태계 및 특정 요구 사항에 대한 자세한 내용은 VEX Hub 크롤러를 참조하세요.
패키지 파일은 크롤링할 패키지의 PURL만 지정하며, VEX Hub 크롤러는 VEX 파일이 있는 소스 코드 저장소를 자동으로 식별합니다. 소스 저장소를 식별하는 방법은 생태계에 따라 다릅니다. 다양한 패키지 유형에 대해 소스 저장소가 식별되고 크롤링되는 방법에 대한 자세한 내용은 vex-crawler 문서를 참조하세요.
소스 코드 저장소를 식별한 후 VEX Hub는 해당 저장소에서 VEX 문서를 자동으로 검색합니다. 검색 프로세스에는 다음과 같은 핵심 사항이 포함됩니다.
.vex/ 디렉토리에서 검색됩니다.*.vex.json, *.csaf.json)과 일치하는 파일 이름이 고려됩니다.검색 프로세스, 지원되는 생태계 및 특정 요구 사항에 대한 자세한 내용은 vex-crawler 문서를 참조하세요.
VEX Hub는 version, qualifiers 및 subpath를 제외한 Package URL(PURL)을 기반으로 구성됩니다.
구조는 다음 규칙을 따릅니다.
oci의 경우 repository_url qualifier가 대신 사용됩니다.products 필드에 지정되어야 합니다.디렉토리 구조 형성 예:
pkg:npm/express → /npm/express/pkg:golang/github.com/gorilla/mux → /golang/github.com/gorilla/mux/pkg:maven/org.apache.xmlgraphics/batik-anim → /maven/org.apache.xmlgraphics/batik-anim/pkg:oci/trivy?repository_url=ghcr.io/aquasecurity/trivy → /oci/ghcr.io/aquasecurity/trivy/특수 문자 인코딩 예:
pkg:npm/@angular/core → /npm/%40angular/core/VEX Hub는 VEX Repository Specification을 준수합니다. vex_repository.json 및 index.json 파일을 사용하여 VEX Hub의 VEX 문서에 프로그래밍 방식으로 접근할 수 있습니다.
VEX Hub는 소스 저장소에서 일치하는 모든 VEX 문서를 복사하므로 단일 PURL에 대해 여러 VEX 문서를 저장할 수 있습니다. 그러나 VEX Repository Specification은 PURL당 하나의 VEX 문서만 허용합니다. 이 사양을 준수하기 위해 VEX Hub는 다음과 같은 배포 전략을 구현합니다.
VEX Hub는 PURL당 하나의 VEX 파일만 배포하므로, 동일한 PURL에 대한 VEX 문을 여러 파일로 분할하는 것은 혼란을 방지하고 일관성을 보장하기 위해 권장되지 않습니다.
권장되는 방법은 다음과 같습니다.
예시 시나리오:
Go 모듈과 OCI 이미지라는 두 제품을 유지 관리하는 소스 저장소 https://github.com/org/repo를 고려해 보세요.
첫 번째 방법은 두 제품 모두에 대한 VEX 문이 포함된 단일 VEX 파일 vex.json을 만드는 것입니다.
openvex.json: PURL pkg:golang/github.com/org/repo, pkg:oci/repo?repository_url=docker.io/org/repo 및 pkg:oci/repo?repository_url=ghcr.io/org/repo를 가진 두 제품 모두에 대한 파일두 번째 방법은 각 제품에 대해 별도의 VEX 파일을 만드는 것입니다.
golang.vex: PURL pkg:golang/github.com/org/repo를 가진 Go 모듈용oci.vex: PURL pkg:oci/repo?repository_url=docker.io/org/repo 및 pkg:oci/repo?repository_url=ghcr.io/org/repo를 가진 OCI 이미지용다음 구조는 권장되지 않습니다.
v1.vex: PURL pkg:golang/github.com/org/[email protected]을 가진 Go 모듈용v2.vex: PURL pkg:golang/github.com/org/[email protected]을 가진 Go 모듈용이 예에서 v1.vex가 배포용으로 선택되고 v2.vex는 무시됩니다.
두 파일은 여러 버전과 qualifiers가 포함된 단일 VEX 파일 golang.vex로 결합되어야 합니다.
VEX Hub(그리고 일반적으로 VEX)는 잠재적으로 보안 검사 결과를 보강할 수 있으므로, 소비하는 VEX 문서의 정확성을 면밀히 검토하는 것이 타당합니다. 다른 취약점 교환 피드나 VEX 지원 보안 권고 피드와 달리, VEX Hub는 VEX 문의 데이터 소스가 아닙니다. VEX Hub는 기존 VEX 문서를 집계하여 중앙의 편리한 저장소로 정리할 뿐입니다.
VEX Hub에 표시되려면 VEX 문서가 먼저 기본 패키지의 소스 코드 저장소에 커밋되어야 합니다. 이 접근 방식은 사용자가 이미 사용 중인 패키지와, 따라서 유지 관리자, 거버넌스 및 그들이 사용하는 프로세스를 신뢰해야 한다는 사실에 기반합니다. 각 프로젝트에는 자체 거버넌스 시스템과 소스 코드 저장소에 커밋하는 자체 프로세스가 있습니다. 패키지 코드를 사용자의 눈에 신뢰할 수 있게 유지하는 시스템과 프로세스는 VEX 문서를 신뢰할 수 있게 유지하는 것과 동일한 시스템과 프로세스입니다. VEX Hub를 사용자가 선택한 패키지보다 더 신뢰해서는 안 됩니다.
VEX Hub는 보유한 VEX 문서 또는 해당 문서가 설명하는 패키지의 내용에 대해 어떠한 책임이나 지식도 없습니다. VEX Hub 유지 관리자는 VEX 문서의 내용을 검토하거나 검증하지 않으며, 정보의 정확성과 올바름에 대한 책임은 원본 패키지 유지 관리자에게 있습니다. 사용자는 다른 취약점을 분류할 때와 마찬가지로 억제된 취약점을 수동으로 분류할 것을 권장합니다.
등록된 PURL의 소스 저장소에 있는 VEX 문서가 VEX Hub에서 제대로 업데이트되지 않는 경우 다음 사항을 확인하세요.
.vex/ 디렉토리)에 있는지 확인합니다.이러한 사항을 확인한 후에도 문제가 지속되면 추가 지원을 위해 VEX Hub 저장소에 이슈를 열어 주세요.
VEX Hub 개선을 위한 기여를 환영합니다! 패키지 목록 및 관련 코드는 VEX Hub 크롤러 저장소에서 유지 관리됩니다. 이 저장소에 VEX 문서를 직접 추가하는 Pull Request는 권장되지 않습니다. 이 프로젝트와 참여하는 모든 사람은 Aqua Security Code of Conduct를 따릅니다.