ЖУРНАЛ ХАКЕР

BugTraq #7

Xakep, номер #031, стр. 031-008-3


Переполнение буфера в Xinetd является одним из самых веселых, поскольку,

кроме получения root прав (обязанности не прилагаются :), возможно вызвать обвал Xinetd, что приводит к DoS`у всех сервисов, запущенных inetd (telnet, ftp... ;).

Несколько подробней об ошибке в xinetd/log.c:

...

len = strx_nprint( buf, bufsize, "%s: %s ", line_id, SVC_ID( sp ) ) ;

va_start( ap, fmt ) ;

cc = strx_nprintv( &buf[ len ], bufsize, fmt, ap ) ; // баг здесь

va_end( ap ) ;

...

(bufsize=sizeof(buf) == LOGBUF_SIZE = 1024)

Если аргумент (см. отмеченную строку) больше, чем bufsize-len, происходит

переполнение строки.

Фича в ident даст возможность вернуть 1024 байт в svc_logprint() в

качестве аргумента.

1024,21:USERID:AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA...AA\r\n

Установка собственного source добавит еще 3-4 байта:

1,21:USERID:AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA...AAAAA\r\n

Строка обрезается до \r

(xinetd/ident.c)

...

svc_logprint( SERVER_CONNSERVICE( serp ), USERID_ENTRY, "%s", p );

...

p тогда будет строкой в 1010 символов.

Если strlen(line_id)+strlen(SVC_ID( sp )) > 14, имеем переполнение буфера,

которое имеет демона.

Для фтп возможно получить лишь 1022 байт, но для других сервисов, обладающих более длинными именами, использующими аутентификацию, это будет серьезной проблемой.

Уязвимость: Insufficient parameter validation

Уязвимы: SMBd версии 2.0.7, SMBd 2.0.8

Автор: Michal Zalewski

Дата: 25 июня 2001

То, что NetBIOS барахлит не только в win, не новость: Linux также иногда спотыкается на самбе. В данном случае именно Linux, а не все представители *nix`ов: в случае *BSD сложно почувствовать все прелести бага. При соединении с samba`ой пишется лог по принципу remoteNBname.log. А кто мешает прописать на клиентской части имя '../../../evil'? Оно идеально прокатит и будет принято smbd`ом с написанием лога в диру, для того не предназначенную. Все сложится плачевно для админа, если были оставлены дефолтовые настройки в smb.conf: log file = /var/log/samba/%m.log. Если же были залиты: log file = /usr/local/samba/var/log.%m, то атака не получится. Второй вариант конфига как раз присутствует во FreeBSD`e, к примеру. Как вариант эксплойтинга предлагается использовать NB имя, образованное по принципу 'non/existing/dir' (несуществующая дира), тогда самба не сможет залогировать сессию, что особенно полезно при проведении bruteforce-атак/аудите NB.

Назад на стр. 031-008-2  Содержание