CVE-2026-80104, una vulnerabilità 9.8-severity di path traversal e scrittura arbitraria di file nel framework applicativo AI DB-GPT, indica v0.8.1 come versione che la corregge. È un’indicazione corretta ma pericolosamente incompleta: v0.8.1 è l’unica versione rilasciata che contiene la correzione.

Che cosa abbiamo verificato e come

La protezione è una funzione chiamata _validate_upload_filename, aggiunta il 21 maggio 2026, che rifiuta byte nulli, percorsi POSIX e Windows assoluti e qualsiasi nome file che contenga più di un componente di percorso. Abbiamo recuperato il file sorgente interessato al tag v0.8.1 e al tag v0.8.2 e li abbiamo confrontati. In v0.8.1 la funzione è presente. In v0.8.2 — rilasciata questa mattina — non c’è più, e l’handler legge direttamente filename = file.filename prima di unirlo alla directory di upload e scrivere i byte. Nessuna canonicalizzazione, nessun controllo di contenimento.

Come una correzione scompare

La perdita risale a un branch di funzionalità tagliato prima che la correzione venisse inserita. Quando quel branch è stato unito a giugno, la sua versione del file — precedente al 21 maggio — ha sostituito quella corretta. Nulla è stato ripristinato deliberatamente; la protezione è stata semplicemente sovrascritta da una copia più vecchia della stessa funzione, ed è per questo che nessuna voce di changelog la registra.

Che cosa sbaglia il framing più comune

Il campo "patched version" di un avviso viene universalmente letto come "questa versione e tutto ciò che viene dopo." È ciò che assumono gli scanner, ciò su cui agiscono i bot di dipendenza e ciò che conclude un operatore. Qui il campo è un punto, non un pavimento: un team che legge l’avviso e aggiorna all’ultima release fa esattamente la cosa sbagliata e finisce su codice vulnerabile credendo di aver rimediato. L’avviso non è sbagliato: viene letto con un’assunzione che qui non vale.

L’autenticazione peggiora le cose

L’unica dipendenza del percorso di upload è una funzione il cui sorgente è commentato "Mock User Info" e che restituisce un oggetto utente con role="admin" sia che venga fornito un header utente sia che non venga fornito. Entrambi i rami sono admin. Questo è il codice attualmente rilasciato, non un tag abbandonato — quindi il primitive di scrittura file è raggiungibile senza autenticazione.