L'advisory ZDI-26-396 è stato pubblicato in coordinazione il 24 giugno 2026 da TrendAI Zero Day Initiative, circa due mesi dopo la segnalazione interna del 17 aprile. La vulnerabilità interessa X.Org Server, componente fondamentale dell'architettura grafica su Linux e sistemi Unix-like, e nasce da un errore di programmazione che sarebbe apparso elementare in una qualsiasi revisione di codice: un operatore di confronto invertito nella validazione della lunghezza di una richiesta GLX.
- L'advisory ZDI-26-396 documenta una vulnerabilità out-of-bounds read in X.Org Server, pubblicata con rilascio coordinato il 24 giugno 2026.
- La root cause è un operatore di confronto invertito (< invece di >) nel controllo di lunghezza della richiesta ChangeDrawableAttributes, che permette richieste malformate di superare la validazione.
- L'attacco richiede codice locale a basso privilegio e può causare disclosure di informazioni sensibili; l'escalation completa a root richiede il concatenamento con altre vulnerabilità.
- Il commit patch di Peter Hutterer su GitLab.freedesktop.org corregge il difetto e rimuove workaround obsoleti per bug di Mesa in quattro funzioni correlate.
Come un operatore invertito elude la validazione delle richieste GLX
Il difetto risiede nella gestione del campo numAttribs nelle funzioni __glXDisp_ChangeDrawableAttributes e __glXDispSwap_ChangeDrawableAttributes, che gestiscono la modifica degli attributi dei drawable GLX. Secondo l'advisory ZDI, il problema deriva dalla "mancanza di appropriata validazione dei dati forniti dall'utente, che può causare una lettura oltre la fine di una struttura dati allocata".
Il commit patch 6d459e4d di Peter Hutterer, pubblicato su GitLab.freedesktop.org, specifica con precisione il meccanismo: il controllo verifica se la dimensione calcolata della richiesta è minore di client->req_len, ma dovrebbe verificare se è maggiore. Con l'operatore invertito, una richiesta sottodimensionata — dove numAttribs dichiara più coppie di attributi di quanti i dati effettivi ne contengano — supera la validazione senza essere intercettata.
La dimensione calcolata utilizza l'espressione sizeof(xGLXChangeDrawableAttributesReq) + (req->numAttribs << 3), dove lo shift left di 3 bit equivale a una moltiplicazione per 8. Quando numAttribs è artificiosamente elevato rispetto alla lunghezza reale della richiesta, il controllo errato non rileva la discrepanza e la funzione DoChangeDrawableAttributes itera sulle coppie di attributi partendo dalla fine dell'header, leggendo oltre i dati effettivi della richiesta in memoria adiacente.
Da lettura arbitraria a potenziale scrittura controllata
La conseguenza immediata è una lettura out-of-bounds dalla memoria del server X, con esposizione di informazioni sensibili. Il commit patch documenta tuttavia un effetto più grave: la lettura può degenerare in scrittura out-of-bounds quando nei dati sovrascritti viene trovata una chiave GLX_EVENT_MASK. In quel caso, il valore corrispondente viene scritto nel campo eventMask della struttura pGlxDraw, aprendo a manipolazione controllata di strutture dati interne del server.
"The check tests whether the computed request size is LESS THAN client->req_len, but should test whether it is GREATER THAN. With the reversed operator, an undersized request passes validation." — Peter Hutterer, commit 6d459e4d
L'advisory ZDI caratterizza l'impatto come disclosure di informazioni sensibili, con la specifica che l'attaccante può sfruttare questa vulnerabilità in combinazione con altre vulnerabilità per eseguire codice arbitrario nel contesto di root. La fonte non documenta quali vulnerabilità aggiuntive siano necessarie per completare l'escalation, né fornisce dettagli su tecniche di concatenamento specifiche.
Il contesto del workaround: perché il bug è rimasto nascosto
Un aspetto rilevante emerge dal contenuto del commit patch: la correzione non si limita a invertire l'operatore, ma rimuove anche workaround tecnici introdotti in precedenza per bug di Mesa in funzioni correlate, tra cui GetFBConfigsSGIX, DestroyPixmap, DestroyWindow e GetDrawableAttributes. Questi workaround erano stati implementati per aggirare problemi noti nel driver grafico open-source, ma hanno complicato il percorso di auditing del codice GLX.
La presenza di codice di compatibilità storico, spesso non documentato adeguatamente nei commenti o separato in funzioni dedicate, costituisce un pattern ricorrente nella manutenzione di codebase mature come X.Org Server. In questo caso, il workaround ha probabilmente contribuito a offuscare la visibilità del controllo errato, che è rimasto invariato attraverso revisioni successive del codice.
Cosa fare adesso
Gli amministratori di sistema che gestiscono installazioni X.Org Server in ambienti multi-utente devono verificare la disponibilità dell'aggiornamento emesso da X.Org. La patch è identificabile dal commit 6d459e4d su GitLab.freedesktop.org, che corregge esplicitamente il reversed length check in ChangeDrawableAttributes.
Le priorità operative sono tre. Primo: aggiornare i server X.Org nelle infrastrutture dove utenti non privilegiati eseguono codice, in particolare server di virtualizzazione grafica e ambienti con accesso a socket X11. Secondo: verificare che le build del server X non contengano versioni precedenti del codice GLX con il controllo errato. Terzo: monitorare il repository freedesktop.org per eventuali advisory correlati alla rimozione dei workaround Mesa, che potrebbero rivelare ulteriori problematiche nella stessa area del codice.
Il brief non specifica versioni interessate di X.Org Server, né elenca distribuzioni che abbiano incluso la patch. Il CVE non risulta assegnato nell'advisory, e il punteggio CVSS non è riportato. Non emergono sovrapposizioni infrastrutturali che colleghino la vulnerabilità a campagne di attacco documentate.
Domande frequenti
Quali condizioni sono necessarie per sfruttare la vulnerabilità?
Secondo l'advisory ZDI, l'attaccante deve già disporre della capacità di eseguire codice a basso privilegio sul sistema target. La vulnerabilità non è remota.
Perché l'errore di un singolo operatore ha impatto di sicurezza elevato?
La funzione ChangeDrawableAttributes appartiene al percorso critico delle richieste GLX, esposto a tutte le applicazioni grafiche. Un controllo di validazione posizionato in questa fase agisce da gatekeeper per l'intero sottosistema; il suo fallimento permette lettura arbitraria dalla memoria del processo server X, che tipicamente gira con privilegi elevati.
La patch risolve solo l'operatore invertito?
No: il commit 6d459e4d corregge il controllo errato e rimuove simultaneamente workaround per bug di Mesa in quattro funzioni correlate, indicando una revisione più ampia della gestione degli attributi GLX.
Le informazioni sono basate sulla fonte citata e aggiornate al momento della pubblicazione.
Fonti
- http://www.zerodayinitiative.com/advisories/ZDI-26-396/
- https://gitlab.freedesktop.org/xorg/xserver/-/commit/6d459e4daf715bea8abdafa8fb130be2f8a1d145