Neste simples artigo vou tentar passar o conceito básico de race condition, a condição de corrida com arquivos temporários e "leaks" da memória de SUIDs. Vamos ver como obter privilégios explorando estes suids e como se proteger deles.
O race condition acontece quando temos vários processos do sistema
acessando e manipulando ao mesmo tempo a mesma informação de maneira
concorrente e o resultado da execução depende da ordem particular em que o
acesso ocorre.
O race condition é muito interessante para invasores que querem
elevar seu nível dentro de um sistema comprometido (obter uid=0(root)).
Vamos ver um pequeno pedaço de código em C que ilustra um race condition:
O código acima cria o arquivo temporário "arquivo-info" e depois abre
ele. A vulnerabilidade em potencial ocorre entre as chamadas das funções
access() e a chamada open().
Se um atacante consegue manipular o conteúdo do "arquivo.info" entre as funções
access() e open(), ele pode muito bem manipular qual vai ser a ação que o programa
que utiliza esse arquivo vai realizar, isso e o que chamamos de "Race".
O race condition não é um ataque trivial de ser realizado porque necessita
de muitas tentativas até que o atacante consiga algum retorno efetivamente útil.
Porém, se conseguir que o programa suid que utiliza esse arquivo no /tmp execute
(access()) em sua instrução, sua chance de obter uid=0 será grande.
O uso inapropriado de funções como access(), chown(), chgrp(), chmod(), mktemp(),
tempnam(), tmpfile(), e tmpnam() são as principais causas de races conditions.
[2] Comentário enviado por jllucca em 15/04/2004 - 23:43h
Excelente artigo!
Não conhecia a função access(), sempre testava se o arquivo existe com duas linhas(fopen e fclose) e sobre trecho ali, open precisa de no minimo dois parametros pra ser compilado. Fora o que já esta la(o PATH) precisa ainda de uma flag que indica o que estamos fazendo(Lendo, gravando...).
[4] Comentário enviado por y2h4ck em 17/04/2004 - 11:41h
cvs o problema e que um provedor nao pode fazer isso =] um provedor um servidor em producao roda muitos servidos com acesso remoto =]
um deles pode estar vulneravel e dar o acesso suficiente ao bash no sistema ehehe :)
[5] Comentário enviado por ph0enix em 04/12/2004 - 20:24h
cvs, você se considera seguro apenas removendo todos os usuários do sistema, alterando sua senha para algo absurdo, que mais parece um MD5/SHA ?
Abra o google, digite o nome do seu navegador, do seu programa de emails, do seu firewall, ou até mesmo do seu provedor de internet, e veja as vulnerabilidades que os mesmo apresentam.
Seu provedor de internet provavelmente já foi invadido, você utiliza criptografia em seus emails ? quando loga aqui no VOL, é com HTTPS ? você utiliza pops ?
Suas informações podem estar sendo capturadas (sniffing) por algum intruso no seu provedor neste exato momento.