Целочисленное усечение и переполнение в Git (CVE-2016-2315, CVE-2016-2324)
Table of Contents
Центр безопасности продуктов Red Hat предупреждает об уязвимостях в Git, которые могут спровоцировать усечение целочисленных значений (CVE-2016-2315) и их переполнение (CVE-2016-2324), что позволит атакующей стороне вызвать переполнение буфера и удаленно исполнить произвольный код.
Обзор
Для обмена данными репозиториев между клиентом и сервером Git используется специальный формат packfile.
Злоумышленник может сформировать packfile таким образом, чтобы намеренно вызвать переполнение буфера на атакуемом сервере или клиенте, что в конечном счете приведет к повреждению данных в памяти.
Описание
Git — распределенная система управления версиями с децентрализованной архитектурой. В отличие от традиционной модели «клиент — сервер», каждая рабочая копия репозитория Git идентична оригиналу и хранит полную историю изменений файлов локально. Такой подход позволяет пользователям не только совместно работать над проектами без необходимости получения разрешения на запись изменений в центральный репозиторий, но и продолжать работу даже при отсутствии подключения к сети.
Уязвимые версии
Red Hat подтверждает уязвимость версий Git, входящих в состав поддерживаемых версий Red Hat Enterprise Linux и Red Hat Software Collections (см. таблицу в секции «Решение»). Более того, все официальные версии Git, предшествующие 2.4.11, 2.5.5, 2.6.6 и 2.7.4, также подвержены риску.
Описание
атаки и оценка последствий
Обе уязвимости связаны с особенностями обработки целых значений функцией path_name()
в коде revision.c
, отвечающей за обработку путей к файлам. Ее слабость заключается в том, что она не может точно идентифицировать вредоносные данные, полученные в составе специально оформленного файла packfile. Обработка таких данных может привести к выходу за пределы допустимой длины, повреждению данных в памяти и исполнению произвольного кода.
Служебный формат packfile предназначен для внутреннего использования в Git с целью обеспечения эффективного обмена данными репозиториев. Git использует ряд вспомогательных инструментов для генерации и передачи файлов packfile между сервером и клиентом. Уязвимость эксплуатируется за счет передачи файла packfile, содержащего предельно длинное имя файла (231 Б, что приблизительно равно 2 ГБ) или многоуровневый путь в иерархии, достаточный для того, чтобы спровоцировать переполнение в path_name()
.
Один такой packfile был опубликован в целях демонстрации действующей атаки, вектор которой может быть направлен как на взлом клиента, так и сервера.
Для успешной реализации атаки на сервере злоумышленник принимает на себя роль клиента Git и отправляет серверу специально подготовленный packfile — например, в ходе операции push. Подобные операции обычно требуют подтверждения подлинности, поэтому для продолжения злоумышленник должен будет пройти аутентификацию. Попытка обработки сервером длинного пути из полученного файла приведет к переполнению в функции path_name()
.
Если же объектом атаки является клиент, злоумышленник должен будет настроить поддельный репозиторий на сервере Git и попытаться спровоцировать его клонирование клиентом. Загрузив вредоносный packfile, клиент попытается его обработать и тем самым себя скомпрометирует.
Для того чтобы вызвать переполнение, размер packfile в обычном, несжатом состоянии должен составлять около 2 ГБ — но это вовсе не означает, что атакующей стороне придется отправлять объемы данных, исчисляемые гигабайтами. Дело в том, что в формате packfile изначально предусмотрено сжатие данных; более того, данные могут быть дополнительно сжаты транспортным механизмом (например, SSH) — то есть на практике для успешной эксплуатации уязвимости 200 мегабайт может оказаться вполне достаточно.
Решение
Пользователям рекомендуется установить обновленные версии пакетов Git, закрывающие обсуждаемые уязвимости. Однако прежде чем это сделать, убедитесь, что в системе уже установлены все ранее доступные обновления.
Продукт | Пакет | Рекомендация |
---|---|---|
Red Hat Enterprise Linux 6 | git | RHSA-2016-0496 |
Red Hat Enterprise Linux 7 | git | RHSA-2016-0496 |
Red Hat Software Collections | git19-git | RHSA-2016-0497 |
Вопросы и ответы
Я управляю сервером Git. Насколько он подвержен риску?
Ваш сервер уязвим, если нарушитель имеет возможность выполнить операцию push
. Однако если для доступа к серверу необходимо авторизоваться, он должен будет суметь это сделать.
Я использую клиент Git. Насколько я подвержен риску?
Нарушитель может обманным путем заставить пользователя выполнить клонирование скомпрометированного репозитория Git, тем самым открыв себе путь для эксплуатации уязвимости.
Comments