Пять уязвимостей в Git, среди которых одна критическая и две опасные

Опубликованы корректирующие выпуски распределённой системы управления исходными текстами Git 2.45.1, 2.44.1, 2.43.4, 2.42.2, 2.41.1, 2.40.2 и 2.39.4, в которых устранены пять уязвимостей. Наиболее серьёзная уязвимость (CVE-2024-32002), которой присвоен критический уровень опасности, позволяет добиться выполнения кода злоумышленника при выполнении клонирования командой “git clone” репозитория, подконтрольного атакующему.

Уязвимость проявляется только в файловых системах, не различающих регистр символов и поддерживающих символические ссылки, например, используемых по умолчанию в Windows и macOS. Эксплуатация осуществляется через создание в субмодуле каталога и символической ссылки, отличающихся только регистром символов, что позволяет добиться записи файлов в каталог .git/, вместо рабочего каталога субмодуля. Получив возможность записи в .git/ атакующий может переопределить hook-вызовы через .git/hooks и добиться выполнения произвольного кода во время выполнения операции “git clone”.

Другие уязвимости:

  • CVE-2024-32004 – атакующий в многопользовательской системе может подготовить специально оформленный локальный репозиторий и добиться выполнения кода при его клонировании. В частности, атакующий может создать локальный репозиторий, выглядящий как частичный клон, в котором отсутствует определённый объект. Клонирование этого репозитория приведёт к выполнению кода с правами пользователя, выполняющего операцию клонирования.
  • CVE-2024-32465 – клонирование из zip-архивов, содержащих полный git-репозиторий, включающий hook-и в каталоге .git/, приведёт к выполнению этих hook-ов.
  • CVE-2024-32020 – создание локальных клонов репозитория на том же диске в многопользовательской системе позволяет другим пользователям изменить файлы, для которых задействованы жёсткие ссылки.
  • CVE-2024-32021 – клонирование локального репозитория с символическими ссылками, может использоваться для создания жёстких ссылок на произвольные файлы в каталоге objects/.

Помимо устранения уязвимостей в новых версиях также предложено несколько изменений, нацеленных на повышение защиты от уязвимостей, приводящих к удалённому выполнению кода и манипулирующих символическими ссылками при выполнения клонирования. Например, git теперь выдаёт предупреждение при наличии символических ссылок в каталоге .git/. Пути к субмодулям отныне могут содержать только реальные каталоги. При пересечении символических ссылок и каталогов, обрабатываются каталоги. При выполнении “git clone” добавлена защита от выполнения hook-ов во время клонирования и усилены проверки параметра core.hooksPath.

Release. Ссылка here.