Mozilla spiega l’interruzione di Firefox del gennaio 2022 che ha bloccato le connessioni

Il 13 gennaio 2022, gli utenti di Firefox di tutto il mondo hanno iniziato a segnalare problemi di connessione . Il browser non è riuscito a connettersi a nessun sito e gli utenti hanno segnalato blocchi e arresti anomali.

diagramma bloccato di mozilla firefox

Mozilla ha pubblicato una spiegazione tecnica dettagliata dell’incidente sul sito Web Mozilla Hacks dell’azienda il 2 febbraio 2022.

L’organizzazione ha ricevuto segnalazioni sul blocco di Firefox durante i tentativi di connessione il 13 gennaio 2022. All’epoca, ha visto che i rapporti sugli arresti anomali stavano aumentando ma non disponeva di molte informazioni sulla causa del problema.

Gli ingegneri di Mozilla hanno scoperto che una richiesta di rete causava il blocco degli utenti di Firefox. Gli ingegneri hanno esaminato le modifiche o gli aggiornamenti recenti, ma non ne hanno trovati che potessero causare il problema riscontrato dagli utenti.

Mozilla sospettava che il problema potesse essere stato causato da una recente modifica “invisibile” della configurazione da parte di uno dei provider cloud che utilizza per il bilanciamento del carico. L’organizzazione utilizza l’infrastruttura di diversi provider per servizi quali la segnalazione di arresti anomali, la telemetria, l’aggiornamento o la gestione dei certificati.

Le impostazioni non sono state modificate durante l’ispezione, ma gli ingegneri hanno notato che il servizio di telemetria stava servendo connessioni HTTP/3, cosa che non aveva mai fatto prima. HTTP/3 è stato disabilitato da Mozilla e gli utenti hanno finalmente potuto utilizzare nuovamente Firefox per connettersi ai servizi. L’impostazione HTTP/3 sul provider cloud è stata configurata con il valore automatico.

Mozilla ha studiato la questione in modo più dettagliato dopo che la questione più urgente era stata risolta. Tutte le connessioni HTTP/3 passano attraverso lo stack di rete Necko, ma i componenti Rust utilizzano una libreria chiamata viaduct per chiamare Necko.

Necko controlla se è presente un’intestazione e, in caso contrario, la aggiungerà. HTTP/3 si basa sull’intestazione per determinare la dimensione della richiesta. I controlli Necko fanno distinzione tra maiuscole e minuscole. Accadde ora che le richieste che transitavano per viadotto venissero automaticamente messe in minuscolo dalla biblioteca; ciò significava che qualsiasi richiesta tramite viaduct che aggiungesse un’intestazione della lunghezza del contenuto superava Necko ma incontrava problemi con il codice HTTP/3.

L’unico componente Rust che utilizza lo stack di rete e aggiunge un’intestazione della lunghezza del contenuto è il componente di telemetria del browser Web Firefox. Mozilla osserva che questo è stato il motivo per cui la disabilitazione della telemetria in Firefox ha risolto il problema sul lato utente. Anche la disabilitazione di HTTP/3 lo ha risolto.

Il problema causerebbe un ciclo infinito, che blocca tutte le ulteriori comunicazioni di rete perché “tutte le richieste di rete passano attraverso un thread di socket” secondo Mozilla.

Mozilla afferma di aver imparato diverse lezioni dalla questione. Sta esaminando tutti i sistemi di bilanciamento del carico e rivedendone le configurazioni in modo da evitare problemi futuri del genere. L’implementazione di HTTP/3 presso Google, che era il provider di servizi cloud in questione, non è stata annunciata. Infine, Mozilla prevede di eseguire più test di sistema in futuro con “diverse versioni HTTP”.

Parole di chiusura

Mozilla ha reagito prontamente alla situazione di emergenza e l’ha risolta. Potrebbe aver danneggiato la reputazione e alcuni utenti potrebbero essere passati a un browser diverso nel processo. Mozilla dovrebbe chiedersi se sia una buona idea affidarsi all’infrastruttura cloud gestita dal suo più grande rivale nello spazio dei browser. Alcuni utenti di Firefox potrebbero anche suggerire che l’organizzazione esamini la gestione delle richieste da parte del browser per assicurarsi che quelle non necessarie, ad esempio la segnalazione di telemetria o la segnalazione di arresti anomali, non bloccheranno mai le connessioni che l’utente tenta di stabilire in futuro.