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 は証明されていません。

境界: 2 つの 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 の解析失敗を受けて公開鍵へのフォールバックが発生しました。署名検証器が設定され、keyless 検証の証明書ポリシーが省略されました。

3

必要なワークフロー ID を証明せずに署名検証が通る

固定した証明書 ID と OIDC Issuer を確認せずに検証が成功する可能性があります。終了コードだけを見るパイプラインは、未承認の成果物を使うおそれがあります。

修正済み Cosign と署名者 ID を固定する

両方の例で同じ GitHub Actions の正確な ID と OIDC Issuer を固定しています。脆弱なコマンドは影響を受ける Cosign を使用し、旧形式 JSON Bundle では検証を回避される可能性がありました。強化例は修正版と正規表現ではなく完全一致のオプションを使います。CI では確認済みのバージョンと digest で 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のスクリプトインジェクション対策