Уязвимость в diff‑so‑fancy открывает возможность манипуляции терминалом и перехвата буфера обмена

vulnerability

Утилита diff‑so‑fancy, предназначенная для форматирования вывода утилиты сравнения файлов (diff), содержит уязвимость, связанную с недостаточной очисткой управляющих последовательностей терминала. Проблема зарегистрирована под идентификатором CVE‑2026‑50642 и охватывает все версии инструмента вплоть до 1.4.10 включительно.

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

Причина уязвимости - в том, что diff‑so‑fancy удаляет из выходных данных только ANSI‑последовательности SGR (Select Graphic Rendition), отвечающие за изменение цвета и стиля текста. Однако другие управляющие символы и escape‑последовательности, включая возврат каретки (\r), последовательности операционной системы (OSC) и управляющие последовательности CSI, пропускаются без обработки. Злоумышленник может внедрить вредоносные управляющие последовательности в имена файлов, метаданные diff или содержимое файлов, которые затем отображаются в терминале при просмотре diff.

Потенциальные последствия эксплуатации включают подмену отображаемого имени файла (спуфинг), очистку экрана терминала и внедрение данных в буфер обмена через поддерживаемые escape‑последовательности. Например, последовательность OSC 52 позволяет напрямую записать произвольный текст в системный буфер обмена. Если пользователь скопирует содержимое такого diff, в буфере может оказаться команда, которая при последующей вставке в терминал будет исполнена. Кроме того, возврат каретки (\r) может использоваться для перезаписи части выводимого текста, скрывая реальную информацию.

Уязвимость эксплуатируется локально: для атаки необходимо, чтобы жертва просматривала вредоносный diff в терминале с помощью diff‑so‑fancy. Атакующий может подложить такой diff в репозиторий кода, прикрепить к issue или отправить в pull‑request. При проверке кода разработчик, запустив diff‑so‑fancy, увидит изменённый вывод и может быть введён в заблуждение.

diff‑so‑fancy - популярное расширение для Git, используемое многими разработчиками для более наглядного отображения изменений. Оно часто применяется в конвейерах разработки и инструментах совместной работы над кодом. Уязвимость данного класса - встраивание управляющих последовательностей в строковое содержимое - известна для различных консольных утилит. Этот случай в очередной раз привлекает внимание к необходимости правильной санитизации выходных данных перед их выводом в терминал.

Разработчики рекомендовали обновить diff‑so‑fancy до версии, включающей коммит 9c81294. Временных мер защиты, помимо обновления, не предусмотрено. Пользователи, которые не могут обновиться, могут временно отказаться от использования diff‑so‑fancy в пользу стандартного вывода diff или других инструментов, проверяющих санитизацию вывода. Для системных администраторов важно отслеживать версии установленного ПО и своевременно применять патчи.

Уязвимость зафиксирована в открытом реестре CVE и описана как нарушение кодирования или экранирования вывода (CWE‑116). Она демонстрирует, что даже небольшие утилиты, входящие в цепочку разработки, могут стать вектором атаки при недостаточной обработке вводимых данных. Своевременное обновление инструментов разработки остаётся критически важной мерой защиты.

Ссылки

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