Компания
456,36
рейтинг
20 января в 13:57

Разное → В ядре Linux обнаружена опасная 0day уязвимость

Специалисты израильской security-компании Perception Point сообщили об обнаружении опасной 0day уязвимости в ядре Linux с идентификатором CVE-2016-0728. Уязвимость относится к типу Local Privilege Escalation (LPE) и охватывает все версии и модификации Linux, в которых используется ядро версии 3.8 и выше. Как не трудно догадаться, с ее помощью атакующие могут поднять свои привилегии в системе до максимального уровня root. Эксплойт может быть использован в системе уже после того как атакующие получили к ней удаленный доступ и запустили его на исполнение. Он также может использоваться вредоносными программами для получения в системе максимальных привилегий.



На ядре Linux основана и одна из самых востребованных на сегодняшний день мобильных ОС — Android. Таким образом, те версии Android, которые используют ядро Linux указанных версий также подвержены данной уязвимости. Это относится к версиям Android KitKat (4.4-4.4.4) и выше.

Уязвимость CVE-2016-0728 присутствует в подсистеме ядра Linux под названием keyring, которая предоставляет приложениям и системным компонентам ОС возможность безопасной работы с сохраненными в памяти криптографическими данными, такими как ключи шифрования. Точнее, уязвимость располагается в функции ядра join_session_keyring, которую приложение может вызвать с использованием API keyctl, указав ей константу KEYCTL_JOIN_SESSION_KEYRING. После того как к использованию объекта keyring подключаются в очередной раз из того же процесса, функция увеличивает для него счетчик ссылок, а затем забывает его уменьшить перед выходом из нее (reference leak). Таким образом, вызывая множество раз функцию keyctl с идентификатором KEYCTL_JOIN_SESSION_KEYRING для уже созданного объекта keyring, счетчик ссылок для него будет постоянно расти.

Эксплуатация уязвимости достигается через увеличение счетчика ссылок (поле usage объекта keyring) на максимально возможное значение таким образом, чтобы сигнализировать ядру, что его уже можно удалить. Так как само поле интерпретируется как знаковое целое (int), для этого нужно установить его старший бит. После того как ядро высвободит память для объекта, а указатель на него останется для приложения, эксплойт выделит по тому же адресу иной объект, заполнит его содержимое нужным указателем, а затем спровоцирует его вызов через один из указателей в объекте keyring, что приведет к исполнению кода по адресу, указанному эксплойтом.


Рис. Результат успешной работы PoC для этой уязвимости (данные Perception Point).

По подсчетам Perception Point уязвимости подвержены десятки миллионов ПК и серверов, на которых установлена Linux с уязвимым ядром, а также 66% всех устройств под управлением Android. Компания указывает, что уязвимость присутствовала в ядре с 2012 г., т. е. уже около четырех лет. Такие защитные технологии как SMEP и SMAP, которые предотвращают коду режима ядра (с максимальными привилегиями с точки зрения микропроцессора) получать доступ к страницам виртуальной памяти пользовательского режима, не позволят коду эксплойта отработать нужным образом.

Мы рекомендуем пользователям установить соответствующее исправление для ОС сразу после его выхода.
Автор: @esetnod32
ESET NOD32
рейтинг 456,36

Комментарии (12)

  • +1
    • +13
      Эта статья сильно лучше, тут и версии Android явно указаны и многие технические подробности приведены.
    • +2
      Там «редактор Хабра» писал — точнее, пересказывал вычитанное. Из двух зол Хабра — коропоративного блога и поста редактора — я бы все же выбрал корпоративный блог, по крайней мере компании, которая занимается безопасностью (неважно, верим ли мы в качество работы и баз nod32) :)

      P.S. В упомянутом вами посте, как часто бывают, больше рулят комменты.
  • +2
    Что мне, как человеку, которого не столько интересуют счётчики ссылок, сколько сохранность своих данных, сделать (не делать) для того, чтобы словить это?

    Например, с помощью древнего телефона, на котором допотопный андроид, который вряд ли получится обновить.
    • +1
      Установить (не установить) какой-нибудь apk, юзающий NDK (с процедурой эксплойта на борту). В том числе и из google play, т.к. нативный код приложения не проверяется гуглом… а сандбоксинг на стадии премодерации, может ничего не найти (оно ведь не глупое сразу палиться).

      Хотя на «допотопном андроиде» вряд ли будет ядро >= 3.8 (У меня к примеру, не самый старый — ядро 3.4.67)
      • +3
        Спасибо.
        Я слишком отсталый и поэтому неуязвимый.
  • +2
    на odroid xu4 с уязвимым ядром 3.10.82 эксплоит не работает:

    ./cve_2016_0728 PP_KEY
    uid=1000, euid=1000
    Increfing...
    keyctl: Disk quota exceeded
    
  • –9
    Решето
  • 0
    На NixOS не сработал:
    > ./a.out PP1
    uid=1000, euid=1000
    Increfing...
    finished increfing
    forking...
    finished forking
    caling revoke...
    uid=1000, euid=1000
    sh-4.3$ id
    uid=1000(max) gid=100(users) groups=100(users),1(wheel),17(audio)
    sh-4.3$ whoami
    max
    sh-4.3$ exit
    > uname -a
    Linux nixos 3.18.25 #1-NixOS SMP Thu Jan 1 00:00:01 UTC 1970 x86_64 GNU/Linux
    
    • 0
      SMEP/SMAP?
      cat /proc/cpuinfo | grep -i smep | wc -l
      

      Если не 0, то включен.
      • 0
        Да, включен. Это фича процессора получается?
        • 0
          Вроде того, можно немного пошаманить с бутлоадером и выключить его, вряд ли что-то сложное.
          И, кажется, ключ там должен не PP1 быть

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.

Самое читаемое Разное