한 번의 명령으로 JS/TS 공급망 보안을 해결하기 위해 forgeseal을 만든 방법
Source: Dev.to

문제
EU 사이버 복원력 법안(EU Cyber Resilience Act)이 2026년 9월에 발효되며, 유럽에 배포되는 모든 소프트웨어 제품에 대해 소프트웨어 자재 명세서(SBOM)를 요구합니다. JavaScript와 TypeScript 팀에게 공급망 보안 툴체인은 조각조각 나뉘어 있습니다: SBOM 생성, 아티팩트 서명, 출처 증명서, 취약점 관리 각각을 위한 별도 도구가 필요합니다. 각 도구는 자체 설정과 전제를 가지고 있으며, 많은 도구가 다양한 lockfile 형식(npm v2/v3, Yarn classic, Yarn Berry v2‑v4, pnpm v6/v9, Bun)을 처리하는 데 어려움을 겪습니다.
forgeseal가 하는 일
forgeseal은 전체 공급망 보안 워크플로를 처리하는 단일 Go 바이너리입니다:
forgeseal pipeline --dir ./my-project --output-dir ./artifacts --vex-triage이 한 줄 명령은:
- Lockfile을 감지하고 파싱합니다(6가지 JS/TS 형식 모두 지원)
- CycloneDX SBOM을 생성하고 올바른 PURL, 무결성 해시, 의존성 그래프를 포함합니다
- Sigstore 키‑없는 서명으로 SBOM에 서명합니다(GPG 키 불필요)
- CI 환경 메타데이터가 포함된 SLSA v1 출처 증명서를 생성합니다
- OSV.dev를 조회하고 취약점 트리아지 스텁이 포함된 VEX 문서를 생성합니다
시작하기
# Install
go install github.com/sn45/forgeseal/cmd/forgeseal@latest
# Generate an SBOM
forgeseal sbom --dir ./my-project
# Full pipeline
forgeseal pipeline --dir . --output-dir ./forgeseal-output --vex-triage각 서브‑커맨드는 독립적으로 사용할 수 있습니다:
- SBOM만:
forgeseal sbom - 서명만:
forgeseal sign - VEX 트리아지만:
forgeseal vex triage
Lockfile 파서 도전 과제
여섯 가지 lockfile 형식을 모두 정확히 파싱하는 것이 가장 흥미로운 엔지니어링 과제였습니다. 주요 포인트:
- npm –
package-lock.json의 서로 다른 키 구조를 가진 v2와 v3 스키마를 모두 처리합니다. - Yarn Classic – 상태 머신 파서를 사용해 커스텀 텍스트 형식을 파싱합니다.
- Yarn Berry – 자체 규칙을 가진 YAML‑유사 파일을 해석하고, 해시와 해결 정보를 추출합니다.
- pnpm v9 –
packages와snapshots맵에 분산된 데이터를 교차 참조합니다. - Bun – 주석이 포함된 JSON(JSONC)을 처리하며, base64 해시 안에
//가 포함돼 주석처럼 보이는 경우도 올바르게 인식합니다.
검증은 10개의 주요 오픈소스 프로젝트(예: socket.io, jest, storybook, vue, astro, nuxt, svelte, next.js, elysia, hono)를 대상으로 수행했으며, 총 15 000개 이상의 컴포넌트를 모든 형식에 걸쳐 테스트했습니다. PURL, 의존성 엣지, 무결성 해시 모두 원본 lockfile과 일치했습니다.
CI 통합
forgeseal은 GitHub Action으로도 제공됩니다:
- uses: sn45/forgeseal@v1
with:
command: pipeline
dir: '.'
sign: 'true'
attest: 'true'
vex-triage: 'true'GitHub Actions에서는 Sigstore 서명을 위한 OIDC 토큰이 자동으로 획득됩니다; 워크플로에 permissions: id-token: write를 설정하기만 하면 됩니다.
앞으로의 계획
핵심 파이프라인은 안정화되었습니다. 향후 추가될 기능은 다음과 같습니다:
- 컨테이너 이미지 SBOM 지원
- 보다 풍부한 취약점 데이터를 위한 Grype/Trivy 연동
- CRA 요구사항에 맞춰 프로젝트의 공급망 보안 상태를 평가하는
forgeseal audit커맨드
리포지토리:
Apache 2.0 라이선스. 기여 환영합니다.