← На главную

Composer сливает GitHub-токены из-за ошибки в IOKit

13.05.2026 11:26 · hackernews

Разработчики платформы для управления пакетами Composer обнаружили критическую уязвимость, из-за которой полный текст секретных токенов GitHub может попадать в логи. Проблема возникла при проверке новых форматов токенов действий GitHub. Теперь при попытке использования токена, содержащего дефис, система отклоняет его, но случайно выводит исходный текст ошибки в stderr. Это приводит к утечке данных без дополнительных настроек пользователя, так как многие популярные Actions, например shivammathur/setup-php, автоматически регистрируют токены GITHUB_TOKEN в глобальной конфигурации Composer. Новые токены в формате ghs_, которые уже использует GitHub Actions и создает действия create-github-app-token, обязательно содержат дефис из-за использования URL-safe Base64, что нарушает старый регулярный выражение ^[.A-Za-z0-9]+$ в коде Composer. Уязвимость находится в файле src/Composer/IO/BaseIO.php в методе loadConfiguration, где строка с токеном интерполируется в сообщение об ошибке UnexpectedValueException. Когда это исключение всплывает вверх и его обрабатывает Symfony Console, текст уходит на стандартный вывод ошибки. Любая среда, которая перехватывает stderr, такие как системы CI или службы мониторинга, сразу получает чистый токен. Даже встроенный механизм маскировки секретов GitHub не срабатывает, так как текст сообщения может переноситься на несколько строк или содержать ANSI-коды, из-за чего маскировщик не видит точное совпадение. Хотя токены действий истекают сразу после завершения задачи или максимум через 6 часов на хостах GitHub, приложениям и долгоживущим токерам угроз грозит больше. Проблема коснется не всех репозиториев сразу, так как запуск новых форматов идет постепенно, но уязвимость касается любого токена, не прошедшего валидацию по регулярному выражению. Разработчикам предстоит оперативно обновить библиотеку Composer, чтобы исправить логику проверки и перестать выводить ошибочные данные в открытые логи.

Читать оригинал →