Уязвимость в ядре Linux, позволяющая повысить свои привилегии в системе


В драйвере n_hdlc, поставляемом в составе ядра Linux, выявлена уязвимость (CVE-2017-2636), позволяющая локальному пользователю повысить свои привилегии в системе. Вызывающая уязвимость ошибка присутствует в ядре с 22 июня 2009 года. Подготовлен рабочий прототип эксплоита, который будет опубликован через несколько дней, чтобы дать пользователям время на обновление системы.

Уязвимость вызвана состоянием гонки (race condition) при доступе к указателю n_hdlc.tbuf, которое может привести к двойному освобождению памяти и перезаписи не связанных с буфером данных через манипуляцию с параметрами протокола HDLC (High-Level Data Link Control). В случае ошибки передачи данных, одновременный вызов функций flush_tx_queue() и n_hdlc_send_frames() может привести к дублированию записи указателя n_hdlc.tbuf в список tx_free_buf_list и дальнейшему двойному освобождению памяти одного и того же буфера в функции n_hdlc_release().

Проблема выявлена в результате изучения причин краха ядра, инициированного при выполнении fuzzing-тестирования системных вызовов программой syzkaller. Для совершения атаки непривилегированный локальный пользователь может активировать HDLC для устройства tty, при этом модуль ядра n_hdlc будет загружен автоматически. Для успешной атаки не требуется наличие специализированного оборудования Microgate или SyncLink.

Наличие уязвимости подтверждено в ядрах из RHEL 6/7, Fedora, SUSE, Debian и Ubuntu, ядро RHEL 5 проблеме не подвержено. Обновление пакетов с устранением уязвимости пока выпущено только для Ubuntu и Fedora Linux. Исправление также доступно в виде патча. В качестве обходного пути защиты можно блокировать автоматическую загрузку модуля n_hdlc, добавив строку "install n_hdlc /bin/true" в файл /etc/modprobe.d/disable-n_hdlc.conf. Если модуль n_hdlc уже загружен и используется, то для его выгрузки требуется перезагрузить систему.

Дополнительно, можно упомянуть обнаружение ещё одной уязвимости в ядре Linux, применение которой ограничивается системами, в которых включена не активированная по умолчанию возможность DAX в XFS/EXT4, используемая для прямого доступа к устройствам постоянной памяти (persistent-memory, NVDIMM) в обход страничного кэша. Проблема проявляется в ядрах новее 4.5 при включении настроек CONFIG_ZONE_DEVICE, СONFIG_FS_DAX и CONFIG_BLK_DEV_PMEM. Уязвимость позволяет переписать любой файл на устройстве постоянной памяти, если этот файл может быть прочитан пользователем.