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 degli OSS raggiungerà gli 80,7 miliardi di dollari entro il 2030, con un tasso di crescita previsto del 16,7% annuo.
Tuttavia, l'adozione diffusa degli OSS introduce anche un nuovo livello di complessità: le vulnerabilità di sicurezza. Il gran numero di componenti OSS interconnessi crea una superficie di attacco più ampia che gli attori malintenzionati possono sfruttare. La gestione delle dipendenze tra i vari pacchetti OSS può essere complessa, rendendo difficile l'identificazione e la patch tempestiva delle vulnerabilità. Inoltre, la sicurezza degli OSS si basa spesso sulla vigilanza e sui contributi della comunità degli sviluppatori. Questo può portare a ritardi nella correzione delle vulnerabilità, soprattutto per i progetti meno popolari.
In questo articolo, i borsisti OPSWAT esaminano CVE-2023-33733, una falla di sicurezza scoperta nella popolare libreria open-source ReportLab. La loro analisi è abbinata a una simulazione di attacco che sfrutta MetaDefender Core con il suo Software Bill of Materials (SBOM) per identificare le vulnerabilità nelle dipendenze di un'applicazione, compresa la libreria vulnerabile ReportLab.
Introduzione alla libreria Reportlab
ReportLab, una libreria Python potente e open-source, consente agli utenti di generare PDF ricchi di funzionalità dal codice Python. Offre agli sviluppatori una combinazione vincente: flessibilità, facilità d'uso e ampie opzioni di personalizzazione per la creazione di documenti dinamici. La libreria offre agli sviluppatori un maggiore controllo sui loro PDF, consentendo di incorporare con precisione testi, immagini, tabelle e grafici. Questo livello di personalizzazione rende ReportLab uno strumento prezioso per la generazione di documenti dinamici come fatture e rapporti basati sui dati.
CVE-2023-33733 Contesto
CVE-2023-33733 evidenzia una vulnerabilità di sicurezza all'interno della libreria ReportLab, che ha un impatto su più versioni della libreria ReportLab.
- Le versioni di ReportLab precedenti alla versione 3.6.13 sono risultate vulnerabili all'evasione della sandbox, in particolare all'interno del file
'rl_safe_eval'
funzione. Lo sfruttamento è stato effettuato attraverso l'attributo color dei tag HTML, che è stato valutato direttamente come espressione Python utilizzando la funzioneeval()
e che porta all'esecuzione di codice in modalità remota. - Gli analisti di NVD hanno assegnato un punteggio CVSS di 7,8 HIGH a CVE-2023-33733.
Analisi della vulnerabilità di sicurezza di ReportLab
I borsisti OPSWAT hanno condotto un'analisi approfondita del flusso di lavoro di ReportLab, identificando la causa principale della vulnerabilità di sicurezza CVE-2023-33733.
ReportLab consente agli sviluppatori di creare PDF in modo efficiente. La libreria consente un'integrazione senza sforzo: importate la libreria, definite il contenuto HTML e generate il PDF in una sola riga di codice utilizzando la funzione result.
I nostri borsisti hanno scoperto un processo in 5 fasi per creare PDF da HTML con ReportLab.
Nel processo in 5 fasi per la creazione di PDF da HTML con ReportLab, si distinguono tre processi principali: l'elaborazione dei paragrafi, l'elaborazione del paraparser e il processo di gestione dell'HTML.
Come illustrato nella figura precedente, il processo di gestione dell'HTML all'interno di ReportLab utilizza la funzione eval()
specificamente sull'attributo colore. Servendo come punto focale per l'esecuzione di codice dannoso, il file eval()
La funzione di controllo del sistema di sicurezza induce i ricercatori a cercare di controllarne l'input per sfruttare l'applicazione. Tuttavia, questo è difficile da realizzare a causa della sandbox imposta dal programma __rl_safe_eval__
all'interno di ReportLab.
ReportLab ha implementato una sandbox chiamata __rl_safe_eval__
. Questa sandbox esclude tutte le funzioni integrate di Python e include diverse funzioni integrate sovrascritte. Questa restrizione consente l'esecuzione di codice sicuro all'interno della libreria, impedendo al contempo l'accesso a funzioni e librerie pericolose che potrebbero essere utilizzate per scopi dannosi (ad esempio, accesso al file system, comunicazione di rete).
Il rl_safe_eval
implementa varie condizioni per garantire che l'attributo invocato sia sicuro prima di utilizzare la funzione sandbox integrata di Python. getattr()
per recuperarlo e restituire il risultato.
La funzione safe eval mira a proteggere l'ambiente escludendo le funzioni pericolose e prevenendo le azioni dannose. Tuttavia, se si trova un modo per aggirare le sue condizioni e accedere a una potente funzione incorporata, si potrebbe sfruttare.
Partendo da questa idea, i ricercatori di sicurezza hanno cercato di aggirare le restrizioni. Inizialmente, hanno sfruttato l'iniezione di oggetti utilizzando l'opzione tipo()
per costruire un oggetto e ridefinire i suoi attributi e metodi per eludere i controlli all'interno di __rl_safe_eval__
. Inoltre, poiché la libreria ReportLab sovrascrive le funzioni integrate e le rende globali nel contesto di eval, il ricercatore potrebbe sfruttare questa implementazione per accedere a una delle funzioni integrate originali. Ciò potrebbe consentire di aggirare l'ambiente sandbox ed eseguire codice dannoso.
Il carico utile viene preparato come segue:
Tuttavia, l'esecuzione di un'espressione multilinea in un contesto di eval non è possibile. Tuttavia, è possibile utilizzare un trucco per la comprensione degli elenchi e il payload per sfruttare questa CVE è il seguente:
ReportLab Simulazione di sfruttamento
I ricercatori hanno pubblicato un Proof of Concept (POC) per CVE-2023-33733, dimostrando che le applicazioni costruite con versioni vulnerabili di ReportLab potrebbero essere suscettibili di attacchi informatici. Per valutare questa potenziale minaccia, i borsisti dell'OSPWAT hanno condotto un attacco simulato a un'applicazione web. Hanno utilizzato MetaDefender Core con funzionalità SBOM per identificare le vulnerabilità di sicurezza nelle dipendenze del software dell'applicazione, compresa la presenza della libreria ReportLab interessata.
Per simulare questo sfruttamento come uno scenario reale, i borsisti OPSWAT hanno sviluppato un'applicazione web utilizzando Python e la versione vulnerabile della libreria ReportLab. L'applicazione simula un caso d'uso tipico: gli utenti possono caricare un file HTML e convertirlo in un file PDF.
Un utente malintenzionato potrebbe creare un file HTML dannoso che contiene codice progettato per sfruttare 33733. Questo codice potrebbe aggirare la sandbox e compromettere il server web innescando una reverse shell attraverso l'interfaccia eval()
funzione.
Un caricamento riuscito del file dannoso consentirebbe all'aggressore di assumere il controllo del server applicativo a causa della vulnerabilità della libreria ReportLab non aggiornata.
L'importanza dello SBOM e della sicurezza proattiva
La ricerca dei borsisti OPSWAT su CVE-2023-33733 sottolinea i potenziali rischi per la sicurezza associati agli OSS. Se da un lato l'OSS offre innegabili vantaggi in termini di efficienza di sviluppo ed economicità, dall'altro le vulnerabilità come quella riscontrata in ReportLab possono lasciare le organizzazioni esposte ai cyberattacchi.
OPSWAT SBOM protegge la catena di fornitura del software fornendo un inventario completo dei componenti per il codice sorgente e i container. Supporta oltre 10 linguaggi, tra cui Java, JavaScript, Go, PHP e Python, oltre 5 milioni di componenti software open-source di terze parti e utilizza un database di oltre 17.000 vulnerabilità provenienti dal National Vulnerability Database (NVD) e da GitHub (GHSA).
OPSWAT MetaDefender Core, con le sue funzionalità SBOM integrate, consente alle organizzazioni di affrontare in modo proattivo questi rischi. MetaDefender Core analizza le applicazioni software e le dipendenze, identificando la presenza di vulnerabilità note come CVE-2023-33733 all'interno dei componenti elencati. Questo permette agli sviluppatori e ai team di sicurezza di dare priorità alle attività di patch e di mitigare i rischi per la sicurezza prima che possano essere sfruttati.
Pensieri conclusivi
La ricerca degli OPSWAT Graduate Fellows sulla vulnerabilità di ReportLab (CVE-2023-33733) serve a ricordare l'importanza di misure di sicurezza proattive nel ciclo di vita dello sviluppo del software. Sfruttando strumenti come OPSWAT MetaDefender Core, le organizzazioni possono ottenere informazioni cruciali sulle dipendenze del software e identificare potenziali vulnerabilità prima che vengano sfruttate dagli aggressori.
Inoltre, OPSWAT offre una suite completa di soluzioni di cybersecurity che vanno oltre la scansione delle vulnerabilità. Queste soluzioni forniscono il rilevamento delle minacce in tempo reale, la sicurezza dei dati e la protezione degli endpoint, salvaguardando le organizzazioni da un'ampia gamma di minacce informatiche. Adottando un approccio di sicurezza stratificato che include strumenti come MetaDefender Core, le organizzazioni possono sfruttare i vantaggi degli OSS riducendo al minimo i rischi di sicurezza associati.