[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

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: