getlogin vulnerable

3

Estaba leyendo " Una taxonomía de errores de codificación " y tengo una duda con respecto al punto mencionado en C / C ++ > > Abuso de API > > A menudo mal utilizada: autenticación (getlogin).

No entiendo el vector de ataque mencionado allí. Para citar una declaración -

  

Se supone que la función getlogin () devuelve una cadena que contiene el nombre del usuario que está conectado actualmente en el terminal, pero un atacante puede hacer que getlogin () devuelva el nombre de cualquier usuario que haya iniciado sesión en la máquina.

¿Cómo funciona esto?

    
pregunta AviD 15.03.2012 - 19:23
fuente

2 respuestas

6

getlogin() funciona al verificar una propiedad de stdin. Sin embargo, un atacante malintencionado puede iniciar su programa con stdin redirigido a otro terminal de control de otro usuario, y eso engañará a getlogin() .

No utilice getlogin() por motivos de seguridad. Querrá ver getuid() , geteuid() , getpwuid() y métodos similares.

    
respondido por el D.W. 15.03.2012 - 19:41
fuente
5

El problema primero es que no es seguro para subprocesos, y el búfer de cadenas que se usa no contiene un valor confiable; es decir, no puede estar seguro de que el valor que recupere sea bueno. US-CERT entra en algunos detalles.

  

Los resultados de getlogin () no deben ser confiables.

     

La función getlogin () devuelve un puntero a una cadena que contiene   El nombre del usuario asociado con el proceso de llamada. La función   no es reentrante, lo que significa que si se llama desde otro proceso,   los contenidos no están bloqueados y el valor de la cadena puede ser   Cambiado por otro proceso. Esto hace que sea muy arriesgado de usar porque   El nombre de usuario puede ser cambiado por otros procesos, por lo que los resultados de la   no se puede confiar en la función.

US-CERT tiene más detalles sobre el problema . Una alternativa es usar la versión de threadsafe getlogin_r (), o usar otros mecanismos.

El segundo problema es que t aquí es un defecto conocido en SSH que permite a los atacantes Especificar específicamente el resultado de getlogin () :

  

En plataformas que dependen de getlogin () (principalmente las diferentes variantes de BSD)   los usuarios malintencionados pueden al menos enviar mensajes engañosos a syslog y   otras aplicaciones (la llamada a getlogin () devolverá "root").

Rapid7 también tiene detalles adicionales .

    
respondido por el Mark Beadles 15.03.2012 - 19:42
fuente

Lea otras preguntas en las etiquetas