FlawOpen

flawopen.com/참고자료/Cosign 검증 우회

Cosign GHSA-fx35-mq7g-6g98: 레거시 Bundle 검증 우회

높은 심각도 · CVSS 7.4 CWE-295: Improper Certificate Validation; CWE-347: Improper Verification of Cryptographic Signature 소프트웨어 공급망
쉽게 보기 — 티켓과 신원 확인

입장할 때 티켓과 공식 신분증의 이름을 모두 확인하는 곳을 떠올려 보세요. 취약한 레거시 Bundle 경로는 별도의 키를 신분증으로 잘못 취급해 이름 확인 없이 티켓을 받아들일 수 있었습니다. 서명이 수학적으로 유효해도 필요한 워크플로 ID가 입증된 것은 아닙니다.

경계: 두 Blob 검증 명령에서 레거시 JSON Bundle을 파싱하는 과정
실패: 인증서로 파싱되지 않는 `cert` 값을 공개 키로 취급해 X.509 체인과 인증서 정책 검증을 건너뛸 수 있었습니다
영향: 권한 없는 서명자가 제공된 Blob 검증을 성공시킬 수 있었습니다. 무결성 영향은 후속 사용에 따라 달라집니다
조치: Cosign v2.6.5 또는 v3.1.3 이상으로 업데이트하고 예상 인증서 ID 및 OIDC issuer를 고정하세요

Cosign Blob 검증에서 실패한 부분

GHSA-fx35-mq7g-6g98은 레거시 JSON `--bundle`과 함께 ID 및 issuer 플래그(또는 정규식 변형)를 사용해 keyless 검증하는 `cosign verify-blob`, `cosign verify-blob-attestation`에 영향을 줍니다. Bundle의 `cert` 필드를 X.509 인증서로 파싱하지 못하면 영향을 받는 버전은 이를 공개 키로 다시 읽었습니다. 이로 인해 내부 서명 검증기가 설정되고 후속 경로에서 인증서 체인 검증과 `CheckCertificatePolicy`가 생략되어 ID 및 issuer 제약이 적용되지 않았습니다. 내장된 키에 대한 서명이 유효하면 검증이 성공할 수 있었습니다. Bundle 키가 명시적으로 지정한 `--key`를 덮어쓸 수도 있었습니다. 공지에 따르면 컨테이너 이미지 검증과 표준 Sigstore protobuf Bundle 경로는 영향을 받지 않습니다. 알려진 CVE는 없으며 상위 공지는 High, CVSS 7.4, CWE-295, CWE-347로 분류합니다.

검증 우회 흐름

1

CI 작업이 아티팩트와 레거시 JSON Bundle을 받음

아티팩트와 Bundle은 릴리스 워크플로, 캐시, 미러 또는 다른 파이프라인 입력에서 올 수 있습니다. 정책 검사가 끝날 때까지 둘 다 신뢰할 수 없는 입력으로 취급해야 합니다.

2

취약한 파서가 인증서가 있어야 할 자리에 키를 허용함

영향을 받는 버전은 X.509 파싱 실패 뒤 공개 키 fallback을 실행했습니다. 그 결과 서명 검증기가 설정되고 keyless 인증서 정책 검사가 생략됐습니다.

3

필요한 워크플로 ID를 증명하지 않고 서명 검증이 통과함

고정된 인증서 ID와 OIDC issuer를 확인하지 않고도 검증이 성공할 수 있습니다. 종료 코드만 확인하는 파이프라인은 승인되지 않은 아티팩트를 사용할 수 있습니다.

수정된 Cosign 버전과 서명자 ID를 고정하세요

두 예시는 동일한 정확한 GitHub Actions ID와 OIDC issuer를 고정합니다. 취약한 명령은 영향받는 Cosign 버전을 사용하며 레거시 JSON Bundle에서 파서가 검증을 우회할 수 있었습니다. 강화 명령은 수정 버전과 정규식 대신 정확한 값 옵션을 사용합니다. 검토한 버전과 digest로 CI의 Cosign을 고정하세요. 이 명령은 아티팩트를 검증하며 악성 Bundle을 만들거나 시연하지 않습니다.

CI 정책 — 영향받는 버전 패턴미수정 결함
# Risk: affected versions accept legacy JSON bundles in this path
# cosign v2.6.4 or earlier, or v3.1.2 or earlier
cosign verify-blob release.tar.gz \
  --bundle release.sigstore.json \
  --certificate-identity-regexp "^https://github\.com/acme/service/\.github/workflows/release\.yml@refs/heads/main$" \
  --certificate-oidc-issuer-regexp "^https://token\.actions\.githubusercontent\.com$"
CI 정책 — 수정 버전수정됨
# Require Cosign v2.6.5+ or v3.1.3+ in the pinned CI toolchain
cosign verify-blob release.tar.gz \
  --bundle release.sigstore.json \
  --certificate-identity "https://github.com/acme/service/.github/workflows/release.yml@refs/heads/main" \
  --certificate-oidc-issuer "https://token.actions.githubusercontent.com"

수정 및 배포 체크리스트

Browse related vulnerability and supply-chain analysis:Security directory →
함께 보기 Dependency Confusion: 위험과 방어 Docker 소켓 노출: 위험과 방어 GitHub Actions 스크립트 인젝션과 안전한 입력 처리