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 .