Stack Clash - это эксплойт, основанный на довольно старой технике. Память, используемая процессом, разделена на две области - стек и куча . Как правило, можно представить, что стек растёт вниз, а куча - вверх. Что происходит, когда один из них вырастает настолько, что сталкивается с другим? В более общем плане, что происходит, когда размер стека увеличивается настолько, что он вторгается в несвязанные области памяти? Первоначальной уязвимости исполнилось 12 лет, и разработчики ядра Linux временно исправили ее, используя защитную страницу . Тем не менее, исследователи в Qualys сумели использовать это несмотря на защитную страницу.
Ars Technica сообщает :
Уязвимости Stack Clash постепенно завоевывали широкую известность: сначала в 2005 году, благодаря выводам исследователя безопасности Gaël Delalleau, и через пять лет после выпуска уязвимости Linux исследователем Рафалом Войчуком. Разработчики Linux
представили защиту , предназначенную для предотвращения стековых столкновений, но сегодняшнее исследование показывает, что злоумышленникам относительно легко обойти эту меру.
Основная атака для проверки концепции, разработанная Qualys, использует уязвимость, обозначенную как CVE-2017-1000364. Исследователи Qualys также разработали атаки, использующие Stack Clash для использования отдельных уязвимостей, в том числе CVE-2017-1000365 и CVE-2017-1000367. Например, в сочетании с CVE-2017-1000367, недавно исправленным недостатком в Sudo, также обнаруженным Qualys, локальные пользователи могут использовать Sudo для получения полных привилегий root в гораздо более широком диапазоне операционных систем. До сих пор Qualys не могла заставить эксплойты удаленно выполнять код. Единственным удаленным приложением, которое они исследовали, был почтовый сервер Exim, который, по совпадению, оказался невосполнимым. Qualys сказал, что не может исключить возможность существования таких эксплойтов для удаленного выполнения кода. Qualys сказал, что выпустит пробные версии эксплойтов позже,
[...] Более подробная информация доступна в этом подробном техническом совете от Qualys и этом техническом анализе от grsecurity .
Цитирование в LWN статьи о первоначальном исправить с 2010 года:
Поскольку Linux не разделяет стек процессов и страницы кучи, возможно переполнение страницы стека на соседнюю страницу кучи. Это означает, что достаточно глубокий стек (например, из рекурсивного вызова) может использовать память в куче. Программа, которая может записать на эту страницу кучи (например, X-клиент), может затем манипулировать адресом возврата одного из вызовов, чтобы перейти к выбранному месту. Это означает, что клиент может заставить сервер запускать код по своему выбору - выполнение произвольного кода - который можно использовать для получения привилегий root.
Приведенное выше описание относится к различным Unix-подобным ядрам.
В то время как Ars Technica отмечает временный обходной путь, упомянутый в отчете Qualys («установите жесткие значения RLIMIT STACK и RLIMIT_AS для локальных пользователей и удаленных служб на низкое значение»), следует отметить, что это не обязательно защитит от этого эксплойта . Единственный безопасный выход - это обновление. Согласно анализу безопасности:
Должно быть ясно, что попытки решить эту проблему только в ядре всегда будут неполными, поскольку реальная проблема заключается в отсутствии проверки стека. Поскольку альтернативное реальное решение зависит от восстановления всего пользовательского пространства, это, вероятно, единственно возможное решение в обозримом будущем.
Лучшее, что мы можем сделать сейчас, - это обновить ядро до исправленной версии.
В эксплойте 2010 года использовался X-сервер, в этом - sudo, а в следующей может быть любая из множества пользовательских программ, которые в какой-то момент выполняются с повышенными привилегиями.
Компания Qualys еще не опубликовала код проверки концепции для эксплойтов (они планируют сделать это позднее).
С CVE-2017-1000364 связано несколько уведомлений о безопасности Ubuntu:
Также обратите внимание, что трекер CVE перечисляет несколько комбинаций релиз / ядро как ожидающие исправления.
Как правило, самое простое решение - обновить ваши системы до последней версии пакета ядра ASAP.
Соответствующие версии ядра из USN (отобранные с использованием for i in {24..35}; curl -s https://www.ubuntu.com/usn/usn-33$i-1/ | pup 'dl:nth-last-of-type(1)'
):
-
Ubuntu 17.04:
-
linux-image-4.10.0-24-lowlatency
4.10.0-24.28
-
linux-image-generic-lpae
4.10.0.24.26
-
linux-image-generic
4.10.0.24.26
-
linux-image-4.10.0-24-generic-lpae
4.10.0-24.28
-
linux-image-4.10.0-24-generic
4.10.0-24.28
-
linux-image-lowlatency
4.10.0.24.26
-
Ubuntu 17.04:
-
linux-image-4.10.0-1008-raspi2
4.10.0-1008.11
-
linux-image-raspi2
4.10.0.1008.10
-
Ubuntu 16.10:
-
linux-image-powerpc-smp
4.8.0.56.69
-
linux-image-powerpc-e500mc
4.8.0.56.69
-
linux-image-4.8.0-56-powerpc-smp
4.8.0-56.61
-
linux-image-4.8.0-56-powerpc-e500mc
4.8.0-56.61
-
linux-image-4.8.0-56-lowlatency
4.8.0-56.61
-
linux-image-generic
4.8.0.56.69
-
linux-image-4.8.0-56-generic
4.8.0-56.61
-
linux-image-powerpc64-
emb 4.8.0.56.69
-
linux-image-virtual
4.8.0.56.69
-
linux-image-powerpc64-smp
4.8.0.56.69
-
linux-image-4.8.0-56-generic-lpae
4.8.0-56.61
-
linux-image-generic-lpae
4.8.0.56.69
-
linux-image-lowlatency
4.8.0.56.69
-
linux-image-4.8.0-56-powerpc64-
emb 4.8.0-56.61
-
Ubuntu 16.10:
-
linux-image-4.8.0-1040-raspi2
4.8.0-1040.44
-
linux-image-raspi2
4.8.0.1040.44
-
Ubuntu 16.04 LTS:
-
linux-image-powerpc64-smp-lts-utopic
4.4.0.81.87
-
linux-image-generic-lts-
wily 4.4.0.81.87
-
linux-image-generic-lts-utopic
4.4.0.81.87
-
linux-image-4.4.0-81-generic-lpae
4.4.0-81.104
-
linux-image-powerpc64-emb-lts-vivid
4.4.0.81.87
-
linux-image-powerpc-e500mc
4.4.0.81.87
-
linux-image-generic-lpae-lts-xenial
4.4.0.81.87
-
linux-image-generic-lpae-lts-utopic
4.4.0.81.87
-
linux-image-powerpc-e500mc-lts-xenial
4.4.0.81.87
-
linux-image-4.4.0-81-powerpc64-
emb 4.4.0-81.104
-
linux-image-powerpc-e500mc-lts-
wily 4.4.0.81.87
-
linux-image-4.4.0-81-powerpc-e500mc
4.4.0-81.104
-
linux-image-generic-lpae-lts-
wily 4.4.0.81.87
-
linux-image-virtual-lts-vivid
4.4.0.81.87
-
linux-image-virtual-lts-utopic
4.4.0.81.87
-
linux-image-virtual
4.4.0.81.87
-
linux-image-powerpc64-emb-lts-
wily 4.4.0.81.87
-
linux-image-lowlatency-lts-vivid
4.4.0.81.87
-
linux-image-powerpc-e500mc-lts-vivid
4.4.0.81.87
-
linux-image-powerpc64-
emb 4.4.0.81.87
-
linux-image-powerpc-smp-lts-xenial
4.4.0.81.87
-
linux-image-4.4.0-81-generic
4.4.0-81.104
-
linux-image-powerpc64-smp-lts-vivid
4.4.0.81.87
-
linux-image-lowlatency-lts-
wily 4.4.0.81.87
-
linux-image-4.4.0-81-lowlatency
4.4.0-81.104
-
linux-image-generic
4.4.0.81.87
-
linux-image-lowlatency-lts-xenial
4.4.0.81.87
-
linux-image-powerpc64-smp-lts-xenial
4.4.0.81.87
-
linux-image-powerpc64-emb-lts-utopic
4.4.0.81.87
-
linux-image-generic-lts-xenial
4.4.0.81.87
-
linux-image-generic-lts-vivid
4.4.0.81.87
-
linux-image-powerpc-e500mc-lts-utopic
4.4.0.81.87
-
linux-image-powerpc-smp
4.4.0.81.87
-
linux-image-4.4.0-81-powerpc-smp
4.4.0-81.104
-
linux-image-generic-lpae-lts-vivid
4.4.0.81.87
-
linux-image-generic-lpae
4.4.0.81.87
-
linux-image-powerpc64-smp-lts-
wily 4.4.0.81.87
-
linux-image-powerpc64-emb-lts-xenial
4.4.0.81.87
-
linux-image-powerpc-smp-lts-
wily 4.4.0.81.87
-
linux-image-virtual-lts-
wily 4.4.0.81.87
-
linux-image-powerpc64-smp
4.4.0.81.87
-
linux-image-4.4.0-81-powerpc64-smp
4.4.0-81.104
-
linux-image-powerpc-smp-lts-utopic
4.4.0.81.87
-
linux-image-powerpc-smp-lts-vivid
4.4.0.81.87
-
linux-image-lowlatency
4.4.0.81.87
-
linux-image-virtual-lts-xenial
4.4.0.81.87
-
linux-image-lowlatency-lts-utopic
4.4.0.81.87
-
Ubuntu 16.04 LTS:
-
linux-image-4.4.0-1016-gke
4.4.0-1016.16
-
Ubuntu 16.04 LTS:
-
linux-image-
snapdragon 4.4.0.1061.54
-
linux-image-4.4.0-1061-
snapdragon 4.4.0-1061.66
-
Ubuntu 16.04 LTS:
-
linux-image-4.4.0-1020-aws
4.4.0-1020.29
-
Ubuntu 16.04 LTS:
-
linux-image-raspi2
4.4.0.1059.60
-
linux-image-4.4.0-1059-raspi2
4.4.0-1059.67
-
Ubuntu 16.04 LTS:
-
linux-image-4.8.0-56-powerpc-smp
4.8.0-56.61 ~ 16.04.1
-
linux-image-4.8.0-56-powerpc-e500mc
4.8.0-56.61 ~ 16.04.1
-
linux-image-4.8.0-56-lowlatency
4.8.0-56.61 ~ 16.04.1
-
linux-image-4.8.0-56-generic
4.8.0-56.61 ~ 16.04.1
-
linux-image-generic-hwe-16.04
4.8.0.56.27
-
linux-image-lowlatency-hwe-16.04
4.8.0.56.27
-
linux-image-4.8.0-56-generic-lpae
4.8.0-56.61 ~ 16.04.1
-
linux-image-virtual-hwe-16.04
4.8.0.56.27
-
linux-image-generic-lpae-hwe-16.04
4.8.0.56.27
-
linux-image-4.8.0-56-powerpc64-
emb 4.8.0-56.61 ~ 16.04.1
-
Ubuntu 14.04 LTS:
-
linux-image-powerpc-smp-lts-xenial
4.4.0.81.66
-
linux-image-lowlatency-lts-xenial
4.4.0.81.66
-
linux-image-4.4.0-81-powerpc-smp
4.4.0-81.104 ~ 14.04.1
-
linux-image-4.4.0-81-powerpc-e500mc
4.4.0-81.104 ~ 14.04.1
-
linux-image-4.4.0-81-lowlatency
4.4.0-81.104 ~ 14.04.1
-
linux-image-4.4.0-81-generic-lpae
4.4.0-81.104 ~ 14.04.1
-
linux-image-generic-lpae-lts-xenial
4.4.0.81.66
-
linux-image-powerpc64-smp-lts-xenial
4.4.0.81.66
-
linux-image-4.4.0-81-generic
4.4.0-81.104 ~ 14.04.1
-
linux-image-4.4.0-81-powerpc64-smp
4.4.0-81.104 ~ 14.04.1
-
linux-image-generic-lts-xenial
4.4.0.81.66
-
linux-image-powerpc64-emb-lts-xenial
4.4.0.81.66
-
linux-image-powerpc-e500mc-lts-xenial
4.4.0.81.66
-
linux-image-virtual-lts-xenial
4.4.0.81.66
-
linux-image-4.4.0-81-powerpc64-
emb 4.4.0-81.104 ~ 14.04.1
-
Ubuntu 14.04 LTS:
-
linux-image-powerpc-e500mc
3.13.0.121.131
-
linux-image-lowlatency-
pae 3.13.0.121.131
-
linux-image-3.13.0-121-powerpc64-
emb 3.13.0-121.170
-
linux-image-generic-
pae 3.13.0.121.131
-
linux-image-3.13.0-121-powerpc-smp
3.13.0-121.170
-
linux-image-3.13.0-121-powerpc-e500mc
3.13.0-121.170
-
linux-image-3.13.0-121-powerpc-e500
3.13.0-121.170
-
linux-image-3.13.0-121-generic-lpae
3.13.0-121.170
-
linux-image-generic-lts-Quantal
3.13.0.121.131
-
linux-image-virtual
3.13.0.121.131
-
linux-image-powerpc-e500
3.13.0.121.131
-
linux-image-generic-lts-trusty
3.13.0.121.131
-
linux-image-3.13.0-121-generic
3.13.0-121.170
-
linux-image-omap
3.13.0.121.131
-
linux-image-powerpc64-
emb 3.13.0.121.131
-
linux-image-3.13.0-121-powerpc64-smp
3.13.0-121.170
-
linux-image-generic
3.13.0.121.131
-
linux-image-highbank
3.13.0.121.131
-
linux-image-generic-lts-
saucy 3.13.0.121.131
-
linux-image-powerpc-smp
3.13.0.121.131
-
linux-image-3.13.0-121-lowlatency
3.13.0-121.170
-
linux-image-generic-lpae-lts-
saucy 3.13.0.121.131
-
linux-image-generic-lts-
raring 3.13.0.121.131
-
linux-image-powerpc64-smp
3.13.0.121.131
-
linux-image-generic-lpae-lts-trusty
3.13.0.121.131
-
linux-image-generic-lpae
3.13.0.121.131
-
linux-image-lowlatency
3.13.0.121.131
-
Ubuntu 12.04 ESM:
-
linux-image-powerpc-smp
3.2.0.128.142
-
linux-image-3.2.0-128-virtual
3.2.0-128.173
-
linux-image-3.2.0-128-generic-
pae 3.2.0-128.173
-
linux-image-generic
3.2.0.128.142
-
linux-image-generic-
pae 3.2.0.128.142
-
linux-image-highbank
3.2.0.128.142
-
linux-image-3.2.0-128-highbank
3.2.0-128.173
-
linux-image-3.2.0-128-powerpc-smp
3.2.0-128.173
-
linux-image-virtual
3.2.0.128.142
-
linux-image-powerpc64-smp
3.2.0.128.142
-
linux-image-3.2.0-128-omap
3.2.0-128.173
-
linux-image-3.2.0-128-powerpc64-smp
3.2.0-128.173
-
linux-image-omap
3.2.0.128.142
-
linux-image-3.2.0-128-generic
3.2.0-128.173
-
Ubuntu 12.04 LTS:
-
linux-image-3.13.0-121-generic
3.13.0-121.170 ~ precision1
-
linux-image-generic-lpae-lts-trusty
3.13.0.121.112
-
linux-image-generic-lts-trusty
3.13.0.121.112
-
linux-image-3.13.0-121-generic-lpae
3.13.0-121.170 ~ precision1
Судо
Вышеупомянутая ошибка sudo описана в USN-3304-1 от 30 мая 2017 года:
-
Ubuntu 17.04:
-
sudo-ldap
1.8.19p1-1ubuntu1.1
-
sudo
1.8.19p1-1ubuntu1.1
-
Ubuntu 16.10:
-
sudo-ldap
1.8.16-0ubuntu3.2
-
sudo
1.8.16-0ubuntu3.2
-
Ubuntu 16.04 LTS:
-
sudo-ldap
1.8.16-0ubuntu1.4
-
sudo
1.8.16-0ubuntu1.4
-
Ubuntu 14.04 LTS:
-
sudo-ldap
1.8.9p5-1ubuntu1.4
-
sudo
1.8.9p5-1ubuntu1.4
Чтобы ответить на эту часть вашего вопроса конкретно:
Эта проблема возникает из-за использования общего адресного пространства для кучи (которая растет вверх) и стека (которая растет вниз).
Этот дизайн распространен во многих системах, поэтому многие системы уязвимы для одного и того же класса уязвимости.
источник