flawopen.com/Справочник/Обход проверки Cosign
Cosign GHSA-fx35-mq7g-6g98: обход проверки устаревшего bundle
Представьте пункт контроля, где проверяют билет и имя в официальном документе. Уязвимый путь обработки устаревшего bundle мог принять отдельный ключ за такой документ и пропустить проверку имени. Подпись могла быть математически верной, но требуемая идентичность workflow не была подтверждена.
Что сломалось при проверке 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.
Путь обхода проверки
Задание CI получает артефакт и устаревший JSON bundle
Артефакт и bundle могут поступить из release-workflow, кэша, зеркала или другого входа конвейера; задание должно считать оба недоверенными до завершения проверок политик.
Уязвимый парсер принимает ключ вместо сертификата
В затронутых версиях ошибка разбора X.509 запускала fallback на открытый ключ. Это задавало проверяющий подписи и пропускало политику сертификата при keyless-проверке.
Подпись проходит без подтверждения требуемой идентичности workflow
Проверка может завершиться успешно, не подтвердив заданные identity сертификата и OIDC issuer. Конвейер, проверяющий только код возврата, может использовать неавторизованный артефакт.
Зафиксируйте исправленную версию Cosign и идентичность подписанта
Уязвимый пример использует широкие regex и не задает доверенный workflow. Исправленный пример предполагает подпись указанным workflow GitHub Actions; замените identity на значение своего release-workflow. Зафиксируйте бинарный файл или контейнер Cosign по проверенным версии и digest. Команды проверяют артефакт и не создают и не показывают вредоносный bundle.
# 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$"
# 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"
Список исправлений и развертывания
- ✓Составьте список заданий CI, запускающих `cosign verify-blob` или `cosign verify-blob-attestation`; проверьте фактически используемую версию, включая загружаемые и контейнерные копии.
- ✓Обновите затронутые установки v2 до v2.6.5+, а v3 — до v3.1.3+; выбирайте поддерживаемый выпуск и фиксируйте его происхождение и digest.
- ✓Задайте точные `--certificate-identity` и `--certificate-oidc-issuer` ожидаемого workflow подписи. Не используйте `.*`, допускающий посторонние идентичности.
- ✓По возможности переведите устаревшие JSON bundle на стандартизованный формат Sigstore. В уведомлении указано, что его путь проверки не затронут; проверьте поведение конкретной версии при внедрении.
- ✓Свяжите происхождение артефакта и bundle, завершайте процесс ошибкой при любой проблеме проверки и разрешайте публикацию только после проверки в том же контролируемом задании.
- ✓Проверьте, публиковались или разворачивались ли артефакты после проверки уязвимыми версиями. Повторно проверьте сохраненные артефакты исправленной версией Cosign и нужной политикой identity; расследуйте расхождения.
- Sigstore Cosign security advisory GHSA-fx35-mq7g-6g98
- Cosign fix PR #5040 — removal of raw-key fallback
- Sigstore CI Quickstart — keyless signing and verification
- Cosign releases — patched versions