¿Cómo está utilizando acces () abriendo un agujero de seguridad?

6

La página de manual de acceso (2) dice:

  

Advertencia: al usar access () para verificar si un usuario está autorizado para, por ejemplo, abrir un archivo antes de hacerlo, usar open (2) crea un agujero de seguridad, ya que el usuario puede aprovechar el corto intervalo de tiempo entre la verificación y Abriendo el archivo para manipularlo. Por este motivo, se debe evitar el uso de esta llamada al sistema.

Entonces, ¿qué tipo de agujero de seguridad crea?

Si a alguien no le gusta linux.die.net, aquí está de freebsd.org y manpagez con un texto similar para evitar el uso del acceso ().

    
pregunta BЈовић 19.09.2013 - 15:56
fuente

1 respuesta

9

Es una condición de carrera . Usted hace el access() , luego hace el open() . En el corto tiempo entre las dos llamadas, el archivo puede haber cambiado. Normalmente, el archivo es, por ejemplo, /tmp/foo . Inicialmente, el archivo es propiedad de algún usuario (que es el malo de la historia), y el objetivo es una aplicación de raíz. La aplicación hace el access() , ve que el archivo realmente pertenece al usuario, y por lo tanto piensa: "está bien, es su archivo, puedo procesarlo en su nombre". Luego, el malo reemplaza rápidamente el archivo con un enlace simbólico a /etc/shadow . La aplicación ya tomó la decisión de abrir /tmp/foo , pero cuando lo hace, realmente se abre y procesa /etc/shadow .

    
respondido por el Thomas Pornin 19.09.2013 - 16:10
fuente

Lea otras preguntas en las etiquetas