Problemi di sicurezza con il caricamento di un'immagine

3

Dobbiamo implementare una funzione di caricamento dell'immagine del profilo utente nella nostra applicazione web. L'utente può caricare la sua immagine del profilo.

Dopo aver caricato l'immagine, verrà salvata in un DB2 DB e verrà visualizzata solo all'utente che ha caricato l'immagine dopo il login.

Lo stack tecnologico è J2EE, AIX, DB2.

Abbiamo ricevuto una strana denuncia dal nostro dipartimento di sicurezza che questa funzione deve essere eliminata perché l'utente può caricare un virus e questo infetterà il server!

Non capisco come un utente caricherà il virus. Alla fine della giornata, il virus è un programma che deve essere eseguito, giusto?

Seconda cosa: la piattaforma è UNIX-AIX. Anche se un utente ha caricato un malware, il server non verrà infettato, vero?

Ultima cosa: esiste la possibilità che l'utente venga infettato da XSS nel caso in cui sia stato caricato un file JS invece dell'immagine. Ma, posso vedere che nel nostro caso questo non è valido perché solo l'utente può caricare l'immagine e sarà resa solo all'utente.

La mia comprensione è giusta?

    
posta Jimmy 18.04.2016 - 23:43
fonte

2 risposte

2

Come citato da Schroeder, potresti aver trascurato alcuni dettagli qui, il che rende nervoso il tuo gruppo di sicurezza.

Ci sono un certo numero di classi di attacchi che potrebbero interessare il gruppo di sicurezza. Solo alcuni, ad esempio, potrebbero preoccuparli:

  • Caricamento file - non si parla di come viene gestito. Alcune domande da prendere in considerazione - C'è abbastanza spazio temporaneo su disco, cosa succede al file temporaneo dopo il caricamento, l'utente può specificare il nome del file, come viene determinata e imposta la dimensione del file? Qualsiasi e tutti questi potrebbero essere i vettori di un aggressore. Il più ovvio sarebbe dire al server che il file ha una dimensione, che il server assegna quella quantità di memoria, quindi invia qualcosa di più grande e corrompe la memoria del server, probabilmente ottenendo l'esecuzione del codice.
  • Memorizza nel database - l'utente può specificare un nome di file o il suo nome utente aggiunto alla tabella del database e, in caso affermativo, che aspetto ha l'SQL per memorizzare tali valori? Stai disinfettando l'input, o usando stored procedure, o fai del codice qualcosa come (pseudo-codice) "db.store ($ picture_file, $ name, $ table_users)"? In quest'ultimo caso, è molto brutto e probabilmente ti esporrà a Iniezione SQL . Non strettamente un "virus", ma qualcosa di cui il tuo dipartimento di sicurezza si preoccuperebbe.
  • Carica autorizzazione - Qualcun altro potrebbe caricare un file per conto di un utente diverso (ad esempio, potrebbe indovinare un numero utente in un parametro URL)? Oppure, si parla di XSS. Cosa succede se l'utente viene vittimizzato da qualche altro sito tramite XSS per caricare un carico utile sul tuo sito?
  • Resistenza al sistema operativo AIX - Nessun sistema operativo o sapore specifico di Unix è sicuro al 100%. Supponiamo che l'autore dell'attacco stia fuori per ottenere te (o il tuo utente) e abbia fatto i compiti e abbia creato codice shell specifico per AIX.

Sostanzialmente, non abbiamo abbastanza dettagli per un controllo completo della sicurezza della funzionalità, ma lo fa il tuo team di sicurezza. I dettagli importa e l'elenco dello stack tecnologico fornito non ci dice nulla sul profilo di vulnerabilità della tua applicazione specifica.

Un può effettuare una funzione di "caricamento di file immagine" ragionevolmente sicuro per un servizio, ma nulla nel tuo post iniziale suggerisce eccessiva paranoia da parte del tuo gruppo di sicurezza.

Parla con loro, scopri in particolare cosa non gli piace della funzionalità e collabora con loro per fornire le funzionalità che desideri in modo accettabile per loro.

    
risposta data 19.04.2016 - 01:35
fonte
1

Primo: hai ragione che l'immagine debba essere elaborata e che il server debba solo archiviare e fornire il file al client che lo richiede per il rendering (in genere non è il server a renderlo). Ma, non so come il tuo sistema gestisca i caricamenti.

Secondo: cosa succede se il tuo server elabora le immagini caricate e qualcuno carica un virus AIX? Nessun sistema operativo è perfettamente resistente ai malware.

Infine: se il tuo sistema fa ciò che deve fare, allora, sì, uno script JS interesserà solo l'account dell'utente che lo ha caricato. L'assunto qui è che è lo stesso utente a visualizzare l'immagine di quella che la sta caricando. Considera un account compromesso: un utente malintenzionato potrebbe caricare uno script JS e ottenere un accesso ancora più approfondito al computer dell'utente valido. Questo potrebbe essere risolto facilmente controllando le intestazioni dei file caricati per assicurarsi che si tratti di un'immagine e non di uno script.

Dai pochi dettagli forniti, sono d'accordo che si tratta di una strana lamentela da parte dei tuoi addetti alla sicurezza, ma potresti aver omesso un dettaglio importante, e non tutti i professionisti della sicurezza sono perfetti. Stai facendo la cosa giusta chiedendo, ma non dimenticare di porre queste domande direttamente con loro.

    
risposta data 19.04.2016 - 01:08
fonte

Leggi altre domande sui tag