CVE-2013-2596
Linux Kernel
2022-09-15
Linux kernel fb_mmap function in drivers/video/fbmem.c contains an integer overflow vulnerability that allows for privilege escalation.
Технический анализ и план устранения
Суть уязвимости
CVE-2013-2596 представляет собой уязвимость типа «целочисленное переполнение» (integer overflow) в функции fb_mmap, расположенной в файле drivers/video/fbmem.c ядра Linux.
Проблема заключается в некорректной проверке границ при вычислении смещения памяти в кадровом буфере (framebuffer). При выполнении системного вызова mmap на устройстве /dev/fb0, злоумышленник может передать специально сформированные значения аргументов offset и len. В результате арифметического переполнения проверка if (off > info->fix.smem_len) обходится, что позволяет отобразить произвольные участки физической памяти в адресное пространство пользователя.
Это дает локальному пользователю возможность чтения и записи физической памяти с правами ядра, что ведет к полному захвату системы (Privilege Escalation).
Как исправить
Основной способ исправления — обновление ядра Linux до версии, в которой присутствует патч, добавляющий корректную проверку переполнения с использованием макроса PAGE_SHIFT и проверку диапазона доступной памяти.
- Обновите список пакетов:
sudo apt-get update
- Установите последнюю доступную версию ядра для вашего дистрибутива:
sudo apt-get upgrade linux-image-generic
- Перезагрузите систему для применения изменений:
sudo reboot
- Если вы используете специфическую сборку ядра, необходимо применить патч в исходном коде. В функции
fb_mmapследует добавить проверку, предотвращающую переполнение при вычислении конечного адреса:
/* Пример логики исправления в fbmem.c */
unsigned long len;
len = (info->fix.smem_len + (info->fix.smem_start & ~PAGE_MASK) + PAGE_SIZE - 1) >> PAGE_SHIFT;
if (vma->vm_pgoff >= len)
return -EINVAL;
Временные меры
Если немедленное обновление ядра невозможно, следует ограничить доступ к устройствам кадрового буфера.
- Ограничьте права доступа к файлам устройств
/dev/fb*, чтобы непривилегированные пользователи не могли взаимодействовать с драйвером:
sudo chmod 600 /dev/fb*
- Если функциональность графического вывода через framebuffer не критична для работы сервера, можно выгрузить соответствующий модуль (если он скомпилирован как модуль):
sudo modprobe -r fbcon
sudo modprobe -r fbdev
- Используйте механизмы принудительного контроля доступа (например, SELinux или AppArmor), чтобы запретить подозрительным процессам доступ к устройствам вывода видео.