La possibilità di questo attacco non è qualcosa che è inevitabile nell'uso dei file temporanei. Deriva da un'implementazione non sicura dei file temporanei.
Ad esempio, su un sistema Unix, è possibile aprire un foro se la directory del file temporaneo ha permessi errati. La directory /tmp
è condivisa dagli utenti, quindi tutti hanno il permesso di scrittura sulla directory stessa (per poter creare file). Ma viene applicato un permesso speciale "sticky bit" che impedisce agli utenti di eliminare file che non possiedono. Se manca quel bit di autorizzazione, è possibile che un processo dannoso crei un attacco di condizione di competizione: nota che è appena stato creato un file temporaneo e, prima che il processo proprietario possa utilizzarlo, cancella il file e lo sostituisce con il proprio. (Le applicazioni possono verificare la proprietà e le autorizzazioni del file temporaneo appena aperto, ma probabilmente pochi, se non nessuno, danno fastidio, perché i programmi sono scritti in modo che la directory temporanea sia configurata correttamente.)
Se un file temporaneo viene creato con autorizzazioni errate, è possibile accedervi e manometterlo. I programmi che utilizzano file temporanei devono crearli con le autorizzazioni appropriate. Ciò significa che alcune funzioni di manipolazione di file indipendenti dalla piattaforma non possono essere utilizzate. Ad esempio, se utilizziamo la funzione C fopen
per creare un file temporaneo, abbiamo un buco di sicurezza, perché fopen
non ha alcun parametro per controllare quali autorizzazioni avrà il file. Su un sistema simile a Unix, creerà un file con autorizzazioni liberali (meno solo quelle autorizzazioni rimosse da umask
). Le funzioni della libreria specifiche della piattaforma devono essere utilizzate per la creazione e l'apertura di file temporanei.
Un programma, quando crea un file temporaneo, controlla sempre se quel file non esiste già. Tuttavia, questo controllo deve essere atomico, altrimenti c'è una condizione di competizione tra il controllo che il file non esiste e l'apertura / creazione del file. Quella condizione di competizione non è stata corretta dalle autorizzazioni corrette sulla directory temporanea. Viene risolto utilizzando un'operazione atomica per la creazione del file. Su Unix, il flag O_EXCL
viene utilizzato in aggiunta a O_CREAT
per chiedere al sistema operativo di fallire la chiamata open
se il file esiste già, altrimenti per crearlo. Un potenziale pitall qui sta ospitando la directory di file temporanea su alcuni filesystem di rete che non onora la semantica atomica di O_EXCL
.
Naturalmente, i file temporanei non sono protetti contro gli attacchi dallo stesso contesto di sicurezza. (Almeno, non senza l'implementazione di politiche di sicurezza a grana fine nel sistema operativo.) Se un programma dannoso viene eseguito come utente joe
aleady, allora quel programma può attaccare i file temporanei creati da programmi eseguiti come joe
dell'utente. Per evitare questo tipo di cose, è necessario uno schema di sicurezza più fine dei semplici domini di sicurezza basati sull'account. Ad esempio un sistema di sicurezza con regole come: "solo il% eseguibile% co_de è autorizzato ad accedere a qualsiasi oggetto filesystem il cui percorso corrisponda al modello /bin/foo
".