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 мог принять отдельный ключ за такой документ и пропустить проверку имени. Подпись могла быть математически верной, но требуемая идентичность workflow не была подтверждена.

Граница: Разбор устаревших JSON bundle в командах проверки blob
Сбой: Поле `cert`, не разбираемое как сертификат, могло считаться открытым ключом без проверки цепочки X.509 и политики сертификата
Воздействие: Неавторизованный подписант мог добиться успешной проверки blob; влияние на целостность зависит от дальнейшего использования
Исправление: Обновить Cosign до v2.6.5 или v3.1.3 либо новее и зафиксировать ожидаемые identity сертификата и OIDC issuer

Что сломалось при проверке blob в Cosign

GHSA-fx35-mq7g-6g98 затрагивает `cosign verify-blob` и `cosign verify-blob-attestation`, когда keyless-проверка использует параметры identity и issuer (или их regex-варианты) вместе с устаревшим JSON `--bundle`. Если поле `cert` не разбиралось как сертификат X.509, уязвимые версии загружали его как открытый ключ. Это задавало внутренний проверяющий подписи и приводило к пропуску проверки цепочки сертификатов и `CheckCertificatePolicy`; ограничения identity и issuer не применялись. Подпись, верная для встроенного ключа, могла пройти. Ключ из bundle также мог заменить явно переданный `--key`. Согласно уведомлению, проверка образов контейнеров и стандартизованный protobuf-формат Sigstore bundle не затронуты. Известной CVE нет; upstream-уведомление указывает высокий уровень, CVSS 7,4, CWE-295 и CWE-347.

Путь обхода проверки

1

Задание CI получает артефакт и устаревший JSON bundle

Артефакт и bundle могут поступить из release-workflow, кэша, зеркала или другого входа конвейера; задание должно считать оба недоверенными до завершения проверок политик.

2

Уязвимый парсер принимает ключ вместо сертификата

В затронутых версиях ошибка разбора X.509 запускала fallback на открытый ключ. Это задавало проверяющий подписи и пропускало политику сертификата при keyless-проверке.

3

Подпись проходит без подтверждения требуемой идентичности workflow

Проверка может завершиться успешно, не подтвердив заданные identity сертификата и OIDC issuer. Конвейер, проверяющий только код возврата, может использовать неавторизованный артефакт.

Зафиксируйте исправленную версию Cosign и идентичность подписанта

Уязвимый пример использует широкие regex и не задает доверенный workflow. Исправленный пример предполагает подпись указанным workflow GitHub Actions; замените identity на значение своего release-workflow. Зафиксируйте бинарный файл или контейнер Cosign по проверенным версии и digest. Команды проверяют артефакт и не создают и не показывают вредоносный 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: безопасный ввод