Уязвимость в GNU Sed: гонка символических ссылок ведёт к перезаписи файлов

GNU InetUtils

Информационная безопасность - это не только защита от внешних атак, но и контроль над фундаментальными утилитами, на которых построена работа тысяч систем. Обнаруженная критическая уязвимость в GNU sed, классическом текстовом редакторе, который десятилетиями является неотъемлемой частью практически всех дистрибутивов Linux и macOS, ярко иллюстрирует этот тезис. Проблема, получившая идентификатор CVE-2026-5958, затрагивает сценарий, который может быть частью автоматизированных скриптов обработки логов, конфигураций или данных. Между тем, её эксплуатация позволяет злоумышленнику добиться перезаписи произвольных файлов с правами пользователя, запустившего sed, что открывает путь к эскалации привилегий или нарушению целостности критически важных данных.

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

Суть уязвимости заключается в возникновении состояния гонки - классической проблемы синхронизации, когда результат выполнения программы зависит от последовательности или времени выполнения параллельных операций. Конкретно ошибка проявляется при вызове утилиты "sed" с двумя ключами одновременно: "-i" (прямое редактирование файла "на месте", без создания временной копии) и "--follow-symlinks" (следование по символическим ссылкам). В этом случае внутренняя функция "open_next_file()" выполняет две отдельные, неатомарные операции с файловой системой над одним и тем же путём. Сначала она разрешает символическую ссылку до её конечной цели и сохраняет этот разрешённый путь, чтобы определить, куда будет записан результат. Затем, в рамках отдельного системного вызова, она открывает для чтения исходный путь - то есть саму символическую ссылку, а не разрешённый целевой файл. Именно между этими двумя вызовами и возникает опасное временное окно.

Если злоумышленник успеет в этот краткий миг атомарно заменить символическую ссылку на другую цель, поведение "sed" станет непредсказуемым и опасным. Программа прочитает содержимое из новой, выбранной атакующим цели ссылки, но результат обработки запишет по пути, который был сохранён на первом шаге - то есть по изначальному разрешённому пути. В результате это может привести к произвольной перезаписи файла содержимым, контролируемым злоумышленником. Контекст выполнения при этом сохраняется: если скрипт с "sed" запущен с повышенными привилегиями (например, из планировщика задач "cron" от имени root), атакующий потенциально может перезаписать системные файлы, такие как "/etc/passwd", "sudoers" или критичные конфигурации служб.

С технической точки зрения, данная уязвимость является типичным примером Time-of-check to time-of-use (TOCTOU) - ситуации, когда состояние ресурса проверяется и используется в разные моменты времени, и между этими моментами оно может быть изменено. В данном случае "проверкой" является разрешение пути симлинка, а "использованием" - открытие файла для чтения. Атака требует от злоумышленника высокой точности синхронизации, однако в условиях, когда "sed" вызывается в циклах или обрабатывает множество файлов, вероятность успешной эксплуатации возрастает. Особенно уязвимыми могут оказаться фоновые процессы и демоны, которые регулярно обрабатывают файлы в общих или временных каталогах.

Последствия успешной эксплуатации CVE-2026-5958 напрямую зависят от контекста использования утилиты. В сценариях автоматического администрирования это может привести к нарушению целостности систем, подмене конфигураций, установке бэкдоров или повреждению данных. Для обычных пользователей риск ниже, но он существует в многопользовательских системах или при запуске скриптов из ненадёжных источников. Разработчики проекта GNU оперативно отреагировали на сообщение об уязвимости и устранили её в версии sed 4.10. Исправление заключается в устранении состояния гонки, обеспечив атомарность операций с симлинками при использовании ключа "--follow-symlinks".

В качестве мер защиты системным администраторам и DevOps-инженерам рекомендуется, в первую очередь, обновить пакет GNU sed до версии 4.10 или выше во всех используемых дистрибутивах, как только обновление станет доступно в репозиториях. Кроме того, стоит пересмотреть автоматизированные скрипты и задания, использующие "sed" с ключами "-i" и "--follow-symlinks" для обработки файлов в каталогах с нестрогими правами доступа или там, где возможно присутствие других пользователей. Временным решением может быть отказ от совместного использования этих ключей в пользу альтернативных методов обработки данных, исключающих прямое редактирование файлов через симлинки. Это происшествие служит очередным напоминанием о том, что даже проверенные временем инструменты требуют постоянного внимания к безопасности, а автоматизация рутинных задач должна проектироваться с учётом не только удобства, но и устойчивости к подобным тонким атакам на целостность данных.

Ссылки

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