Новое в журнале. Git 2.56.1: закрыли RCE при рекурсивном клонировании с сабмодулями
Инструменты

Git 2.56.1: закрыли RCE при рекурсивном клонировании с сабмодулями

10 ноября 2026 года проект Git выпустил 2.56.1 и бэкпорты для шести актуальных веток. Патч закрывает шесть уязвимостей, старшая из которых — выполнение кода атакующего при рекурсивном клонировании репозитория с сабмодулями.

11 ноября 20265 мин чтенияНовости
Git 2.56.1: закрыли RCE при рекурсивном клонировании с сабмодулями
6 уязвимостейзакрыты в одном релизе 10 ноября
2.56.1+ бэкпорты 2.50.2–2.55.1

10 ноября 2026 года проект Git объявил о выпуске версии 2.56.1 вместе с бэкпортами для веток 2.50.2, 2.51.3, 2.52.1, 2.53.1, 2.54.1 и 2.55.1. Релиз закрывает шесть уязвимостей сразу; The Hacker News независимо подтвердил детали официального анонса GitHub и добавил технические подробности, которых не было в первом посте.

Что случилось: CVE-2026-111760

Старшая уязвимость партии, CVE-2026-111760, — это целочисленное усечение (integer truncation) в том, как Git обрабатывает индекс. Чрезмерно длинный путь в репозитории проходит проверку безопасности под одним именем, но затем Git записывает его на диск уже под укороченным именем — и атакующий может подставить туда имя .git. Это позволяет заменить файл .git сабмодуля символической ссылкой на каталог со вредоносными хуками или конфигурацией. Git отказывается заменять символической ссылкой .git-каталог, но в свежесклонированном сабмодуле .git — это обычный файл, а не каталог, поэтому защита не срабатывает. Хуки — это программы, которые Git запускает в определённых точках своей работы, так что как только Git обращается к подменённому каталогу, код атакующего выполняется на машине жертвы. Фикс отклоняет чрезмерно длинные пути индекса до того, как их можно усечь.

Остальные пять уязвимостей

В тот же релиз вошли ещё пять исправлений, часть из которых особенно актуальна для хостингов и CI:

  • CVE-2026-113408 — path traversal через объявленный сервером HEAD при клоне пустого репозитория по протоколу v2
  • CVE-2026-114467 — повреждение стека при слиянии тега с более чем двумя GPG-подписями, DoS для сервисов, которые мёрджат чужие теги автоматически
  • CVE-2026-114469 — переполнение буфера при распаковке слишком большого бинарного патча
  • CVE-2026-105437 — повреждение кучи при крупном merge с большим числом конфликтов и атрибутом conflict-marker-size; по данным GitLab, в зоне риска в первую очередь серверы, автоматически проверяющие мерджи через git merge-tree
  • CVE-2026-114466 — возможность чтения и записи произвольных файлов через функции fast-import (rewrite-submodules-from, rewrite-submodules-to, export-pack-edges), которые теперь по умолчанию отклоняются во входном потоке

Что сделать прямо сейчас

  • Обновить Git до 2.56.1 или ближайшего бэкпорта на всех машинах, где идёт рекурсивное клонирование чужих репозиториев с сабмодулями — включая CI-раннеры и контейнерные образы сборки
  • До обновления не клонировать рекурсивно репозитории из непроверенных источников, не мёрджить чужие теги и не обрабатывать бинарные патчи и fast-import потоки от источников, которым нет доверия — GitHub называет эти меры временными, а не заменой патча
  • Проверить, не собирает ли внутренний инструментарий собственную копию Git (например, обёртки вокруг GitPython или самописные CI-образы) — таким приложениям нужен отдельный апдейт зависимости, обновление системного Git их не затронет

Разбор шести уязвимостей разом в одном релизе — лишний повод свериться, остаётся ли git-инфраструктура проекта и его сабмодули в зоне чьей-то постоянной ответственности. Там, где разработка идёт эпизодически или подрядчик меняется от задачи к задаче, такой security-релиз в CI-образах и сабмодулях легко пропускают месяцами. Подрядчику, который берёт разработку проекта под ключ, проще держать подобные патчи в плановом цикле релизов, чем разбирать уязвимость постфактум, когда её уже начали эксплуатировать.

Код, который не стыдно передать

Начните с принципов, а дальше двигайтесь по рубрикам. Каждый разбор заканчивается чек-листом.

Случайный разбор