Угрозы

Composer срочно обновили из-за утечки GitHub-токенов в логах Actions

Маша Даровская
By Маша Даровская , IT-редактор и автор
Composer срочно обновили из-за утечки GitHub-токенов в логах Actions
Обложка © Anonhaven

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

Есть новость? Станьте автором.

Мы сотрудничаем с независимыми исследователями и специалистами по кибербезопасности. Отправьте нам новость или предложите статью на рассмотрение редакции.

Вопросы по теме

Какая уязвимость?
CVE-2026-45793, advisory GHSA-f9f8-rm49-7jv2, оценка High, CVSS 7.5.
Какие версии Composer уязвимы?
>= 2.3.0, < 2.9.8, >= 2.0.0, < 2.2.28, >= 1.0, < 1.10.28.
Какие версии безопасны?
2.9.8, 2.2.28 LTS и 1.10.28.
Что случилось?
Composer мог вывести полный GitHub Actions GITHUB_TOKEN или GitHub App installation token в лог CI, если токен не проходил старую проверку формата.