L'apertura di un file arbitrario in una lingua (come Python) rappresenta un rischio per la sicurezza?

2

Ad esempio, se un client invia un file a un server e il server apre il file in modalità lettura con Python:

with open(uploaded_file, "r") as f:
    # Do something

L'atto di aprire un file potrebbe essere abusato con un file abilmente creato dal cliente? Dipende dalla lingua utilizzata dal server?

    
posta JGut 11.02.2018 - 11:27
fonte

2 risposte

4

No.

Se il nome file è controllato dall'utente, potresti aprirti alle vulnerabilità (ad esempio, un utente malintenzionato potrebbe provare a leggere i file di configurazione con la password del database). Ma l'apertura di un handle di file per un file caricato non può fare molto.

Forse se il meccanismo sottostante provasse a leggere l'intero file per scopi di buffering, potrebbe riempire RAM e bloccare il processo, ma Python non lo fa: per leggere l'intero file, dovresti prima chiamare f.read() - ma è proprio quello che fai con esso, e non aprire il file. L'apertura del file è innocua.

    
risposta data 11.02.2018 - 13:44
fonte
2

I sistemi operativi generalmente hanno un numero limitato di file che possono aprire contemporaneamente (in particolare, un numero limitato di descrittori di file o fd s in sistemi di tipo Unix o HANDLE s in Windows). Se si consente alle persone di aprire un numero arbitrario di quelli senza chiuderli, allora potrebbe essere possibile ridurre tale limite, il che impedirebbe al sistema operativo di aprire più file e probabilmente causarne il comportamento anomalo o addirittura l'arresto anomalo. Tuttavia, sarebbe difficile sfruttarlo per qualcosa di più della negazione del servizio. Inoltre, i programmi potrebbero avere quote (inferiori al limite di sistema) del numero di file che possono aprire, quindi un singolo programma non funzionante potrebbe non fare troppo e tutti i file di un processo vengono rilasciati quando il processo si interrompe così normalmente è facile abbastanza per ripristinare la funzione (anzi, la maggior parte dei programmi si bloccherebbe prima).

Tuttavia, se permetti alle persone di dire al tuo server di aprire un file, sarebbe una buona idea avere un limite su quanti possono essere aperti contemporaneamente e chiudere il file (automaticamente, se l'utente non lo fa) t si consiglia di farlo prima) dopo il minor tempo possibile.

Un altro rischio potrebbe essere l'apertura di connessioni di rete, a seconda del sistema operativo in uso e dei tipi di percorso che accetta. Ad esempio, se il sistema accetta percorsi di stile di rete Windows ( \server\share\path\to\file ) o SMB (il protocollo di rete Windows, implementato su Unix-like nel toolkit Samba) ( smb://server/share/path ), o altri modi per accedere a qualsiasi tipo di rete file system che non è ancora montato (o "mappato" per usare il vecchio termine di Windows) nel file system locale, che potrebbe causare l'apertura di una connessione di rete al box di un utente malintenzionato e possibilmente provare ad autenticarsi. Questo potrebbe rivelare informazioni sul server, e potrebbe fornire un vettore per gli aggressori per cercare di compromettere il server tramite risposte dannose.

Quindi, dovresti anche limitare i nomi dei file a cose che puoi essere sicuro che non siano percorsi remoti. In generale, dovresti probabilmente evitare di lasciare che vengano specificati i percorsi; solo consentire nomi di file solo. Questi sono gli unici due rischi che riesco a pensare, però. Altrimenti, è abbastanza sicuro.

    
risposta data 11.02.2018 - 15:55
fonte

Leggi altre domande sui tag