1


    Компания Qualys раскрыла результаты исследования, в рамках которого была изучена возможность эксплуатации уязвимостей, приводящих к пересечению содержимого стека и кучи.     Когда стек и куча размещаются смежно и прилегают друг к другу (область стека следует сразу за памятью, выделенную под кучу), то в условиях того, что куча растёт в сторону увеличения, а стек в сторону уменьшения не исключено возникновение ситуаций, когда содержимое переполненной кучи может оказаться в области стека или, наоборот, стек переписать область кучи.  Для защиты от подобных пересечений в ядре Linux и других ОС применяют технику "stack guard-page", суть которой в подстановке граничных страниц памяти, обращение к которым приводит к генерации исключения (page-fault).      Исследователи Qualys попытались выявить практические методы инициирования подобных столкновений и обхода защиты "stack guard-page", что им блестяще удалось - выявлено 20 уязвимостей, связанных с недоработками выделения памяти в стеке/куче ядра, libc и компонентов пространства пользователя, позволяющих обойти  средства защиты от выхода за границы стека. Для демонстрации практических атак создано 15 рабочих прототипов эксплоитов, позволяющих повысить свои привилегии через манипуляции с различными приложениями в различных операционных системах (Debian, CenOS, Fedora, Ubuntu, OpenBSD, NetBSD, FreeBSD, Solaris).    Предложенные методы атаки разделены на три базовые категории:       Столкновение стека с другой областью памяти: выделение  памяти производится до тех пор, пока стек не достигнет другой области памяти или пока другая область памяти не достигнет стека;     Проброс минуя страницу защиты стека (stack guard-page): указатель стека перемещается из стека в другую область памяти, не касаясь страницы защиты стека;     Разбиение стека или другой области памяти: осуществляется перезапись стека содержимым другой области памяти или перезапись другой области памяти содержимым стека. В качестве другой области памяти может выступать куча, анонимный  mmap(), доступный на запись/чтение сегмент ld.so или PIE (Position-Independent Executable).      Среди опубликованных прототипов эксплоитов:         Локальная root-уязвимость в Exim, манипулирующая недоработкой (CVE-2017-1000369), из-за которой при обработке некоторых аргументов командой строки  не выполняется корректное освобождение памяти. Воспользовавшись данной проблемой локальный атакующий может в сочетании с уязвимостью CVE-2017-1000376 в glibc организовать выполнение своего кода с правами root. Эксплоит протестирован в Debian GNU/Linux (i386);     Поднятие привилегий в системе через утилиту sudo. Для атаки используется сочетание уязвимостей в sudo (CVE-2017-1000367) и в Glibc (CCVE-2017-1000366). Проблема  в Glibc вызвана некорректной обработкой памяти, выделенной для переменных окружения в suid-программах. Работа эксплоита продемонстрирована в Debian, Ubuntu и  CentOS (i386);     Ещё один эксплоит, позволяющий получить привилегии root через манипуляцию с утилитой sudo. Эксплоит примечателен работой в дистрибутивах с включенным SELinux;     Локальный root-эксплоит через манипуляцию с ld.so и большинством SUID-root программ  (используются уязвимости в glibc CVE-2017-1000366  и ядре Linux CVE-2017-1000370).  Работа эксплоита продемонстрирована в Debian, Fedora и CentOS (i386);     Локальный root-эксплоит через манипуляцию с ld.so и большинством SUID-root программ, собранных в режиме PIE (используется уязвимость в glibc CVE-2017-1000366  и другая уязвимость в ядре Linux CVE-2017-1000371).  Работа эксплоита продемонстрирована в Debian, Fedora и Ubuntu (i386);       Локальный root-эксплоит против утилиты /bin/su (используется уязвимость в glibc CVE-2017-1000366  и уязвимость в ядре Linux CVE-2017-1000365). Работа эксплоита продемонстрирована в Debian (i386);     Концептуальный эксплоит для получения контроля за регистром eip через sudo на системах i386 с патчами   grsecurity/PaX (CVE-2017-1000367, CVE-2017-1000366, CVE-2017-1000377);     Концептуальный эксплоит для получения контроля за указателем адреса возврата (rip) через манипуляции с Exim  (CVE-2017-1000369) в окружении Debian (amd64);     Локальный root-эксплоит против  ld.so и большинство SUID-root приложений (CVE-2017-1000366, CVE-2017-1000379).  Работа эксплоита продемонстрирована в Debian, Ubuntu, Fedora и    CentOS (amd64);      Концептуальный эксплоит для обхода защиты stack guard-page  в OpenBSD через манипуляции с утилитой  /usr/bin/at. Для атаки используются уязвимости в реализации stack guard-page (CVE-2017-1000372) и libc функции qsort (CVE-2017-1000373);       Концептуальный эксплоит для обхода защиты stack guard-page  в NetBSD (CVE-2017-1000374, CVE-2017-1000375);     Концептуальный эксплоит для атаки в окружении FreeBSD и  обхода защиты RLIMIT_STACK в setrlimit (CVE-2017-1000385);     Два концептуальных эксплоита для обхода защиты stack guard-page  во FreeBSD (CVE-2017-1083, CVE-2017-1084);     Локальный root-эксплоит против  /usr/bin/rsh в окружении Solaris 11 (CVE-2017-3630, CVE-2017-3629, CVE-2017-3631 CVE-2017-3631).            Для большинства вышеотмеченных уязвимостей уже доступны обновления от дистрибутивов (разработчики дистрибутивов были в закрытом порядке извещены о проблемах в середине мая и сегодня скоординировано выпустили обновления). В качестве общей меры для противодействия выявленным уязвимостям предлагается пересобрать все приложения и библиотеки в пространстве пользователя с использованием опции "-fstack-check" в GCC, которая добавляет защиту от перемещения указателя стека  в другую область памяти, минуя stack guard-page. Для защиты в краткосрочной перспективе можно увеличить размер  stack guard-page как минимум до  1 Мб и предоставить средства для произвольного изменения данного размера администратором (например, grsecurity/PaX предоставляет /proc/sys/vm/heap_stack_gap).     
    Источник: http://www.opennet.ru/opennews/art.shtml?num=46724
   
_источник