Опубликованы корректирующие выпуски распределённой системы управления исходными текстами Git 2.39.1, 2.38.3, 2.37.5, 2.36.4, 2.35.6, 2.34.6, 2.33.6, 2.32.5, 2.31.6 и 2.30.7, в которых устранены две уязвимости, позволяющие организовать выполнение своего кода на системе пользователя при использовании команды “git archive” и работе с не заслуживающими доверия внешними репозиториями. Уязвимости вызваны ошибками в коде форматирования коммитов и разборе файла “.gitattributes”, которые при обработке внешних репозиториев могут привести к записи в область памяти за пределами кучи и чтению произвольных данных из памяти.
Обе уязвимости были выявлены в ходе аудита безопасности кодовой базы Git, проведённого компанией X41 по заказу фонда OSTIF (Open Source Technology Improvement Fund), созданного с целью усиления защищённости открытых проектов. Кроме двух рассматриваемых ниже критических проблем в ходе аудита также была найдена одна опасная уязвимость, одна уязвимость средней степени опасности и четыре неопасные проблемы. Также было дано 27 рекомендаций по повышению безопасности кодовой базы.
- CVE-2022-41903: целочисленное переполнение в коде форматирования информации о коммитах, возникающее при обработке больших значений смещения в операторах заполнения, таких как “%(“, “%>>(” и “%>Уязвимость проявляется как при прямом вызове со специально оформленными параметрами форматирования (например, при запуске “git log –format=…”), так и при косвенном применении форматирования во время выполнения команды “git archive” в репозитории, подконтрольном атакующему. Во втором случае модификаторы форматирования задаются через параметр export-subst в файле “.gitattributes”, который может быть размещён атакующим в своём репозитории. Проблема может использоваться для чтения и записи произвольных областей в куче и привести к выполнению кода злоумышленника при работе с непроверенными репозиториями.
- CVE-2022-23521: целочисленные переполнения при разборе содержимого файлов “.gitattributes” в репозитории, проявляющиеся при обработке очень большого числа шаблонов файловых путей или большого числа атрибутов с одним шаблоном, а также при разборе очень больших имён атрибутов. Проблема может использоваться для чтения и записи произвольных областей в куче и привести к выполнению кода злоумышленника при работе с непроверенным репозиторием, в котором атакующий может разместить специально оформленный файл .gitattributes и обеспечить его попадание в индекс.
Публикацию обновлений пакетов в дистрибутивах можно проследить на страницах: Debian, Ubuntu, Gentoo, RHEL, SUSE, Arch, FreeBSD, NetBSD. Для снижения риска проведения атаки при невозможности своевременно установить обновление рекомендуется воздержаться от работы с незаслуживающими доверия репозиториями и от использования команды “git archive”. Важно помнить, что команда “git archive” может запускаться неявно, например, из git daemon. Для отключения запуска “git archive” в git daemon следует изменить параметр daemon.uploadArch командой “git config –global daemon.uploadArch false”.
Дополнительно можно отметить ещё одну уязвимость (CVE-2022-41953) в продукте Git for Windows, позволяющую организовать выполнение кода при клонировании через графический интерфейс непроверенных внешних репозиториев. Проблема вызвана тем, что Git GUI для Windows после операции “checkout” автоматически запускает некоторые команды пост-обработки, такие как выполнение программы spell-check для проверки правописания, при том, что файл spell-check мог быть запущен при размещении в клонированном рабочем дереве (атака сводится к добавлению spell-check в рабочее дерево репозитория).