CVE-2019-19126: уязвимость в glibc позволяет обойти ASLR для setuid-программ
В GNU C Library (glibc) до версии 2.31 обнаружена уязвимость на архитектуре x86-64, связанная с игнорированием переменной окружения LD_PREFER_MAP_32BIT_EXEC. Локальный атакующий может ограничить диапазон адресов для загружаемых библиотек и тем самым обойти ASLR для setuid-программ. Проблема актуальна для систем на базе glibc старше 2.31.
Подробности
Уязвимость затрагивает библиотеку glibc версий до 2.31 включительно и проявляется только на архитектуре x86-64. Суть проблемы связана с механизмом защиты ASLR (Address Space Layout Randomization) — рандомизацией адресного пространства, которая затрудняет эксплуатацию уязвимостей за счёт непредсказуемого расположения библиотек и исполняемого кода в памяти. Согласно описанию, glibc до версии 2.31 не игнорирует переменную окружения LD_PREFER_MAP_32BIT_EXEC при выполнении программы после смены уровня привилегий (security transition) — то есть, в частности, при запуске setuid-программ, выполняющихся с повышенными правами. Переменная LD_PREFER_MAP_32BIT_EXEC предписывает системе размещать отображаемые в память объекты (в том числе загружаемые библиотеки) преимущественно в младших 32-битных адресах. Если такая переменная не сбрасывается при переходе к привилегированному контексту, локальный атакующий получает возможность влиять на то, в каком диапазоне адресов будут размещены библиотеки. Это существенно сужает пространство возможных адресов и, соответственно, снижает энтропию ASLR для setuid-программы. В результате атакующему становится проще предсказать расположение кода в памяти и использовать это в дальнейших атаках, например при эксплуатации других уязвимостей, требующих знания конкретных адресов. Значение CVSS для данной уязвимости в официальной записи CVE не указано. Уязвимость классифицируется как локальная и требует наличия учётной записи на целевой системе для проведения атаки.Что делать
Основной и наиболее надёжный способ устранения уязвимости — обновление glibc до версии 2.31 или более поздней, где проблема уже исправлена. Обновление следует выполнять стандартными средствами пакетного менеджера дистрибутива (apt, yum/dnf, zypper и т. п.) и применять только проверенные пакеты из официальных репозиториев. Если немедленное обновление невозможно, рекомендуется в качестве временной меры минимизировать риски: ограничить доступ недоверенных пользователей к системе, контролировать возможность установки переменных окружения для setuid-программ и следить за актуальностью остальных компонентов ОС. Также полезно убедиться, что используются и другие механизмы защиты (например, SELinux или AppArmor), снижающие вероятность успешной эксплуатации уязвимостей, зависящих от предсказуемости адресов. Стоит отметить, что подобные проблемы подчёркивают важность корректной обработки переменных окружения при смене привилегий: любые «наследуемые» настройки, влияющие на размещение объектов в памяти, должны сбрасываться или игнорироваться в привилегированном контексте. Итог: CVE-2019-19126 — локальная уязвимость в glibc до версии 2.31 на x86-64, позволяющая снизить эффективность ASLR для setuid-программ за счёт переменной LD_PREFER_MAP_32BIT_EXEC. Для защиты достаточно своевременно обновить библиотеку до актуальной версии и соблюдать базовые практики разграничения доступа.Источник: CVE Project (cvelistV5)
