Re: gets() en Lenguaje C.
On Tue, 15 Jan 2002, Carles Pina i Estany wrote:
> Hola,
>
> > > Bueno, pues eso. Me ha quedado lo de comentar que la opción "a+" del
> > > fopen es pelin peligrosa, si no se verifica que el fichero a abrir no es
> > > un enlace simbólico a, por ejemplo a /etc/passwd ( si lo ejecuta como
> > > root puede ser divertido... )
> >
> > Para nada. Este fallito si es de bulto. El kernel no es tonto.
>
> tambien era en el caso que el programa "nuestro" se ejecuto con setuid de
> root
>
> Hay varios exploits que se aprovechan de eso, de no comprobar si el
> fichero que el programa intenta abrir es un enlace simbólico o no existe
>
> Imagina que nuestro programa se ejecuta como setuid de root y que un
> usuario normal ha hecho un enlace de "prueba.txt" a /etc/passwd...
Claro faltaba esa parte.
> Si lo digo es por algo }:-)
Bueno un programa que vaya a funcionar con setuid es una cosa
suficientemente seria como para atar absolutamente todos los
cabos y no veo que fopen "a+" sea mucho más peligroso que
fopen "w" por ejemplo. Si tienes privilegios de root incluso
un fopen "r" resulta peligroso. Bastaría hacer un
ln -s /etc/shadow .... para leer las claves y copiarlas a
otro sitio para atacarlas o leer algunos logs sumamente interesantes.
Lo mismo puede decirse de unlink, link, exec, y cualquier otra llamada
al sistema que acepte un nombre de fichero.
Si usas dentro de un programa setuid una llamada al sistema a la cual
le pasas un nombre de fichero incontrolado que puede ser alterado por
cualquiera lo tienes crudísimo y en mi opinión ese es el verdadero fallo
de caso que tu comentas por lo cual un fopen "a+" no añade gran cosa.
Creo que dices las cosas a medias y tienes en mente algunas experiencias
que yo no puedo adivinar. La cuestión es que cuando se produce una cadena
de errores que permiten un exploit suele ocurrir que nos fijamos en el
último eslabón de la cadena como el responsable de todo, pero creo que
estarás de acuerdo en que hay que retroceder en esa cadena de fallos todo
lo que se pueda porque cada fallo abre varias puertas y arreglando el
último no se hace gran cosa.
Un saludo
Antonio Castro
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
/\ /\ Ciberdroide Informática (Tienda de Linux)
\\W// <<< http://www.ciberdroide.com >>>
_|0 0|_
+-oOOO--(___o___)--OOOo----------------------------------------------------+
| . . . . U U . . . . Antonio Castro Snurmacher acastro@ciberdroide.com |
| . . . . . . . . . . |
+()()()----------()()()----------------------------------------------------+
| *** 1.700 sitios clasificados por temas sobre Linux en ***Donde_Linux*** |
| <<< http://www.ciberdroide.com/misc/donde/dondelinux.html >>> |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
Reply to: