Исследователь Лаел Целлье (Laël Cellier) обнаружил в серверной и клиентской части Git две опасные проблемы, которые затрагивают ветки 2.x, 1.9 и 1.7. В числе прочего, баги представляют потенциальную опасность для таких популярных ресурсов как Github, Bitbucket, Gerrit и Gitlab.
Два найденных в коде бага (CVE-2016-2324 и CVE-2016-2315) могут привести к исполнению произвольного кода и переполнению буфера. Для эксплуатации уязвимостей атакующему нужно создать репозиторий с деревом файлов с чрезвычайно длинными именами, а затем пушнуть его на уязвимый сервер (атака на сервер) или позволить уязвимому клиенту склонировать его из удаленного репозитория (атака на клиента).
Одна из уязвимостей была устранена с выходом версии 2.7.1, релиз которой состоялся в прошлом месяце, вторую проблему исправят в версии 2.8, которая пока только ожидает релиза
Целлье обнаружил два бага, и они оба связаны с функцией path_name(),которая используется для добавления имени файла к концу пути в дереве репозитория. Вот так выглядел код revision.c, то есть Git до версии 2.7.0:
В коде хорошо просматривается уязвимость CVE-2016-2315. Из приведенного отрывка видно, что если strlen() будет работать с излишне длинным именем файла и получится излишне большое число, это закончится переполнением для nlen, из-за чего значение получится отрицательным, а не положительным. Из-за этого len тоже станет отрицательным, и памяти, запрошенной xmalloc(), может не хватить для итоговой комбинированной строки,
Функция strcpy() тоже подвержена ошибкам переполнения буфера. Вслепую копируя заданное атакующим длинное имя файла в буфер меньшего размера, она спровоцирует переполнение буфера. Функция повредит другие находящиеся в памяти данные (heap overwrite), таким образом позволяя атакующему управлять работой программы.
Исправление для версии 2.7.0 заменяет strcpy() более безопасной memcpy():
memcpy(m, name, nlen + 1);
Однако остается вторая проблема — CVE-2016-2324. Длинные пути, множество поддиректорий и огромные имена файлов могут вызвать другой вариант повреждения данных (heap overwrite) — уже из-за len. К примеру, для пути A/B/C, где A и B имеют длину 2^31-5, а C имеет длину 20, len будет равняться 10, а этого слишком мало, в буфер не поместится даже C, не говоря обо всем остальном.
В таких путях запросто можно хранить данные, к примеру, вредоносные пейлоады. В данном случае волноваться о том, что строка слишком длинная и «тяжелая» не нужно. При передаче информации от сервера клиенту (и наоборот) Git сжимает данные, используя zlib, что распространяется и на имена файлов. В теории можно создать дерево объемом тысячи килобайт или даже мегабайт, а затем использовать его для выведения из строя ASLR, исполнения кода и других неприятных трюков.
Как избавиться от CVE-2016-2324? Заменить path_name() чем-то более безопасным, что и было проделано в версии 2.8, которая сейчас ожидает релиза. Сам Целлье о данной проблеме высказался так:
«Исправление, которое я придумал: преобразовать все эти int в size_t. Это не исправит проблему окончательно, но на 64-разрядных системах потребуется путь длиной 2^64, чтобы уязвимость сработала, что вряд ли возможно. Правда, это не поможет 32-разрядным системам (хотя, на деле, я не удивлюсь, если все сломается задолго до этого, так как список name_path уже не поместится в памяти)».
Для демонстрации проблемы Целлье создал репозиторий longpath. Его главную страницу открыть невозможно – ошибка HTTP 500, но можно почитать Wiki.
Также исследователь пожаловался, что проблеме не уделяют должного внимания, к примеру, сообщил, что по его данным баги не устранены ни в одном дистрибутиве Linux. По словам Целлье уязвимостям была необходима «реклама». Он оказался прав – стоило прессе обратить внимание на проблему, как выяснилось, что, например, все версии Debian GNU/Linux уязвимы перед CVE-2016-2324. Похоже, единственные, кто обновился своевременно, это GitHub, а затем один из его главных конкурентов — GitLab. Кстати, за свою находку Целлье получил от GitHub 5000 баллов по программе обнаружения уязвимостей.
Эпоха ботнетов для организации мощных DDoS-атак получила ещё одного игрока. Исследователи рассказали о новой технике отказа в обслуживании под названием HTTP/2 Bomb, которая позволяет буквально положить крупный веб-сервер силами всего одной машины.
Самое неприятное — атака работает против стандартных конфигураций популярных серверов, включая NGINX, Apache HTTP Server, Microsoft IIS, Envoy и Cloudflare Pingora.
Метод обнаружили специалисты компании Calif при помощи ИИ-агента Codex от OpenAI. Фактически HTTP/2 Bomb — это комбинация двух известных приёмов: усиления через механизм сжатия заголовков HPACK и удержания ресурсов по схеме Slowloris с использованием особенностей управления потоком в HTTP/2.
На практике злоумышленник заставляет сервер выделять огромные объёмы памяти, после чего блокирует её освобождение. В результате память продолжает расходоваться, а сервер постепенно перестаёт отвечать на запросы.
По данным исследователей, обычный домашний компьютер с каналом 100 Мбит/с способен вывести из строя уязвимый сервер за считаные секунды. Например, Apache httpd и Envoy можно заставить выделить и удерживать 32 Гбайт оперативной памяти примерно за 20 секунд.
Во время испытаний результаты оказались впечатляющими:
Envoy 1.37.2 — 32 Гбайт RAM за 10 секунд;
Apache httpd 2.4.67 — 32 Гбайт за 18 секунд;
NGINX 1.29.7 — 32 Гбайт за 45 секунд;
Microsoft IIS на Windows Server 2025 — 64 Гбайт за 45 секунд.
Особую пикантность ситуации добавляет тот факт, что опубликованы уже не только технические детали, но и готовые эксплойты.
Исправления уже доступны для NGINX 1.29.8 и Apache mod_http2 2.0.41. Для Apache проблема зарегистрирована под идентификатором CVE-2026-49975. А вот пользователям IIS, Envoy и Pingora пока остаётся ждать патчей либо временно отключать HTTP/2 и использовать прокси-серверы или файрволы с жёсткими ограничениями на количество заголовков.
Свидетельство о регистрации СМИ ЭЛ № ФС 77 - 68398, выдано федеральной службой по надзору в сфере связи, информационных технологий и массовых коммуникаций (Роскомнадзор) 27.01.2017 Разрешается частичное использование материалов на других сайтах при наличии ссылки на источник. Использование материалов сайта с полной копией оригинала допускается только с письменного разрешения администрации.