[FUG-BR] bug do telnetd

Patrick Tracanelli eksffa em freebsdbrasil.com.br
Sexta Março 6 12:56:57 BRT 2009


JOAO H S L M SILVA escreveu:
> ae pessoal
> 
> li em algum lugar um comentario que esse bug do telnet era tipo
> remoto, ou quase remoto alguma coisa assim e que dava pra explorarcom
> 2 linhas de codigo

Exatamente isso. O bug é semi-remote. Sim voce explora com 2 linhas de 
codigo em biblioteca dinamicamente carregavel.

> li e reli o advisory e nao entendi o problema
> alguem pode explicar? pergunto por curiosidade, gosto do assunto,
> gostaria de entender na pratica como o bug funciona

1 - Voce escreve sua biblioteca que faz o que voce quiser, inclusive 
executar comandos.

2 - Voce "da um jeito" dessa biblioteca estar dentro do servidor remoto. 
Esse é a parte do "semi-remoto/semi-local" pois voce tem q por algo no 
servidor. Seja via FTP, via sftp, como usuario local, ou via upload de 
php ou ainda com injection de PHP (o que é bem facil hj em dia).

3 - Ai vem o bug. O Telnet export variaveis de ambiente, voce vai 
destruir uma variavel que voce sabe que o programa login (que é o 
processo evocado pelo telnetd pra autenticar o usuario) usa, e colocar 
outro valor nessa variavel de ambiente. Resultado o login vai carregar o 
que voce mandar, nesse caso uma biblioteca dinamica.

4 - Voce manda abrir a sessão, o ldd vai ver a variavel que tem que 
carregar ao executar do login, e vai carregar essa variavel, que por sua 
vez faz o que voce quer. Esse é o lado remoto. Portanto depende de lado 
local e lado remoto, dai semi-remote/fully-local pois localmente o cara 
pode dar telnet na propria maquina via lo0.

5 - Ahh mais o bug é no inetd, o telnetd pelo inetd roda como root, bla 
bla bla: errado, se fosse xinetd, ou tcpserver, como root ou como 
carlotajoaquina, o login tem as seguintes permissoes:

-r-sr-xr-x  1 root  wheel  19996

Ou seja, suidbit pra root. Entao sua lib quando carregada pelo login que 
é dinamico:

% ldd /usr/bin/login
/usr/bin/login:
         libutil.so.5 => /lib/libutil.so.5 (0x2807e000)
         libpam.so.3 => /usr/lib/libpam.so.3 (0x2808a000)
         libbsm.so.1 => /usr/lib/libbsm.so.1 (0x28091000)
         libc.so.6 => /lib/libc.so.6 (0x280a0000)

... sera sempre como root.


-- 
Patrick Tracanelli

FreeBSD Brasil LTDA.
Tel.: (31) 3516-0800
316601 em sip.freebsdbrasil.com.br
http://www.freebsdbrasil.com.br
"Long live Hanin Elias, Kim Deal!"



Mais detalhes sobre a lista de discussão freebsd