пятница, 14 августа 2009 г.

mmap для нулевого адреса

Прочитал на lor статью про новую уязвимость. Прочитал, что в качестве идеи эксплоита лежит возможность выполнить код по нулевому виртуальному адресу. Тут-то я и задумался... Каким образом пользовательское приложение может это (сформировать код по 0 VA) сделать? В эксплоите был код:

mem = mmap(NULL, 0x1000, PROT_READ | PROT_WRITE, MAP_FIXED | MAP_ANONYMOUS | MAP_PRIVATE, 0, 0)

Этот код у меня в системе не работает... Начал смотреть дальше, и вот что выяснилось.

Здесь описывается тот факт, что для нужд wine (выполнения 16 битного кода) в ядре разрешается делать mmap на 0 адрес (/proc/sys/vm/mmap_min_addr). Самое интересное, что в статье утверждается, что в Ubuntu при установке wine эта возможность включается для системы в целом. Кроме того, в следствии особенностей архитектуры SELinux, по умолчанию, системы с включенным SELinux (как я понял) также разрешают пользователям делать mmap 0 адреса.

Интересно. :)

UPD: Кроме того, если в системе есть pulseaudio с установленным suid root, то эксплоит будет загружен через pulseaudio -L и mmap будет уже делаться от пользователя с euid == 0 (и выполнится успешно). Правда, в таком случае можно получить рута более простым способом -- так как мы и так уже получили привилегии администратора. Довольно нечестный прием. :)

Комментариев нет:

Архив блога