
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.