AI Hacking - Come gli hacker usano l'intelligenza artificiale nei cyberattacchi

Leggi ora
Per le traduzioni dei siti utilizziamo l'intelligenza artificiale e, sebbene ci sforziamo di essere accurati, non sempre le traduzioni sono precise al 100%. La vostra comprensione è apprezzata.

SVG svelato: Comprendere le vulnerabilità XXE e difendere la propria base di codice

da Luan Pham, tester di penetrazione associato
Condividi questo post

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. 

Frammento di codice XML che visualizza i dettagli dei dipendenti in una struttura di reparto IT

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. 

Esempio di codice di un documento XML con entità interne ed esterne che includono un saluto
Esempio di codice XML semplificato che evidenzia la struttura e l'uso di entità e contenuti.

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. 

Immagine di esempio che mostra la struttura di un file SVG di base con contenuto di testo

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: 

Diagramma di flusso del processo che illustra i passaggi dall'analisi di un file SVG alla conversione in un altro formato.

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.  

Differenza di codice che mostra le modifiche apportate a una funzione Python per caricare un file SVG con opzioni di risoluzione delle entità
Diagramma di flusso di un processo di attacco XXE che utilizza file SVG in un contesto di sicurezza

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à.  

DashboardSupply Chain Software OPSWAT MetaDefender  che mostra i risultati della scansione del deposito per le vulnerabilità e le minacce
Rapporto di sicurezza OPSWAT MetaDefender Software Supply Chain per un file requirements.txt che non mostra alcuna minaccia o segreto rilevato

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. 

Codice XML modificabile in formato SVG con vulnerabilità XXE delineata nell'elemento DOCTYPE
Il file SVG dannoso
Versione pulita del codice XML in formato SVG senza vulnerabilità XXE
Il file SVG dopo essere stato sanificato con MetaDefender Core - Deep CDR 
Rapporto di sicurezza che mostra i file SVG contrassegnati come consentiti e sanificati dopo la valutazione della vulnerabilità
MetaDefender Core - Deep CDR risultato sanificato

Biografia dell'autore

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. 

Luan Pham
Tester di penetrazione associato

Rimanete aggiornati con OPSWAT!

Iscriviti oggi stesso per ricevere gli ultimi aggiornamenti sull'azienda, storie, informazioni sugli eventi e altro ancora.