13 мая 2026 года команда Composer выпустила исправления для трёх веток: 2.9.8, 2.2.28 LTS и 1.10.28. В релизе 2.9.8 указано: исправлена проверка GitHub-токенов и их раскрытие в ошибках, связанное с advisory GHSA-f9f8-rm49-7jv2 и CVE-2026-45793.
Composer проверял GitHub-токен регулярным выражением. Старый шаблон разрешал буквы, цифры, подчёркивание и точку, но не разрешал дефис. GitHub начал переводить installation tokens на новый формат ghs_APPID_JWT, где JWT-кодировка может содержать этот знак. Composer считал такой токен «невалидным» и формировал исключение с полным значением токена внутри сообщения об ошибке. Symfony Console печатал это сообщение в stderr, а GitHub Actions сохранял stderr в логах job.
В advisory указано, что популярные GitHub Actions, включая shivammathur/setup-php, могли автоматически регистрировать GITHUB_TOKEN в глобальном auth.json Composer. После этого любой запуск Composer-команды на затронутой версии и с новым форматом токена мог закончиться публикацией секрета в логах сборки.
GitHub ещё 24 апреля 2026 года предупредил о новом формате GitHub App installation tokens. Переход должен был начаться 27 апреля и быть постепенным. Новые токены должны были стать длиннее — примерно до 520 символов — и перейти к форме ghs_APPID_JWT. GitHub отдельно попросил разработчиков считать токены «непрозрачными строками»: не проверять их по длине, не завязываться на конкретный набор символов и не использовать регулярные выражения вроде ghs_[A-Za-z0-9]{36}. Новый формат ломал локальную проверку в инструменте сборки. Ошибка получилась в том, как сторонний инструмент обработал непривычный для него токен.
GitHub после обнаружения проблемы временно откатил изменение формата. Обновление Packagist от 13 мая 2026 года в 14:30 UTC уточняет: срочно отключать GitHub Actions уже не требуется, но у экосистемы PHP есть всего несколько дней на обновление Composer перед повторным запуском нового формата. В следующем апдейте от 14 мая указано, что GitHub намерен возобновить развёртывание 18 мая 2026 года после 14:00 UTC.
GitHub advisory указывает уязвимые диапазоны:
>= 2.3.0, < 2.9.8
>= 2.0.0, < 2.2.28
>= 1.0, < 1.10.28
Исправленные версии: 2.9.8, 2.2.28 и 1.10.28. Уязвимость получила оценку High, CVSS 7.5, категория CWE-200 — раскрытие чувствительной информации.
Исправление в Composer делает две вещи. Первое — сообщение об ошибке больше не включает сам отклонённый токен. Второе — допустимый набор символов расширен, чтобы принимать новый формат GitHub installation tokens с дефисом. Даже если похожая проверка сработает для другого токена в будущем, базовый «примитив утечки» через текст исключения теперь закрыт.
Публичный Packagist не затронут: сервис не использует GitHub App и не прогоняет Composer с GitHub App installation tokens. Private Packagist уже применил исправление и проверил логи обновлений пакетов; опубликованных токенов там не нашли.
Командам рекомендуют проверить версию Composer в CI. Особенно в workflow, где Composer установлен заранее в образе, закреплён в setup-php, лежит в кэше или скачивается как composer.phar.
composer --version
composer self-update
composer self-update --2.2
Для legacy-ветки:
composer self-update 1.10.28
А еще изучить логи GitHub Actions за период после начала выката нового формата токенов, то есть с 27 апреля 2026 года. Приоритет — упавшие job, где запускались composer install, composer update, composer validate, composer require или любые команды, читающие Composer auth config.
Искать стоит строки вида: Your github oauth token for github.com contains invalid characters:
Также рекомендуют проверить права GITHUB_TOKEN в workflow. Чем меньше прав у токена, тем меньше ущерб от случайной публикации. Для многих сборок достаточно явно задать чтение содержимого:
permissions:
contents: read
Для job, где нужна публикация, права лучше выдавать точечно, а не оставлять широкие значения по умолчанию.
Есть новость? Станьте автором.
Мы сотрудничаем с независимыми исследователями и специалистами по кибербезопасности. Отправьте нам новость или предложите статью на рассмотрение редакции.