// 4 ZERO-DAY · 12 CVE · 14 EXPLOIT NELLE ULTIME 24H
La vulnerabilità ZDI-26-478 dimostra come un fix per CVE-2021-43008 abbia introdotto un nuovo vettore RCE tramite catastrophic backtracking in preg_match().

Il 29 luglio 2026 TrendAI Zero Day Initiative ha pubblicato l'advisory ZDI-26-478 su una falla di esecuzione remota in Adminer, popolare strumento di amministrazione database in PHP. La novità non è solo la vulnerabilità in sé: è che questa nasce da un errore di implementazione introdotto cinque anni prima per sanare CVE-2021-43008, dimostrando come le correzioni affrettate possano generare vettori di attacco più complessi di quelli originari.

Il ricercatore 0daystolive, in collaborazione con ZDI, ha scoperto che il filtro regex aggiunto nel 2021 per bloccare istruzioni ATTACH in SQLite è aggirabile tramite un meccanismo di type confusion in PHP: quando preg_match() restituisce false per superamento del limite di backtracking, il codice lo interpreta come 0 (nessun match), aprendo il passaggio all'esecuzione di codice arbitrario.

Punti chiave
  • La vulnerabilità CVE-2026-15686 è un bypass della patch per CVE-2021-43008, non una falla nuova nello stesso componente.
  • Il meccanismo di exploit sfrutta il catastrophic backtracking in un regex con possessive quantifier *+ e commenti SQLite --, forzando preg_match() a restituire false.
  • Il codice vulnerabile controlla solo valori truthy, trattando false come 0: il filtro ATTACH viene bypassato e consente la creazione di file PHP eseguibili.
  • L'autenticazione è obbligatoria per l'exploit, ma la superficie di attacco resta significativa in ambienti con credenziali deboli o già compromesse.

Il percorso: da CVE-2021-43008 a ZDI-26-478

La storia inizia nel 2021, quando CVE-2021-43008 rivelò che Adminer permetteva a utenti autenticati di creare file PHP attraverso istruzioni ATTACH in SQLite. La patch rispondeva con un filtro regex progettato a intercettare e bloccare queste istruzioni prima dell'esecuzione. Secondo le fonti convergenti, quel filtro è rimasto vulnerabile a una classe di attacco non prevista: il catastrophic backtracking.

L'advisory ZDI-26-478 descrive la falla come "Incorrect Check of Function Return Value" nel metodo multi_query: la descrizione tecnica, apparentemente generica, nasconde un problema specifico del sistema di tipi di PHP. La funzione preg_match() restituisce int|false — 1 per match trovato, 0 per nessun match, false per errore o superamento dei limiti di backtracking. Il codice della patch controllava solo se il risultato era "vero" nel senso booleano di PHP, quindi 1. Sia 0 che false venivano letti allo stesso modo: nessun match rilevato, procedere con l'operazione.

Il meccanismo: come il regex diventa un'arma

L'analisi tecnica di GitHub Security Advisory GHSA-3582-q6xq-5vf7 ricostruisce il pattern esatto: uno spazio opzionale definito come combinazione di whitespace, commenti blocco /* ... */, commenti riga # o --, con un possessive quantifier *+ che impedisce il backtracking regolare. L'aggressore genera circa 350.000 linee di commenti SQLite -- prima dell'istruzione ATTACH malevola.

Questa sequenza innesca un'esplosione combinatoria nel motore regex di PHP. Il backtracking esponenziale supera il limite interno, preg_match() restituisce false, e il codice vulnerabile — che non distingue false da 0 — considera il test superato. Il filtro crolla. L'istruzione ATTACH procede, creando un database SQLite con estensione .php contenente codice arbitrario eseguibile dal server web.

Il proof-of-concept documentato dalla fonte crea un file denominato lol.php nella directory di Adminer. La scelta del nome non è casuale: evidenzia che l'aggressore ha pieno controllo sul contenuto e sulla collocazione del payload, nel contesto del processo del server web.

"the code only checks for truthy values (1 for match), treating false the same as 0 (no match). This allows the ATTACH statement to bypass the security filter." — GitHub Security Advisory GHSA-3582-q6xq-5vf7

Timeline e disclosure coordinata

La vulnerabilità è stata riportata al vendor il 6 marzo 2026. Seguendo la procedura standard ZDI di circa 120 giorni per la risposta del vendor, l'advisory è stato pubblicato il 29 luglio 2026 con release coordinata. L'advisory ZDI conferma che Adminer ha rilasciato un aggiornamento correttivo, sebbene i dettagli specifici della versione patchata non siano completamente documentati nelle fonti disponibili: il PoC di ricerca utilizza la versione 5.4.2.

Il record CVE-2026-15686, consultabile su cve.org, risulta al momento in stato "reserved": conferma l'esistenza dell'identificatore senza ancora esporre la scheda tecnica completa. Questa combinazione — advisory ZDI dettagliata, analisi GitHub con codice sorgente e PoC, CVE ancora in chiusura — è tipica delle disclosure in corso di completamento.

Cosa fare adesso

  • Verificare se l'istanza Adminer in uso è aggiornata alla versione corretta successiva alla disclosure del 29 luglio 2026.
  • Rivalutare l'esposizione di Adminer in produzione: lo strumento è concepito per amministrazione, non dovrebbe essere accessibile da reti non affidabili.
  • Rivedere i controlli di autenticazione: l'exploit richiede credenziali valide, quindi la robustezza delle password e la rotazione in caso di compromissione precedente sono fattori mitiganti diretti.
  • Ispezionare i log per attività SQLite ATTACH o creazione di file .php in directory servite dal web server, pattern anomali data la natura dell'attacco documentato.

Perché questo caso cambia la prospettiva sui regex di sicurezza

La lezione di CVE-2026-15686 travalica Adminer. Ogni filtro di sicurezza basato su espressioni regolari in PHP — e non solo — deve confrontarsi con il comportamento edge-case di preg_match(). Il linguaggio restituisce tre stati semanticamente distinti compressi in un tipo int|false; il codice che non gestisce esplicitamente false come condizione di errore, anziché di mancato match, è tecnicamente fragile.

Il catastrophic backtracking non è una curiosità teorica. In questo caso è diventato il ponte tra un input apparentemente innocuo — commenti SQL — e l'esecuzione di codice remoto. La prossima volta che un team di sicurezza proporrà un regex come soluzione rapida per bloccare un vettore, questo caso offre un contro-modello concreto di come la soluzione rapida possa diventare il problema successivo.

Fonti

Le informazioni sono state verificate sulle fonti citate e aggiornate al momento della pubblicazione.

Fonti


Fonti e riferimenti
  1. zerodayinitiative.com
  2. cve.org
  3. github.com
  4. trendmicro.com