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, где нужна публикация, права лучше выдавать точечно, а не оставлять широкие значения по умолчанию.
Есть новость? Станьте автором.
Мы сотрудничаем с независимыми исследователями и специалистами по кибербезопасности. Отправьте нам новость или предложите статью на рассмотрение редакции.
Вопросы по теме
Какая уязвимость?
Какие версии Composer уязвимы?
Какие версии безопасны?
Что случилось?
Читайте также
Microsoft дала временную защиту от уязвимости YellowKey — обхода BitLocker через среду восстановления Windows
В Avada Builder закрыли две уязвимости: под риском около миллиона WordPress-сайтов