Из примера по разбору кода с пятнадцатилетним багом, который позволяет использовать уязвимость. Переполнения, переполнения везде.

12 марта 2021 года специалист по кибербезопасности из компании GRIMM Адам Николс (Adam Nichols) рассказал об обнаруженной недавно критической уязвимости CVE-2021-27365 (переполнение буфера кучи, повышение локальных привилегий) в подсистеме iSCSI ядра Linux. Баг в коде был с 2006 года. В настоящее время затронутыми оказались все дистрибутивы Linux, но, к счастью, уязвимый модуль ядра scsi_transport_iscsi не загружается по умолчанию.

Также в коде подсистемы iSCSI ядра Linux были обнаружены еще две менее серьезные уязвимости — CVE-2021-27363 (утечка указателя ядра) и CVE-2021-27364 (чтение за пределами допустимого диапазона).

Фактически три уязвимости, обнаруженные недавно в подсистеме iSCSI ядра Linux, могут позволить локальным злоумышленникам с базовыми пользовательскими привилегиями получить привилегии root в незащищенных системах Linux. Эти пятнадцатилетние ошибки безопасности можно использовать только локально. Потенциальные злоумышленники должны будут получить доступ к уязвимым устройствам, используя другую уязвимость или альтернативный вектор атаки.

По информации OpenNET, уязвимость CVE-2021-27365 уже устранена разработчиками в обновлениях ядра Linux 5.11.4, 5.10.21, 5.4.103, 4.19.179, 4.14.224, 4.9.260 и 4.4.260, а обновления пакетов с ядром доступны в дистрибутивах Debian, Ubuntu, SUSE/openSUSE, Arch Linux и Fedora. На RHEL патча еще нет.

Эксперты GRIMM опубликовали на GitHub рабочий эксплойт (Proof of Concept, PoC), демонстрирующий использование уязвимостей на ядре Linux 4.18.0. Другие версии ядра Linux также можно проверить, но необходимо пересобрать символьные адреса и структурные смещения в коде экспойта для них заново.

В зависимости от того, на какой дистрибутив Linux могут быть нацелены злоумышленники, модуль подсистемы ядра iSCSI может быть загружен и использован для повышения привилегий. Ядро Linux загружает модули либо потому, что обнаружено новое оборудование, либо потому, что функция ядра обнаруживает отсутствие модуля. Последний случай неявной автозагрузки с большей вероятностью может быть использован злоумышленником для совершения попытки атаки.

Для того, чтобы эти уязвимости были доступны злоумышленнику, ему необходимо загрузить модуль ядра scsi_transport_iscsi. Этот модуль автоматически загружается при выполнении вызова сокета, который создает сокет NETLINK_ISCSI. Кроме того, в подсистеме iSCSI должен быть зарегистрирован хотя бы один транспортный протокол iSCSI. Транспортный модуль ib_iser будет загружен автоматически в некоторых конфигурациях, когда непривилегированный пользователь создает сокет NETLINK_RDMA. Ниже показана блок-схема, которая помогает определить, затронули ли Ваш дистрибутив эти уязвимости.



В системах CentOS 8, RHEL 8 и Fedora непривилегированные пользователи могут автоматически загружать необходимые модули, если установлен пакет rdma-core, тем самым получив доступ к использованию уязвимостей.

В системах Debian и Ubuntu пакет rdma-core будет автоматически загружать только два необходимых модуля ядра, если доступно оборудование RDMA. Таким образом, возможность использования уязвимостей злоумышленником будет ограничена.

Если в системе не используется iSCSI, то можно применить совет от OpenNET и в качестве обходного пути защиты запретить автоматическую загрузку модуля libiscsi: echo "install libiscsi /bin/true" >> /etc/modprobe.d/disable-libiscsi.conf.

В январе 2021 года эксперты компании Qualys обнаружили критическую уязвимость в утилите sudo, которая попала в исходный код утилиты в июле 2011 года. Злоумышленник может получить доступ с правами root, используя уязвимость CVE-2021-3156 под любым пользователем и без наличия записи в файле /etc/sudoers. Эту уязвимость можно применять для повышения привилегий в системе в непривилегированном процессе.