"매 빌드 파이프라인의 매 한 곳이 매 약점이다". 공격자는 직접 target 을 뚫는 대신 매 dependency, 매 build agent, 매 registry 를 오염시켜 매 downstream 수천 개 product 에 한 번에 침투. SolarWinds(2020) → xz-utils(2024) → npm event-stream / ua-parser-js / Polyfill.io 사슬을 거치며 매 SBOM·sigstore·SLSA L3+ 가 매 2026 표준이 되었다.
매 핵심
매 공격 표면
Source: 매 maintainer 계정 탈취, malicious commit (xz-utils Jia Tan).
Build: 매 CI runner 침투 (CodeCov bash uploader, GitHub Actions token 유출).
Package: 매 typosquatting (reqeusts), 매 dependency confusion (private name 을 public registry 에 선점).
Distribution: 매 mirror / CDN 변조 (Polyfill.io 2024).
Update channel: 매 auto-update 서버 hijack (SolarWinds Orion).
매 1차 방어
SBOM (CycloneDX / SPDX) — 매 component 추적, EU CRA 2026 mandate.
Sigstore cosign — 매 keyless signing, transparency log (Rekor).
SLSA L3+ — 매 hermetic, isolated, provenance-attested build.
Pinning + lockfile — 매 hash-pin (pip --require-hashes, npm ci).
매 응용
Open-source 의존성 audit pipeline.
내부 enterprise artifact registry hardening.
ML model supply chain (huggingface, model card 위조 방어).
# .npmrc — 매 internal scope 만 private registry 사용@acme:registry=https://npm.acme.internal//npm.acme.internal/:_authToken=${NPM_TOKEN}registry=https://registry.npmjs.org/
defdetect_anomaly(commits):# 매 갑자기 unsigned commit, 매 새로운 GPG key, 매 timezone 급변keys={c.gpg_keyforcincommitsifc.gpg_key}iflen(keys)>3orany(c.gpg_keyisNoneforcincommits[-10:]):alert("Maintainer key drift")
언제: SBOM 차이 분석, CVE → affected component mapping, supply chain risk 자동 triage.
언제 X: 매 cryptographic signature 검증 자체는 매 deterministic tool (cosign) 의 사용 — LLM 추론 X.
❌ 안티패턴
Latest tag 사용: image:latest — 매 mutable, 매 unverifiable. Pin digest.
Curl | bash: 매 unsigned script 실행 — checksum 최소.
Long-lived CI token: PAT 영구 보관 → OIDC short-lived 로 교체.
단일 maintainer OSS 채택 without audit: bus factor 1 = supply chain risk.