it-swarm.dev

Sfruttamenti o altri rischi per la sicurezza con il caricamento SVG?

Ho un sito in cui le persone possono caricare elementi grafici, potresti pensarlo come un hoster di immagini o un forum di immagini.

Ora, consento il caricamento di grafica raster su una certa dimensione, ma per ora nessuna grafica vettoriale. Vorrei consentire anche il caricamento in formato SVG, ma ci sono due preoccupazioni che mi circondano:

  1. Un SVG potrebbe essere costruito in modo tale che, quando legge i metadati, il server non risponde. e potrebbe essere usato come attacco DoS sul server?
  2. Un SVG potrebbe essere costruito in modo tale che, quando si esegue il rendering dell'SVG sul client, il client non risponde e potenzialmente fa crashare tutti i browser degli utenti sul mio sito?

Inoltre, sarebbe una buona pratica generare un PNG piccolo (200x200px) per una miniatura, oppure è meglio manipolare lo stesso SVG con un fattore di zoom o qualcosa del genere?

Nel caso in cui tali exploit SVG siano possibili, come posso proteggermi da essi?

27
polemon

Un SVG potrebbe essere costruito in modo tale che, quando legge i metadati, il server non risponde. e potrebbe essere usato come attacco DoS sul server?

Cosa intendi con metadati? Se stai cercando larghezza e altezza, dovresti analizzare i file SVG almeno parzialmente per ottenerlo; non c'è scorciatoia per leggere alcuni byte dall'intestazione come in molti formati bitmap. Ciò comporta i soliti rischi dell'analisi XML, come ad esempio:

  • attacchi di inclusione di entità esterne/sottoinsiemi DTD contro file remoti, risorse sensibili alla rete locale, file sensibili alla macchina locale e file dispositivo
  • bombe di espansione di entità nidificate
  • strutture di tag nidificate patologicamente potrebbero colpire i limiti delle risorse di ricorsione

come precauzione standard, disabiliteresti tutta l'elaborazione DTD, XInclude, XSL, XSI e la risoluzione dell'entità.

Un SVG potrebbe essere costruito in modo tale che, quando si esegue il rendering dell'SVG sul client, il client non risponde e potenzialmente fa crashare tutti i browser degli utenti sul mio sito?

Forse, ma è possibile che ciò accada con un formato bitmap. Vedi ad esempio le vulnerabilità dei file PNG corrotti di qualche tempo fa.

Una delle maggiori preoccupazioni per i file SVG è che possono includere JavaScript, che funzionerà nel contesto di sicurezza del sito di hosting, quindi devi preoccuparti dello scripting cross-site.

In realtà tutti i tipi di file caricati sono vulnerabili a questo, anche se non in modo così diretto e facile da sfruttare. In alcuni casi i browser (in particolare IE) li sniffano e, se vedono cose che sembrano tag, potrebbero potenzialmente reinterpretarle come HTML, incluso JavaScript. Inoltre ci sono alcuni problemi secondari con il trattamento dei file caricati come Java e file di criteri Flash.

La mitigazione standard per tutti questi problemi è quella di servire le tue risorse non attendibili, sia bitmap, SVG o altro, da un dominio diverso al tuo sito principale: un dominio che non contiene informazioni di sessione sensibili (cookie/auth) e nessuna capacità per scrivere nel dominio del tuo sito principale.

Inoltre, sarebbe una buona pratica generare un PNG piccolo (200x200px) per una miniatura, oppure è meglio manipolare lo stesso SVG con un fattore di zoom o qualcosa del genere?

Sarebbe un bel tocco, ma dovresti trascinare alcune dipendenze per renderizzare in bitmap, ad esempio Batik se stai usando Java. L'introduzione naturale di una nuova complessa libreria aumenta la superficie di attacco; potrebbe essere una buona idea eseguire l'anteprima come attività daemon separata con priorità bassa e privilegi limitati.

19
bobince

Qualsiasi azione eseguita dall'applicazione Web è potenzialmente pericolosa. Il caricamento di file è una delle funzionalità più pericolose perché può portare all'esecuzione di codice in modalità remota.

Il problema con il caricamento di qualsiasi file sul server è che potrebbe non essere il file desiderato. Non so quale piattaforma o metodologia stai utilizzando, ma ho ingannato molte volte i sistemi di caricamento dei file per caricare un file .php o .asp ed eseguirlo. Non sembra che tu stia eseguendo il rendering dell'SVG sul lato server (sarebbe comunque strano), quindi l'XML grezzo all'interno dell'SVG non ha davvero importanza per il tuo server.

In termini di # 2, sì le vulnerabilità di corruzione della memoria svg sono comuni e sono fiducioso che ne esistano altre. Ma questo sarà vero per quasi tutti i file che carichi. Le immagini SVG sono un po 'più recenti e la maggior parte delle vulnerabilità nelle immagini SVG sono state trovate nel 2011.

Il mascheramento SVG viene utilizzato per oscurare gli iframe in un attacco clickjacking . Ma non credo che questo vettore di attacco si applichi al tuo sistema di upload svg.

10
rook