I file di immagine sono comunemente considerati file sicuri e spesso vengono gestiti senza essere consapevoli dei potenziali problemi di sicurezza. Questi file di immagine, in particolare i file SVG, sono comuni vettori di attacco per sferrare attacchi pericolosi come Cross-Site Scripting (XSS) o XML External Entity (XXE) injection. A differenza degli attacchi XSS, gli attacchi XXE injection non colpiscono il lato client, ma possono influenzare in modo significativo il lato server, portando a diversi impatti gravi. In questo post esploreremo la natura degli attacchi XXE, in particolare attraverso il vettore di attacco Scalable Vector Graphics (SVG), discuteremo un esempio reale e forniremo strategie di mitigazione con i prodotti OPSWAT .
Informazioni di base
Prima di approfondire la vulnerabilità, esamineremo innanzitutto il formato dei file XML e SVG e la causa alla base della tecnica di iniezione XXE.
Formato file XML
XML (eXtensible Markup Language) è un formato di file indipendente dalla piattaforma per l'archiviazione e lo scambio di dati strutturati. L'XML supporta la struttura gerarchica ed è quindi ideale per rappresentare relazioni complesse tra i dati. I dati in formato XML sono organizzati in tag, attributi e contenuti, allo stesso modo dell'HTML. Tuttavia, XML è altamente personalizzabile ed estensibile, consentendo agli utenti di definire i propri tag e attributi in base alle proprie esigenze. La figura seguente mostra i dati del reparto IT in formato XML.
Entità XML
In XML, le entità sono segnaposto per i dati che consentono di incorporare testo o interi documenti nel documento corrente. Sintatticamente, un'entità in XML è racchiusa da una virgola (&) e da un punto e virgola (;). Nell'esempio seguente, due entità sono definite in Document Type Definition e si riferiscono al contenuto del file XML. La differenza tra le due entità è che l'entità interna è definita e referenziata all'interno del documento corrente, mentre il contenuto dell'entità esterna proviene da un documento esterno. Dopo aver analizzato e risolto le entità, queste vengono sostituite con i dati corrispondenti.
Formato file SVG
SVG (Scalable Vector Graphics) è un formato di file versatile, ampiamente utilizzato nello sviluppo web, nella progettazione grafica e nella visualizzazione dei dati. A differenza dei formati immagine tradizionali come JPEG o PNG, SVG utilizza il formato XML per descrivere la grafica vettoriale bidimensionale. In particolare, le immagini SVG sono composte da forme geometriche come linee, curve e poligoni, definite da equazioni matematiche piuttosto che da singoli pixel. Di conseguenza, la grafica SVG può essere scalata all'infinito senza perdere qualità, il che la rende ideale per il web design reattivo e i display ad alta risoluzione. A causa della natura XML del formato SVG, esso fornisce anche potenziali vettori di attacco per exploit legati a XML.
Tecnica di iniezione XXE e impatti
La tecnica di iniezione XXE abusa del meccanismo di risoluzione delle entità esterne. In particolare, quando il parser incontra un'entità esterna, recupera il contenuto corrispondente in base al tipo di file della risorsa.
Se il file di risorse è locale, il parser recupera il contenuto del file e sostituisce l'entità con i dati corrispondenti. Ciò consentirebbe a un aggressore di mostrare dati sensibili come la configurazione del server, le credenziali, ecc. Per sfruttare con successo la vulnerabilità, l'aggressore dichiara un'entità esterna che fa riferimento al contenuto di file sensibili, ad esempio /etc./password.
Tuttavia, se la risorsa è remota o un servizio interno, il parser cercherà di recuperare i dati richiedendo l'URL definito. Questo potrebbe essere sfruttato per eseguire la falsificazione della richiesta lato server (SSRF). In questo caso, invece di fare riferimento a un file locale, l'aggressore cambierà il payload con l'URL del servizio vulnerabile da richiedere per conto del server.
Attacco XXE tramite gestione errata di file SVG: Un caso di studio
Analizzeremo una XXE per un caso reale, la libreria SVGLIB fino alla versione 0.9.3. La vulnerabilità è stata scoperta nel 2020 e assegnata a CVE-2020-10799. Esamineremo prima il flusso della libreria, analizzeremo il frammento di codice vulnerabile e infine dimostreremo lo sfruttamento tramite un servizio di conversione da SVG a PNG. L'obiettivo sono le applicazioni web autoimplementate che utilizzano versioni vulnerabili di SVGLIB per la conversione.
Pacchetto svglib
svglib è una libreria puramente Python progettata per convertire il formato SVG in altri formati come PNG, JPG, PDF, ecc. utilizzando il toolkit Open-Source di Report Lab. Poiché i file SVG utilizzano il formato XML, anche il parsing e la gestione di XML sono una parte importante del flusso principale della libreria. Le 3 fasi principali della libreria sono le seguenti:
Sfruttamento
La vulnerabilità risiede nel processo di parsing dei file SVG che, se configurato in modo errato, provoca la perdita di dati sensibili sul server e potenzialmente la vulnerabilità SSRF. Da un ulteriore esame del codice sorgente del pacchetto svglib, la vulnerabilità XXE è causata dall'utilizzo della configurazione predefinita per l'analisi e la gestione del formato XML durante il caricamento del file SVG. Il pacchetto ha utilizzato il pacchetto lxml, in cui il valore predefinito per gli attributi resolve_ entities della classe XMLParser è True.
Bonifica
La causa principale del problema è il parsing XML non sicuro, implementato in modo non corretto nella libreria svglib e parte della dipendenza lxml. Di conseguenza, l'utilizzo di una versione vulnerabile di questa libreria può comportare la divulgazione di informazioni sensibili, la contraffazione di richieste lato server o persino la potenziale esecuzione di codice remoto, a seconda dell'ambiente di distribuzione e della funzionalità dell'applicazione. Le vulnerabilità introdotte dalle librerie di terze parti rappresentano un grave problema per la sicurezza delle applicazioni di grandi dimensioni, poiché le loro dipendenze potrebbero essere complesse e non trasparenti.
MetaDefender Software Supply Chain
OPSWAT MetaDefender Software Supply Chain offre una maggiore visibilità e una solida difesa contro i rischi della catena di fornitura grazie a una combinazione di più tecnologie. OPSWAT Software Bill of Materials (SBOM) consente di ottenere visibilità sui pacchetti software open-source di terze parti e di identificare le dipendenze software, le vulnerabilità o altri potenziali rischi presenti sotto ogni livello dell'immagine di un container. Grazie all'integrazione di oltre 30 motori antivirus combinati, il tasso di rilevamento del malware della tecnologiaMultiscanning raggiunge oltre il 99,99%. Inoltre, la tecnologiaProactive DLP (Data Loss Prevention) identifica credenziali come password, segreti, token, chiavi API o altre informazioni sensibili lasciate nel codice sorgente. Grazie alle nostre tecnologie di rilevamento e prevenzione delle minacce a fiducia zero, il ciclo di vita dello sviluppo del software (SDLC) è protetto da malware e vulnerabilità, rafforzando la sicurezza delle applicazioni e la conformità.
MDSSC rileva la CVE trovata in svglib. Inoltre, segnala il livello di gravità della CVE nel rapporto SBOM e identifica la versione del software vulnerabile.
MetaDefender Core - Deep CDR
Un altro motivo che rende possibile l'exploit è che l'applicazione elabora un file SVG iniettato con un payload dannoso. Di conseguenza, se il file immagine venisse sanificato prima di essere immesso nel servizio di conversione, il payload verrebbe eliminato, impedendo così l'attacco. La tecnologia di Deep Content Disarm and Reconstruction (CDR) in MetaDefender Core protegge dalle minacce note e sconosciute trasmesse dai file attraverso la sanificazione e la ricostruzione dei file. Con il supporto di oltre 160 tipi di file comuni e centinaia di opzioni di ricostruzione dei file, OPSWAT's Deep CDR neutralizza qualsiasi potenziale minaccia incorporata, garantendo che il file sanificato mantenga la piena fruibilità con contenuti sicuri.

Luan Pham ha partecipato al Critical Infrastructure Cybersecurity Graduate Fellowship Program di OPSWAT e attualmente è un Associate Penetration Tester presso OPSWAT. È appassionato di salvaguardia dei prodotti di OPSWAT contro potenziali minacce e di condivisione delle sue conoscenze.