Come sta usando access () aprendo un buco di sicurezza?

6

La pagina man per l'accesso (2) dice:

Warning: Using access() to check if a user is authorized to, for example, open a file before actually doing so using open(2) creates a security hole, because the user might exploit the short time interval between checking and opening the file to manipulate it. For this reason, the use of this system call should be avoided.

Quindi, che tipo di buco di sicurezza crea?

Se a qualcuno non piace linux.die.net, ecco da freebsd.org e manpagez con testo simile per evitare l'uso di access ().

    
posta BЈовић 19.09.2013 - 15:56
fonte

1 risposta

9

È una condizione di razza . Fai access() , quindi fai open() . Nel poco tempo tra le due chiamate, il file potrebbe essere cambiato. In genere, il file è, diciamo, /tmp/foo . Inizialmente, il file è di proprietà di un utente (che è il cattivo della trama) e il target è un'applicazione basata su root. L'applicazione fa access() , vede che il file appartiene davvero all'utente, e quindi pensa: "va bene, è il suo file, posso elaborarlo a suo nome". Quindi il malvagio sostituisce rapidamente il file con un link simbolico a /etc/shadow . L'applicazione ha già deciso di aprire /tmp/foo , ma quando lo fa, apre davvero ed elabora /etc/shadow .

    
risposta data 19.09.2013 - 16:10
fonte

Leggi altre domande sui tag