La rapida ascesa della tecnologia ha creato una forte domanda di sviluppatori qualificati. Il software open-source (OSS) è diventato uno strumento vitale per questa forza lavoro in crescita. Oggi esistono centinaia di migliaia di pacchetti OSS consolidati in diversi linguaggi di programmazione. Oltre il 90% degli sviluppatori sfrutta questi componenti open-source all'interno delle proprie applicazioni proprietarie, evidenziando l'efficienza e la proposta di valore dell'OSS. A sottolineare ulteriormente la sua importanza, si prevede che il mercato globale del software open-source raggiungerà gli 80,7 miliardi di dollari entro il 2030, con un tasso di crescita previsto del 16,7% annuo.
Il Software è parte integrante delle operazioni aziendali in tutto il mondo ed è quindi spesso preso di mira dagli attori delle minacce. Nel 2023, la spesa per la sicurezza delle applicazioni è stata di circa 5,76 miliardi di dollari, con proiezioni che raggiungono i 6,67 miliardi di dollari nel 2024. Nell'ambito dell'AppSec, la sicurezza della catena di fornitura del software ha guadagnato importanza negli ultimi tre anni, rappresentando la categoria di attacco in più rapida crescita, con importanti violazioni ed exploit che fanno regolarmente notizia.
Le organizzazioni spesso ritengono che la maggior parte dei rischi provenga dalle applicazioni Web rivolte al pubblico. Tuttavia, negli ultimi anni questa prospettiva è cambiata. Con decine di piccoli componenti in ogni applicazione, i rischi possono ora emergere da qualsiasi punto della base di codice. È più che mai fondamentale per le organizzazioni familiarizzare con le falle di sicurezza esistenti ed emergenti nel ciclo di vita dello sviluppo del software. In questo post del blog, i nostri Graduate Fellow danno un'occhiata più da vicino a CVE-2023-23924, una falla di sicurezza critica scoperta nella libreria dompdf, un potente strumento PHP che consente la generazione dinamica di documenti PDF da HTML e CSS.
Attraverso un'analisi completa, esploreremo le complessità tecniche di questa vulnerabilità, le tecnologie correlate che svolgono un ruolo cruciale e una simulazione del processo di sfruttamento. Esamineremo anche come OPSWAT MetaDefender Corein particolare il suo Software Bill of Materials (SBOM) può essere sfruttato per rilevare e mitigare questa vulnerabilità, consentendo agli sviluppatori di software e ai team di sicurezza di essere sempre un passo avanti rispetto alle potenziali minacce.
Informazioni su CVE-2023-23924
Una vulnerabilità di sicurezza è stata scoperta nella versione 2.0.1 di dompdf e resa pubblica all'inizio del 2023:
- La validazione dell'URI in dompdf 2.0.1 può essere aggirata nel parsing di SVG passando il codice
<image>
con lettere maiuscole. Ciò consente a un utente malintenzionato di chiamare URL arbitrari con protocolli arbitrari, portando a una non serializzazione arbitraria degli oggetti nelle versioni di PHP precedenti alla 8.0.0. Attraverso il wrapper URL PHAR, questa vulnerabilità può causare l'eliminazione arbitraria di file e persino l'esecuzione di codice remoto, a seconda delle classi disponibili. - Gli analisti di NVD hanno assegnato un punteggio CVSS di 9,8 CRITICAL a CVE-2023-23924.
Comprendere la vulnerabilità di Dompdf
Per comprendere appieno la vulnerabilità CVE-2023-23924 in dompdf, è essenziale familiarizzare con due tecnologie strettamente correlate: Grafica vettoriale scalabile (SVG) e file PHAR.
SVG (Scalable Vector Graphics) è un formato di immagine versatile che si è diffuso grazie alla sua capacità di rendere grafica di alta qualità sul Web, rimanendo al contempo leggero e scalabile. A differenza delle immagini raster, gli SVG si basano sul markup XML, consentendo un controllo preciso su elementi quali linee, forme e testo. Uno dei vantaggi principali degli SVG è la loro capacità di scalare senza problemi senza perdere la qualità dell'immagine, il che li rende ideali per il web design reattivo e per i display ad alta risoluzione.
PHAR (PHP Archive) è analogo al concetto di file JAR, ma per PHP. Consente una facile distribuzione, raggruppando tutto il codice PHP e il file delle risorse in un unico file di archivio.
Un file PHAR è composto da 4 sezioni:
- Stub: contiene il codice per avviare l'archivio.
- Manifest: contiene i metadati dell'archivio. I metadati sono memorizzati in formato serializzato, che potrebbe essere usato per innescare un attacco deserializzato PHP in un file PHAR dannoso.
- Contenuto del file: contiene il contenuto dell'archivio, compreso il codice PHP e i file di risorse.
- Firma (opzionale): contiene dati per verificare l'integrità del file.
Poiché i metadati sono memorizzati in formato seriale, la combinazione del wrapper PHAR e dei metadati del file PHAR potrebbe potenzialmente innescare un attacco di deserializzazione quando viene utilizzato come input in funzioni PHP quali file_get_contents(), fopen(), file(), file_exists(), md5_file(), filemtime(),
o filesize()
. Questa mancanza di sicurezza potrebbe consentire agli aggressori di eseguire codice remoto tramite un file PHAR.
Come Dompdf genera un file PDF
Attraverso l'analisi, i borsisti di OPSWAT hanno individuato che ci sono tre fasi nel processo di conversione di dompdf. Per convertire un file HTML in formato PDF, la libreria dompdf analizza innanzitutto il file di input in un albero DOM e memorizza le informazioni di posizionamento e layout di ciascun oggetto. Successivamente, viene analizzato lo stile CSS e applicato a ciascun oggetto. Infine, gli oggetti vengono riorganizzati per adattarsi alla pagina e resi nel file PDF finale.
Per migliorare la sicurezza, dompdf implementa la validazione per garantire la sicurezza degli input URI prima di procedere alla fase successiva. Questo processo di validazione è evidente durante l'elaborazione del file SVG all'interno del valore di xlink:href
attributo.
Se il file di input SVG contiene l'opzione <image>
sotto il tag <svg>
è stata implementata una condizione per consentire solo alcuni protocolli, come ad esempio http://
, https://
e file://
, per il xlink:href
campo.
Il resolve_url()
convaliderà l'URI prima di elaborarlo con la funzione disegnareImmagine()
funzione. Se lo schema dell'URI non è tra i protocolli consentiti, la funzione resolve_url()
restituirà un'eccezione all'applicazione.
Se l'URI supera la validazione, verrà passato al metodo disegnareImmagine()
che utilizza la funzione file_get_contents()
per gestire il valore URI all'interno del file xlink:href
attributo. La vulnerabilità della sicurezza si presenta a questo punto: un attacco di deserializzazione PHAR potrebbe essere scatenato se un aggressore riuscisse a bypassare la validazione e a passare un wrapper PHAR nell'URI.
Dopo l'analisi, si scopre che la validazione viene applicata solo ai tag con l'immagine del nome esatto.
Di conseguenza, può essere facilmente aggirato capitalizzando uno o più caratteri nel nome del tag, come ad esempio Image. Di conseguenza, un file SVG appositamente creato che utilizza Image al posto di image potrebbe eludere questa convalida.
Nella fase successiva, il disegnareImmagine()
viene invocata, passando l'URI del file SVG alla funzione file_get_contents()
funzione. Pertanto, la combinazione dell'aggiramento della convalida e di un attacco di deserializzazione su un file PHAR consente a un utente malintenzionato di eseguire codice remoto. Questa vulnerabilità consente a un malintenzionato di compromettere il server dell'applicazione attraverso un file SVG se gestito da una versione vulnerabile di dompdf.
Simulazione di sfruttamento di Dompdf
Per simulare questo sfruttamento come uno scenario reale, i borsisti di OPSWAT hanno sviluppato un'applicazione web con conversione da HTML a PDF utilizzando la libreria dompdf versione 2.0.1. L'applicazione consente agli utenti di caricare tipi di file come HTML, XML o SVG e di convertirli in file PDF. Questa applicazione consente agli utenti di caricare tipi di file come HTML, XML o SVG e di convertirli in file PDF.
Un utente malintenzionato seguirà questi passaggi per sfruttare questa vulnerabilità in un'applicazione che utilizza una versione di dompdf vulnerabile (versione 2.0.1):
In primo luogo, un aggressore genera un oggetto dannoso che crea una shell inversa quando viene chiamato il distruttore.
In secondo luogo, l'aggressore crea un file PHAR contenente l'oggetto di metadati dannoso. Quando il file PHAR viene invocato dal wrapper PHAR nel file file_get_content()
i metadati vengono deserializzati e l'oggetto specificato viene elaborato. Durante questo processo di deserializzazione, vengono attivati i distruttori ed eseguita la shell inversa.
In definitiva, l'attaccante inserisce il link URI contenente il wrapper PHAR nel valore di xlink:href
nel tag Image per aggirare la convalida, eseguire codice dannoso e caricare il file dannoso nell'applicazione.
Durante l'elaborazione del file SVG dannoso caricato, l'applicazione stabilisce una connessione inversa con l'aggressore, consentendogli di compromettere il server dell'applicazione.
Proteggere i componenti open-source con OPSWAT MetaDefender Core
Per rilevare e mitigare la vulnerabilità CVE-2023-23924 in dompdf, i nostri Graduate Fellows hanno utilizzato OPSWAT MetaDefender Core , un prodotto di cybersecurity multilivello che offre tecnologie avanzate di prevenzione e rilevamento del malware, tra cui l'SBOM.
OPSWAT SBOM protegge la catena di fornitura del software fornendo un inventario completo dei componenti per il codice sorgente e i contenitori. Analizzando la libreria dompdf e le sue dipendenze, OPSWAT SBOM è in grado di identificare rapidamente la presenza della versione 2.0.1 vulnerabile e di avvisare gli utenti del rischio potenziale.
Inoltre, OPSWAT SBOM è in grado di rilevare tecnologie correlate, come i file SVG e PHAR, che sono essenziali per comprendere e mitigare la vulnerabilità CVE-2023-23924. Questa visione olistica dei componenti software dell'applicazione consente ai team di sicurezza di prendere decisioni informate e di intraprendere azioni appropriate per affrontare i rischi identificati.
Oltre a rilevare la versione vulnerabile di dompdf, OPSWAT SBOM fornisce anche preziose informazioni sui componenti interessati, sulle loro versioni e su eventuali aggiornamenti o patch disponibili. Queste informazioni consentono ai team di sicurezza di dare priorità agli sforzi di correzione e di garantire l'aggiornamento dell'applicazione a una versione sicura di dompdf, risolvendo efficacemente la vulnerabilità CVE-2023-23924.
Sfruttando il motore SBOM all'interno di MetaDefender Core , le organizzazioni possono monitorare in modo proattivo la loro catena di fornitura del software, identificare potenziali vulnerabilità nei componenti open-source e implementare tempestivamente strategie di mitigazione, garantendo la sicurezza generale e l'integrità delle loro applicazioni.
Pensieri conclusivi
La scoperta di CVE-2023-23924 nella libreria dompdf sottolinea la necessità di vigilare sul panorama dinamico della sicurezza delle applicazioni. Sfruttando le intuizioni e le strategie descritte in questo blog post, i team di sicurezza possono individuare, mitigare e salvaguardare efficacemente le loro applicazioni da tali vulnerabilità, garantendo la sicurezza e l'integrità complessiva del loro ecosistema software.