Squidbleed: 29-anno-vecchio bug trovato in Squid Proxy Proprio dal modello di intelligenza artificiale che è stato bandito poco dopo

Ieri ho avuto oltre il Fable e Myth Ban Non appena l'inchiostro si è asciugato, emerge una storia che lo arrotonda con una certa ironia.

Lo stesso modello che Washington aveva appena tolto dalla rete era recentemente impegnato a rintracciare un difetto di sicurezza di quasi 30 anni fa in uno dei software proxy più utilizzati al mondo.

Pubblicato con un occhiolino su calif.io - Incontra Squidbleed.

Che cosa è Squid comunque?

Squid è un proxy web ampiamente utilizzato che può essere trovato principalmente nelle reti aziendali, nelle scuole e ovunque il traffico debba essere filtrato, memorizzato nella cache o monitorato. Chiunque si sia mai seduto in ufficio o nel Wi-Fi di un aeroporto e abbia notato che alcune pagine sono bloccate, spesso dietro c'è Squid. Questa cosa è un'istituzione.

E come a volte accade con le istituzioni: Sotto la superficie ben tenuta a volte sonnecchia il codice che viene da un'altra epoca.

Il bug: Un viaggio indietro nel tempo fino al 1997

Il nucleo di Squidbleed si trova nel parser FTP di Squid, sì, FTP, il protocollo che la maggior parte dei browser moderni ha cancellato dal loro repertorio anni fa. Tuttavia, Squid supporta ancora FTP per impostazione predefinita.

Il problema: FTP non ha un formato standardizzato leggibile dalla macchina per gli elenchi di file. Ogni server in qualche modo consegna questo come un blocco di testo, e Squid deve analizzare questo miscuglio. Un impegno da 18 gennaio 1997 (Per i lettori più giovani: che è più vecchio di Google!) ha incorporato un trattamento speciale per i server FTP NetWare, che impostano tra timestamp e nome del file quattro invece di uno spazio.

La correzione quindi: Un ciclo che salta lo spazio bianco fino all'inizio del nome del file.

Il problema con questo: strchr() una funzione di libreria standard C restituisce un hit anche se si utilizza il terminatore null \0 Alla ricerca. Ciò significa: Se nessun nome di file segue dopo il timestamp, il puntatore semplicemente continua oltre la fine del buffer. E via. E via. Fino a quando non incontra dati che non fanno più parte dell'elenco FTP.

Quello che succede dopo è l'omonimo problema: Il proxy legge i dati heap stranieri e li invia all'attaccante come nome di file presunto.

Troppo complesso? È anche più facile:

Ok, immagina di essere un bibliotecario in una biblioteca enorme. Il vostro compito è quello di ottenere libri per i vostri visitatori. Qualcuno entra e dice: "Prendete il libro dallo scaffale 7!" Quindi andate, prendetelo, fatelo. Questo è Squid: Un intermediario che porta le cose per gli altri.

La scatola delle note

In questa libreria c'è anche una vecchia casella di note per i server FTP. FTP è un sistema così antico per il trasferimento di file. Immaginatelo come un archivio molto, molto vecchio degli anni '80, che nessuno usa più, ma che è ancora nell'angolo perché nessuno l'ha cancellato. Quando qualcuno chiede "cosa c'è in questo archivio?", Squid va a leggere le etichette delle cartelle e le scrive su una nota.

Il problema con la nota

Ora arriva l'errore. Squid legge l'etichetta di una cartella, ad esempio "Data: 16 gennaio, nome del file: …" e quindi cerca il nome del file. Usa un piccolo aiutante chiamato strchr, che dice: "Procedere fino a trovare qualcosa che non sia uno spazio."

Ma cosa succede se non c'è un nome di file dopo la data? Il buon senso dice: «Allora smettila di cercare». strchr Ma non la pensi così. Continua a cercare. Oltre la nota. Oltre il portafoglio. Oltre l'armadietto. Continua a leggere quello che non va.

Cosa c'e' che non va?

Nell'analogia bibliotecaria: Accanto ad esso ci sono le note di altri visitatori. Documenti su cui si dice: "L'utente Max ha effettuato l'accesso con la password XY oggi" o "L'utente Lisa ha appena inserito il suo numero di carta di credito". Squid legge tutto questo perché strchr non ha interrotto la ricerca e poi l'ha rinviata come "nome del file" alla persona che ha chiesto.

Cosa può ottenere un aggressore con esso?

Squid ricicla i buffer di stoccaggio interni. Un buffer 4KB che conteneva appena la richiesta HTTP di un altro utente dello stesso proxy può essere riutilizzato per l'elenco FTP poco dopo senza eliminare il vecchio contenuto. Il overread poi legge esattamente questi resti e li invia all'attaccante.

In un linguaggio semplice: Intestazioni di autorizzazione, password, chiavi API. Qualunque altro utente dello stesso proxy semplicemente invia attraverso la linea. Oops.

I limiti sono reali: Solo HTTP non crittografato è interessato (HTTPS viene eseguito come un tunnel CONNECT opaco attraverso il proxy) e l'attaccante ha bisogno di un server FTP che il proxy può effettivamente raggiungere. Tuttavia, la porta TCP 21 è inclusa nell'ACL standard di Squid. Non è richiesto alcuno sforzo di configurazione, purché sia possibile eseguire un server FTP da qualche parte.

Chi ha trovato questo?

Ecco la parte che mi infastidisce particolarmente come qualcuno che ha scritto dello striscione Fable ieri. Il team di ricerca sulla sicurezza di Calif.io ha Anteprima di Claude Mythos (cioè il modello che è stato bandito da Washington poco dopo) era già stato inviato al codice sorgente di Squid in aprile. Con l'istruzione di esaminare il codice della macchina dello stato FTP in modo più dettagliato.

Il modello ha trovato il bug quasi immediatamente e lo ha giustificato con riferimento allo standard C11: strchr(w _space, '\0') Restituisce un puntatore non NULL per specifica perché il terminatore nullo fa parte della stringa. Un dettaglio che nessuno sembra aver notato in quasi 30 anni di revisione del codice, riscritture e audit.

A proposito, la correzione è molto semplice, due ulteriori zero controlli prima del strchr-chiamare:

- while (strchr(w _space, *copyFrom)) + while (*copyFrom && strchr(w _space, *copyFrom))

Un giorno di lavoro per i manutentori. Quasi tre decenni al buio.

Cosa fare ora

Chi gestisce Squid: Spegnere FTP, A meno che non ne abbiate bisogno attivamente. Chrome ha abbandonato il supporto FTP anni fa, e anche Firefox lo ha fatto. Coloro che non inviano traffico FTP legittimo attraverso il proprio proxy (cautamente sospettano che il 2026 sarà il massimo) possono semplicemente disabilitare la funzione ed eliminare l'intera superficie di attacco.

Addendum: Per tutti gli altri: Calamari 7.6 (Pubblicato l'8 giugno 2026) e calamaro 8 Contiene già la patch. (Grazie Golem.de per la segnalazione). L'advisory ufficiale è stato pubblicato il 24 giugno.. Coloro che sono ancora su versioni precedenti dovrebbero aggiornare.

La vera conclusione

Squidbleed non è tecnicamente un RCE sconvolgente, non un miracolo zero-click. E' un cumulo sovrapposto con un impatto situazionale. Ma è sintomatico di qualcosa che accade regolarmente nel mondo open source: Codice che è stato in esecuzione per decenni, non è più veramente capito da nessuno, e in cui le proprietà sottili C tranquillamente marciscono.

Che un modello di intelligenza artificiale di tutte le persone ha trovato questo bug, vale a dire il modello, che il governo degli Stati Uniti ha subito classificato come troppo pericoloso Ha una certa qualità. La capacità di trovare difetti di sicurezza è apparentemente esattamente ciò che preoccupava Washington. Se questo è un argomento a favore o contro il divieto, lo lascio a voi.

La risposta si trova da qualche parte tra le righe di ieri.