Обход пути в Composer позволяет менять права доступа на файлы вне каталога пакета

composer

В Composer, менеджере зависимостей для PHP, обнаружена уязвимость обхода пути. Она позволяет вредоносному пакету изменять права доступа на файлы вне собственного каталога. Проблема затрагивает версии с 2.3.0 по 2.10.2 и с 1.0 по 2.2.29. Эксплуатация требует, чтобы пользователь установил такой пакет. На общих серверах и в сборочных системах это грозит раскрытием чувствительных файлов.

Уязвимость CVE-2026-59944

Уязвимость получила идентификаторы CVE-2026-59944 и GHSA-96h3-5x6v-m776. Разработчики оценили ее серьезность как умеренную, вектор CVSS v3.1 (системы оценки критичности уязвимостей). Атака требует локального доступа и участия пользователя. Она способна значительно повлиять на конфиденциальность. Влияние на целостность ниже, доступность не нарушается.

Причина кроется в обработке бинарных файлов, объявляемых в составе устанавливаемых пакетов. Composer позволяет пакету указать исполняемый файл для регистрации в общем каталоге бинарных файлов проекта. Этот каталог содержит команды для запуска после установки зависимостей. Composer проверяет путь к такому бинарному файлу недостаточно строго.

Вредоносный пакет может указать путь, выходящий за пределы собственного каталога. Для этого применяются последовательности ".." или символические ссылки. Символическая ссылка - специальный файл, ведущий на другой файл или каталог. Если объявленный бинарный файл является ссылкой на внешний объект, Composer может принять его за легитимный и изменить права на целевой файл.

В процессе установки Composer меняет права на указанный бинарный файл и делает его исполняемым. Если жертва использует вредоносный пакет, целевой файл может оказаться системным или пользовательским файлом с ограниченным доступом. Например, это может быть файл конфигурации или ключ, доступный только владельцу. После обработки он становится читаемым и исполняемым для всех пользователей.

Прямой удаленной эксплуатации нет. Злоумышленник не получает возможность выполнить код или автоматически выгрузить данные. Однако на многопользовательских хостингах и в инфраструктурах с общими аккаунтами такой файл могут прочитать другие локальные пользователи. Если на сервере работают несколько проектов или клиентов, раскрытие данных становится реальным сценарием.

Новая уязвимость обходит ранее принятую меру защиты. Предыдущее исправление отвергало только буквальные последовательности ".." в объявленных путях бинарных файлов. Проверка выполнялась лишь на одном этапе разрешения зависимостей. Когда Composer восстанавливает недостающие бинарные файлы из метаданных об установленных зависимостях или следует символической ссылке за пределы каталога пакета, проверка не срабатывает.

Наибольший риск возникает при повторном использовании каталога с зависимостями, созданного не в ходе текущей доверенной установки. Такие ситуации типичны для конвейеров непрерывной интеграции (CI), где кэши и артефакты сборки переиспользуются для ускорения. Каталог с зависимостями можно восстановить из общего кэша, скопировать с предыдущего этапа сборки контейнера, унаследовать от старой версии Composer или изменить в процессе с низким уровнем доверия. Если в нем содержатся подделанные метаданные или вредоносная символическая ссылка, при запуске стандартной команды установки Composer молча изменит права доступа на указанный файл.

Реалистичный сценарий атаки выглядит так. В конвейере сборки или развертывания используется каталог с зависимостями, созданный где-то еще. Внутри находится пакет с измененным файлом метаданных или символической ссылкой на внешний файл. Когда система запускает установку зависимостей, Composer обрабатывает объявленные бинарные файлы. Он изменяет права на целевой файл и регистрирует команду. Атакующему не требуется связываться с жертвой напрямую. Достаточно, чтобы процесс сборки выполнил стандартную команду.

Composer изменяет права доступа с привилегиями пользователя или процесса, запустившего установку. Если сборка выполняется от имени выделенного аккаунта CI, развертывания или хостинга, именно этот аккаунт станет источником изменения. Уязвимость особенно опасна в средах, где один аккаунт имеет доступ к нескольким проектам. Существует также риск горизонтального перемещения внутри инфраструктуры.

Исправление доступно в Composer 2.10.3 и 2.2.30. Теперь перед изменением прав на бинарный файл программа проверяет, находится ли он внутри каталога устанавливаемого пакета. Если путь выходит за пределы, Composer пропускает файл и выводит предупреждение. Обновляться нужно немедленно, поскольку это единственный полный способ защиты.

Дополнительно советуют не восстанавливать недоверенные каталоги с зависимостями. Кэши CI стоит изолировать по проектам и уровням доверия. При производственных сборках лучше генерировать зависимости заново из доверенных файлов блокировки. Файл блокировки фиксирует точные версии и контрольные суммы зависимостей. Повторная установка из него снижает риск подмены. Если в происхождении каталога с зависимостями нет уверенности, безопаснее удалить его и выполнить чистую установку из проверенного источника.

Уязвимость подчеркивает важность контроля над артефактами сборки и кэшами. Они могут храниться дольше, чем исходный код. Даже небольшой недостаток в проверке путей при локальной установке способен привести к раскрытию данных в среде с несколькими пользователями. Установка исправленной версии Composer решает проблему. Без аккуратного обращения с переиспользуемыми каталогами подобные риски возникают и в других инструментах.

Ссылки

Комментарии: 0