Обновление Git с устранением 8 уязвимостей

Опубликованы корректирующие выпуски распределённой системы управления исходными текстами Git 2.24.1, 2.23.1, 2.22.2, 2.21.1, 2.20.2, 2.19.3, 2.18.2, 2.17.3, 2.16.6, 2.15.4 и 2.14.62.24.1, в которых устранены уязвимости, позволяющие атакующему переписать произвольные пути в файловой системе, организовать удалённый запуск кода или перезаписать файлы в каталоге «.git/». Большинство проблем выявлены сотрудниками Microsoft Security Response Center, пять из восьми уязвимостей специфичны для платформы Windows.

  • CVE-2019-1348 — потоковая команда «feature export-marks=path»позволяет записать метки в произвольные каталоги, что может использоваться для перезаписи произвольных путей в ФС при выполнении операции «git fast-import» с непроверенными входными данными.
  • CVE-2019-1350 — некорректное экранирование аргументов командной строки могло привести к удалённому выполнению кода атакующего при рекурсивном клонировании с использованием URL ssh://. В частности, некорректно обрабатывалось экранирование аргументов, оканчивающихся на обратный слеш (например, «test «). В этом случае при обрамлении аргумента двойными кавычками, последняя кавычка оказывалась экранированной, что позволяло организовать подстановку своих опций в командной строке.
  • CVE-2019-1349 — при рекурсивном клонировании субмодулей («clone —recurse-submodules») в окружении Windows при определённых условиях можно было инициировать использование одного git-каталога дважды (.git, git~1, git~2 и git~N в NTFS распознаётся как один каталог, но эта ситуация проверялась только для git~1), что могло применяться для организации записи в каталог «.git». Для организации выполнения своего кода атакующий, например, может подставить свой скрипт через обработчик post-checkout в файле .git/config.
  • CVE-2019-1351 — обработчик буквенных имён дисков в путях Windows при трансляции путей типа «C:» был рассчитан только на замену однобуквенных латинских идентификаторов, но не учитывал возможность создания виртуальных дисков, назначаемых через «subst буква:путь». Такие пути обрабатывались не как абсолютные, а как относительные пути, что позволяло при клонировании вредоносного репозитория организовать запись в произвольный каталог за пределами рабочего дерева каталогов (например, при использовании цифр или unicode-символов в названии диска — «1:whatthehex.txt» или «ä:tschibät.sch»).
  • CVE-2019-1352 — при работе на платформе Windows применение альтернативных потоков данных в NTFS, создаваемых через добавление признака «:stream-name:stream-type» к имени файла, позволяло перезаписать файлы в каталоге «.git/» при клонировании вредоносного репозитория. Например, имя «.git::$INDEX_ALLOCATION» в NTFS обрабатывалось как корректная ссылка на каталог «.git».
  • CVE-2019-1353 — при использовании Git в окружении WSL (Windows Subsystem for Linux) при обращении к рабочему каталогу не применялась защита от манипуляции именами в NTFS (были возможны атаки через трансляцию имён FAT, например, к «.git» можно было обратиться через каталог «git~1»).
  • CVE-2019-1354возможность записи в каталог «.git/» на платформе Windows при клонировании вредоносных репозиториев, содержащих файлы с обратным слешем в имени (например, «ab»), который допустим в Unix/Linux, но воспринимается как часть пути в Windows.
  • CVE-2019-1387 — недостаточная проверка имён субмодулей могла использоваться для организации целевых атак, которые при рекурсивном клонировании потенциально могли привести к выполнению кода атакующего. Git не запрещал создавать каталог субмодуля в каталоге другого субмодуля, что в большинстве случаях лишь может привести к замешательству, но потенциально не исключает перезаписи содержимого другого модуля в процессе рекурсивного клонирования (например, каталоги субмодулей «hippo» и «hippo/hooks» размещаются как «.git/modules/hippo/» и «.git/modules/hippo/hooks/», а каталог hooks в hippo может отдельно использоваться для размещения запускаемых обработчиков.

Пользователям Windows рекомендуется срочно обновить версию Git, а до обновления воздержаться от клонирования непроверенных репозиториев. Если возможности срочно обновить версию Git пока нет, то для снижения риска атаки рекомендуется не запускать «git clone —recurse-submodules» и «git submodule update» с непроверенными репозиториями, не использовать «git fast-import» с непроверенными входными потоками и не клонировать репозитории в разделы на базе NTFS.

Для дополнительной защиты в новых выпусках также запрещено использование в .gitmodules конструкций в форме «submodule.{name}.update=!command». Для дистрибутивов проследить за выпуском обновлений пакетов можно на страницах Debian,Ubuntu, RHEL, SUSE/openSUSE, Fedora, Arch, FreeBSD.

Источник: http://www.opennet.ru/opennews/art.shtml?num=52010