Informazioni sulla sicurezza dell'applicazione Web - file allegati dall'utente [chiuso]

1

Ho un'applicazione web (software del forum) in cui sto lavorando a una funzione relativa all'utente che collega i file ai post del forum.

L'applicazione è scritta in linguaggio assembly e il database è SQLite.

L'approccio che ho usato è quello di mantenere i file allegati come un blob nel database e di consentire il download solo con le intestazioni:

Content-type: application/octet-stream
Content-Disposition: attachment

In questo modo, i file non verranno mai memorizzati come file sul server.

Non è pianificato implementare alcuna convalida del tipo e del contenuto del file, perché sono considerati superflui su questa impostazione (e voglio dare agli utenti la massima libertà, senza compromettere ovviamente la sicurezza).

È chiaro che il caricamento di file enormi è un modo per fare attacchi DoS, ma questo non è un argomento della domanda preimpostata.

I possibili bug nella stessa applicazione web, che causano overflow del buffer e simili, non sono un problema (sono possibili, ovviamente, ma voglio chiederne l'architettura, non l'implementazione).

L'impostazione interrogata è il seguente schema:

  1. senza file: dalla richiesta POST - > al campo blob SQLite.
  2. dal campo blob SQLite - > alla rete e al browser dell'utente.
  3. Sempre: application / octet-stream e Content-Disposition: allegato
  4. Nessuna convalida del server per il tipo e / o il contenuto del file.

E la domanda è:

Quali vettori di attacco sono ancora possibili con l'approccio sopra?

P.S. La domanda la funzionalità di caricamento dei file Pentesting è simile, ma principalmente discute i file caricati come esistenti in la FS del server che è diversa dal sistema che sto chiedendo.

    
posta johnfound 28.09.2017 - 13:47
fonte

2 risposte

1

Il vettore possibile è un attacco a gamma di contenuti, quando ti verrà richiesto un documento non dall'inizio, esso può obbligarti a leggere tutto il contenuto nella memoria per inviare solo un byte. Così puoi colpire OOM sul server mentre il carico utile della rete e della larghezza di banda per l'attacco è misurato in centinaia di byte

    
risposta data 28.09.2017 - 15:14
fonte
0

Risponderò con 2 punti distinti.

  1. CHIAZZE

    I BLOB sono consentiti in tutti i principali database, ma la qualità della loro implementazione può variare. Infatti, richiedono che il database sia in grado di archiviare oggetti di dimensioni arbitrarie, il che non è la prima preoccupazione di un database relazionale. Di conseguenza, l'inserimento frequente, la cancellazione o gli aggiornamenti di BLOB possono terminare in un database utilizzando molto più spazio del necessario. Inoltre, il rischio di un problema di basso livello nel mezzo o la scrittura di un BLOB è approssimativamente proporzionale alla dimensione del BLOB e ciò potrebbe causare un database danneggiato. Più della mia opinione, ma preferisco archiviare file di grandi dimensioni direttamente in un file system (è il suo lavoro), e solo i nomi dei negozi nel database.

  2. Malwares

    Non usi direttamente i file allegati sulla tua piattaforma, ma li offri ai tuoi clienti. Se uno di essi carica in modo pericoloso o inavvertitamente un file contenente un malware, la tua piattaforma sarà un vettore di diffusione per quel malware. Oltre ai possibili problemi legali (ma assicurati che le tue condizioni generali siano esplicite a riguardo), l'esperienza dell'utente sarà certamente molto scarsa = > dovresti almeno scansionare qualsiasi file in arrivo con un software antivirus aggiornato.

risposta data 28.09.2017 - 14:02
fonte

Leggi altre domande sui tag