diff --git a/content/en/guide/supply-chain/for-suppliers/creation-guide/_index.md b/content/en/guide/supply-chain/for-suppliers/creation-guide/_index.md index f179d9bb3..091417566 100644 --- a/content/en/guide/supply-chain/for-suppliers/creation-guide/_index.md +++ b/content/en/guide/supply-chain/for-suppliers/creation-guide/_index.md @@ -40,27 +40,27 @@ Analyzes built container images and build artifacts that include package manager - Official documentation: [https://github.com/anchore/syft](https://github.com/anchore/syft) - Recommended analysis targets: built Docker images, OCI images, tar files -> **Warning — Do not scan installation directories or collections of raw files (PURL omission causes full rejection)** -> -> If you use `syft dir:` mode to scan an installation directory or a collection of binaries that has no -> package manager metadata (`package.json`, `go.mod`, `*.jar`, RPM/DEB package DB, etc.), Syft cannot -> identify the ecosystem and produces an **SBOM with empty PURLs**. Because SK Telecom's system maps -> vulnerabilities by PURL, such an SBOM fails matching entirely and is rejected. -> -> In one real case, a supplier scanned an installation directory with `syft dir:/root/nag_pkg`, and the -> submitted SBOM had no PURL on any of its 261 components, so all 251 vulnerability matches failed. -> -> Run Syft against the following targets. -> -> ```bash -> # Recommended: scan a built image (PURL and ecosystem identified automatically) -> syft : -o cyclonedx-json=sbom.json -> -> # Not recommended: scan an installation directory or raw files (rejected due to missing PURL) -> syft dir:/root/nag_pkg # without package manager metadata, PURL count becomes 0 -> ``` -> -> Immediately after generation, be sure to check the PURL count. See the [Validation Checklist](../checklist/) for how to verify. +{{% alert title="Warning — Do not scan installation directories or collections of raw files (PURL omission causes full rejection)" color="danger" %}} +If you use `syft dir:` mode to scan an installation directory or a collection of binaries that has no +package manager metadata (`package.json`, `go.mod`, `*.jar`, RPM/DEB package DB, etc.), Syft cannot +identify the ecosystem and produces an **SBOM with empty PURLs**. Because SK Telecom's system maps +vulnerabilities by PURL, such an SBOM fails matching entirely and is rejected. + +In one real case, a supplier scanned an installation directory with `syft dir:/root/nag_pkg`, and the +submitted SBOM had no PURL on any of its 261 components, so all 251 vulnerability matches failed. + +Run Syft against the following targets. + +```bash +# Recommended: scan a built image (PURL and ecosystem identified automatically) +syft : -o cyclonedx-json=sbom.json + +# Not recommended: scan an installation directory or raw files (rejected due to missing PURL) +syft dir:/root/nag_pkg # without package manager metadata, PURL count becomes 0 +``` + +Immediately after generation, be sure to check the PURL count. See the [Validation Checklist](../checklist/) for how to verify. +{{% /alert %}} ### Trivy (container image analysis) @@ -69,32 +69,32 @@ An all-in-one tool that can perform container image analysis and vulnerability s - Official documentation: [https://aquasecurity.github.io/trivy/](https://aquasecurity.github.io/trivy/) - GitHub: [https://github.com/aquasecurity/trivy](https://github.com/aquasecurity/trivy) -> **Security Warning — Trivy Supply Chain Attack Incident (2026)** -> -> In March 2026, a supply chain attack occurred in which an attacker re-pointed existing release tags -> of `aquasecurity/trivy` to inject malware. **The GitHub release v0.69.4 (3/19) and the DockerHub images -> v0.69.5 and v0.69.6 (3/22) have been confirmed as compromised, so please stop using them.** -> -> To use Trivy safely, follow these principles. -> -> - **GitHub Actions**: Use a pinned commit SHA or a verified version tag instead of mutable tags (`@master`, `@latest`, `@v1`, etc.). -> -> ```yaml -> # Recommended: pin to a verified version -> - uses: aquasecurity/trivy-action@0.35.0 -> # Safer: pin to a commit SHA -> - uses: aquasecurity/trivy-action@ -> ``` -> -> - **Docker images**: Specify a particular version tag, or pin to an image digest (`@sha256:...`). -> -> ```bash -> docker run aquasecurity/trivy: image -> ``` -> -> - **Official channels**: Check the latest security advisories through the [GitHub Security Advisory](https://github.com/aquasecurity/trivy-action/security/advisories). -> -> This incident shows that if you do not pin versions when adopting an open source tool, you can be exposed to a supply chain attack at any time. Always specify the version of every external tool and verify its integrity before use. +{{% alert title="Security Warning — Trivy Supply Chain Attack Incident (2026)" color="danger" %}} +In March 2026, a supply chain attack occurred in which an attacker re-pointed existing release tags +of `aquasecurity/trivy` to inject malware. **The GitHub release v0.69.4 (3/19) and the DockerHub images +v0.69.5 and v0.69.6 (3/22) have been confirmed as compromised, so please stop using them.** + +To use Trivy safely, follow these principles. + +- **GitHub Actions**: Use a pinned commit SHA or a verified version tag instead of mutable tags (`@master`, `@latest`, `@v1`, etc.). + + ```yaml + # Recommended: pin to a verified version + - uses: aquasecurity/trivy-action@0.35.0 + # Safer: pin to a commit SHA + - uses: aquasecurity/trivy-action@ + ``` + +- **Docker images**: Specify a particular version tag, or pin to an image digest (`@sha256:...`). + + ```bash + docker run aquasecurity/trivy: image + ``` + +- **Official channels**: Check the latest security advisories through the [GitHub Security Advisory](https://github.com/aquasecurity/trivy-action/security/advisories). + +This incident shows that if you do not pin versions when adopting an open source tool, you can be exposed to a supply chain attack at any time. Always specify the version of every external tool and verify its integrity before use. +{{% /alert %}} ### Language-Specific Dedicated Plugins diff --git a/content/ko/guide/supply-chain/for-suppliers/creation-guide/_index.md b/content/ko/guide/supply-chain/for-suppliers/creation-guide/_index.md index be4e1958a..aa6196f02 100644 --- a/content/ko/guide/supply-chain/for-suppliers/creation-guide/_index.md +++ b/content/ko/guide/supply-chain/for-suppliers/creation-guide/_index.md @@ -40,26 +40,26 @@ Java, Python, Node.js, Go 등 다양한 언어 프로젝트를 자동 분석하 - 공식 문서: [https://github.com/anchore/syft](https://github.com/anchore/syft) - 권장 분석 대상: 빌드된 Docker 이미지, OCI 이미지, tar 파일 -> **경고 — 설치 디렉터리나 원시 파일 모음은 스캔하지 마십시오 (purl 누락으로 전량 반려)** -> -> `syft dir:` 모드로 패키지 매니저 메타데이터(`package.json`, `go.mod`, `*.jar`, RPM/DEB 패키지 DB 등)가 -> 없는 설치 디렉터리나 바이너리 모음을 스캔하면, Syft가 생태계(ecosystem)를 식별하지 못해 **purl이 비어 있는 -> SBOM**이 생성됩니다. SK텔레콤 시스템은 purl로 취약점을 매핑하므로, 이런 SBOM은 매칭이 전량 실패하여 반려됩니다. -> -> 실제로 한 공급사가 `syft dir:/root/nag_pkg`로 설치 디렉터리를 스캔해 제출한 SBOM은 261개 컴포넌트 중 purl이 -> 하나도 없어, 취약점 매칭 251건이 모두 실패했습니다. -> -> Syft는 다음 대상으로 실행하시기 바랍니다. -> -> ```bash -> # 권장: 빌드된 이미지 스캔 (purl과 생태계를 자동 식별) -> syft <이미지명>:<태그> -o cyclonedx-json=sbom.json -> -> # 비권장: 설치 디렉터리나 원시 파일 스캔 (purl 누락으로 반려) -> syft dir:/root/nag_pkg # 패키지 매니저 메타데이터가 없으면 purl이 0개가 됩니다 -> ``` -> -> 생성 직후 반드시 purl 개수를 확인하시기 바랍니다. 검증 방법은 [검증 체크리스트](../checklist/)를 참고하십시오. +{{% alert title="경고 — 설치 디렉터리나 원시 파일 모음은 스캔하지 마십시오 (purl 누락으로 전량 반려)" color="danger" %}} +`syft dir:` 모드로 패키지 매니저 메타데이터(`package.json`, `go.mod`, `*.jar`, RPM/DEB 패키지 DB 등)가 +없는 설치 디렉터리나 바이너리 모음을 스캔하면, Syft가 생태계(ecosystem)를 식별하지 못해 **purl이 비어 있는 +SBOM**이 생성됩니다. SK텔레콤 시스템은 purl로 취약점을 매핑하므로, 이런 SBOM은 매칭이 전량 실패하여 반려됩니다. + +실제로 한 공급사가 `syft dir:/root/nag_pkg`로 설치 디렉터리를 스캔해 제출한 SBOM은 261개 컴포넌트 중 purl이 +하나도 없어, 취약점 매칭 251건이 모두 실패했습니다. + +Syft는 다음 대상으로 실행하시기 바랍니다. + +```bash +# 권장: 빌드된 이미지 스캔 (purl과 생태계를 자동 식별) +syft <이미지명>:<태그> -o cyclonedx-json=sbom.json + +# 비권장: 설치 디렉터리나 원시 파일 스캔 (purl 누락으로 반려) +syft dir:/root/nag_pkg # 패키지 매니저 메타데이터가 없으면 purl이 0개가 됩니다 +``` + +생성 직후 반드시 purl 개수를 확인하시기 바랍니다. 검증 방법은 [검증 체크리스트](../checklist/)를 참고하십시오. +{{% /alert %}} ### Trivy (컨테이너 이미지 분석) @@ -68,32 +68,32 @@ Java, Python, Node.js, Go 등 다양한 언어 프로젝트를 자동 분석하 - 공식 문서: [https://aquasecurity.github.io/trivy/](https://aquasecurity.github.io/trivy/) - GitHub: [https://github.com/aquasecurity/trivy](https://github.com/aquasecurity/trivy) -> **보안 경고 — Trivy 공급망 공격 사례 (2026년)** -> -> 2026년 3월, 공격자가 `aquasecurity/trivy`의 기존 릴리즈 태그를 재지정하여 악성코드를 삽입하는 -> 공급망 공격이 발생하였습니다. **GitHub 릴리즈 v0.69.4(3/19) 및 DockerHub 이미지 -> v0.69.5·v0.69.6(3/22)이 오염된 것으로 확인되었으므로 사용을 중단하시기 바랍니다.** -> -> Trivy를 안전하게 사용하려면 다음 원칙을 따르시기 바랍니다. -> -> - **GitHub Actions**: 가변 태그(`@master`, `@latest`, `@v1` 등) 대신 고정된 Commit SHA 또는 검증된 버전 태그를 사용합니다. -> -> ```yaml -> # 권장: 검증된 버전 고정 -> - uses: aquasecurity/trivy-action@0.35.0 -> # 더 안전: Commit SHA 고정 -> - uses: aquasecurity/trivy-action@ -> ``` -> -> - **Docker 이미지**: 특정 버전 태그를 명시하거나 이미지 다이제스트(`@sha256:...`)로 고정합니다. -> -> ```bash -> docker run aquasecurity/trivy:<검증된-버전> image <대상-이미지> -> ``` -> -> - **공식 채널**: [GitHub Security Advisory](https://github.com/aquasecurity/trivy-action/security/advisories)를 통해 최신 보안 권고사항을 확인합니다. -> -> 이 사례는 오픈소스 도구를 도입할 때 버전을 고정하지 않으면 언제든 공급망 공격에 노출될 수 있음을 보여줍니다. 모든 외부 도구는 버전을 명시하고 무결성을 검증한 뒤 사용하시기 바랍니다. +{{% alert title="보안 경고 — Trivy 공급망 공격 사례 (2026년)" color="danger" %}} +2026년 3월, 공격자가 `aquasecurity/trivy`의 기존 릴리즈 태그를 재지정하여 악성코드를 삽입하는 +공급망 공격이 발생하였습니다. **GitHub 릴리즈 v0.69.4(3/19) 및 DockerHub 이미지 +v0.69.5·v0.69.6(3/22)이 오염된 것으로 확인되었으므로 사용을 중단하시기 바랍니다.** + +Trivy를 안전하게 사용하려면 다음 원칙을 따르시기 바랍니다. + +- **GitHub Actions**: 가변 태그(`@master`, `@latest`, `@v1` 등) 대신 고정된 Commit SHA 또는 검증된 버전 태그를 사용합니다. + + ```yaml + # 권장: 검증된 버전 고정 + - uses: aquasecurity/trivy-action@0.35.0 + # 더 안전: Commit SHA 고정 + - uses: aquasecurity/trivy-action@ + ``` + +- **Docker 이미지**: 특정 버전 태그를 명시하거나 이미지 다이제스트(`@sha256:...`)로 고정합니다. + + ```bash + docker run aquasecurity/trivy:<검증된-버전> image <대상-이미지> + ``` + +- **공식 채널**: [GitHub Security Advisory](https://github.com/aquasecurity/trivy-action/security/advisories)를 통해 최신 보안 권고사항을 확인합니다. + +이 사례는 오픈소스 도구를 도입할 때 버전을 고정하지 않으면 언제든 공급망 공격에 노출될 수 있음을 보여줍니다. 모든 외부 도구는 버전을 명시하고 무결성을 검증한 뒤 사용하시기 바랍니다. +{{% /alert %}} ### 언어별 전용 플러그인