В ядре Linux 8 лет прожила «дыра», позволяющая запустить троян
Ошибка целочисленного переполнения в одном из драйверов допускала повышение локальных привилегий и запуск произвольного кода в пространстве ядра.Запуск кода в пространстве ядра
В драйвере ядра ОС Linux выявлена уязвимость, которая позволяет локальному пользователю повысить свои привилегии и осуществлять чтение и запись в значимые области памяти ядра, то есть запустить на Linux любой код, включая вредоносный.
Уязвимость выявили эксперты компании CheckPoint при аудите безопасности ядра Linux и его драйверов. «Баг», как пишут они в отчете, появился в ядре Linux «восемь лет назад».
Технические подробности о «дыре» доступны на сайте CheckPoint.
Уязвимость под индексом CVE 2018-8718 затрагивает внутреннюю функцию mmap(), определяемую файловыми операциями fb_helper в драйвере «udl» от DisplayLink – производителя компьютерных видеокомпонентов и программного обеспечения для них.
В официальном описании говорится, что «функция udl_fb_mmap в drivers/gpu/drm/udl/udl_fb.c в ядре Linux 3.4 и далее вплоть до 4.15 содержит уязвимость класса целочисленное переполнение, благодаря которой локальные пользователи с доступом к драйверу udldrmfb имеют неограниченную возможность считывать и записывать разрешения на страницы физической памяти и таким образом производить запуск кода в пространстве ядра».
«Даже в ядре Linux»
«Модуль video/drm в ядре определяет оболочку mmap() по умолчанию, которая вызывает уже реальный обработчик mmap(), заданный конкретным драйвером. В нашем случае уязвимость содержится во внутреннем mmap(), заданном файловыми операциями fb_helper в драйвере «udl» от DisplayLink», - говорится в описании CheckPoint.
«Ошибка целочисленного переполнения (integer-overflow) возникает, когда арифметические операции выдают значение, находящееся за пределами диапазона, который может быть представлен заданным количеством битов, - поясняет Михаил Зайцев, эксперт по информационной безопасности компании SEC Consult Services. - Чтобы предотвратить подобное, программисты должны реализовывать проверки диапазона. Отсутствие таких проверок - одна из ключевых и часто встречающихся причин возникновения уязвимостей данного типа. Интересно, однако, что за восемь лет этот баг никто так и не обнаружил.
В бюллетене CheckPoint указывается, что даже в таком популярном проекте Open Source, как ядро Linux, всегда можно найти уязвимости, «если знать, где искать».