Aggiornamento di sicurezza critico per Flarum core (v1.6.2)
Descrizione
Se non hai ancora aggiornato alla v1.6.2 o successiva, fallo immediatamente. I dettagli della vulnerabilità sono pubblici e il tuo forum potrebbe essere sfruttato in modo dannoso.
Versioni interessate:
- v1.5.0 a v1.6.1 - ⚠️ Interessato
- v1.4.1 e precedenti - ✅ Non interessato
Istruzioni di aggiornamento SSH composer
Aggiornamento all'ultima versione:
composer update --prefer-dist --no-dev -a -W
Verifica di essere su v1.6.2:
composer show flarum/core
Pulisci la cache:
php flarum cache:clear
Prefazione
Venerdì 18 novembre 2022 alle 11:57 UTC, abbiamo ricevuto una segnalazione di una vulnerabilità critica cross-site scripting (XSS) nel core di Flarum tramite huntr.dev, che interessava le versioni dalla v1.5.0 alla v1.6.1.
Questa vulnerabilità è correlata al processo di impostazione dei titoli delle pagine lato client e server e alla possibile conversione delle stringhe del titolo in nodi HTML DOM.
I dettagli di questa vulnerabilità sono stati divulgati sul canale del team di Flarum Discord alle 12:08 UTC. Il punteggio CVE della vulnerabilità era 9.0, che è un punteggio CVE estremamente alto.
Questo è stato corretto grazie a una combinazione di sforzi di più sviluppatori e spinto al ramo principale del core alle 21:09 UTC. Dopo aver verificato che la patch ha funzionato come previsto e non ha avuto effetti evidenti su altre aree del core e delle estensioni in bundle, è stata rilasciata come v1.6.2 alle 22:21 UTC.
Cosa ha causato la vulnerabilità?
Il sistema del titolo della pagina di Flarum consentiva la conversione degli input del titolo della discussione in nodi HTML DOM durante il rendering (visitando una pagina di discussione). Questa modifica è stata apportata nella v1.5.0 e non è stata notata.
Ciò consentiva a qualsiasi utente di digitare markup HTML dannoso all'interno dell'input dell'utente del titolo della discussione, tramite una nuova discussione o rinominandone una esistente, e farlo eseguire sui browser client. L'inserimento di markup HTML finto dannoso, come <img src=x onerror=alert(document.domain)>
ha provocato la visualizzazione di una finestra di avviso sul forum. Questo attacco potrebbe anche essere modificato per eseguire richieste AJAX per conto di un utente, eventualmente cancellando discussioni, modificandone le impostazioni o il profilo o persino modificando le impostazioni sul pannello di amministrazione se l'attacco era mirato a un utente privilegiato.
Il vettore CVSS stimato per questa vulnerabilità è CVSS:3.1/AV:N/AC:L/PR:L/UI:R/S:C/C:H/I:H/A:H
, che risulta in un punteggio CVE di 9. Vedi la suddivisione del punteggio CVSS.
Un avviso di sicurezza è stato pubblicato su GitHub con informazioni dettagliate sulla vulnerabilità: https://github.com/flarum/framework/security/advisories/GHSA-7x4w-j98p-854x. In attesa dell'emissione del CVE.
Ripartizione CVSS
Vettore di attacco: rete
Questo attacco viene eseguito su una rete senza che sia richiesto l'accesso fisico o locale. La rete non deve essere adiacente.
Complessità di attacco: bassa
L'attacco può essere eseguito in modo relativamente semplice e interessare tutti i forum, nonostante le loro configurazioni individuali. È ripetibile in tutte le condizioni.
Interazione dell'utente: richiesta
L'utente deve essere in grado di creare una nuova discussione o rinominare il titolo di una esistente.
Ambito: modificato
Il componente vulnerabile è il forum Flarum. Il componente interessato è il browser dell'utente, pertanto l'ambito è cambiato.
Impatto sulla riservatezza: alto
I dettagli di un utente interessato potrebbero essere completamente recuperati dall'attaccante tramite una richiesta AJAX dannosa.
Impatto sull'integrità: alto
I dettagli di un utente interessato potrebbero essere modificati dall'attaccante tramite una richiesta AJAX dannosa.
Impatto sulla disponibilità: alto
Se un amministratore del forum è stato colpito, una richiesta AJAX dannosa potrebbe modificare le impostazioni del forum nella dashboard di amministrazione e provocare un denial of service completo del forum. Ciò potrebbe avvenire iniettando codice Javascript non funzionante nell'intestazione personalizzata, risultando in un frontend del forum non funzionante.
Come è stata risolta la vulnerabilità?
Quando si imposta il titolo della pagina, ora impediamo che il titolo venga valutato tramite un elemento HTML temporaneo che era precedentemente utilizzato per visualizzare correttamente le entità HTML non elaborate.
Ora usiamo un DOMParser
che ha lo scripting disabilitato e si trova in un contesto separato dall'elemento window. Ciò impedisce gli attacchi XSS e consente la corretta visualizzazione delle entità HTML non elaborate. Una correzione più appropriata per il problema di visualizzazione delle entità grezze verrà esaminata in ulteriori versioni (vedere flarum/framework#3685).
#(da modificare) Per maggiori informazioni, vedere il commit che corregge questa vulnerabilità: flarum/core@440bed8
Cosa abbiamo fatto bene?
Tutti i principali sviluppatori disponibili hanno accettato il rapporto per correggere la vulnerabilità il prima possibile, una patch iniziale è stata proposta entro un paio d'ore e una patch finale ha ricevuto la prima approvazione entro 7 ore, dopo aver cercato a fondo la causa principale e come è stata introdotto in primo luogo.
Cosa potremmo migliorare?
Al momento della scoperta, nessuno sviluppatore online aveva la possibilità di redigere un'informativa sulla sicurezza su GitHub. Questo ci avrebbe fornito un modo sicuro per tentare di sviluppare insieme una patch e rivedere il codice più facilmente. Invece, abbiamo utilizzato un PR pubblico che non è l'ideale.
Al momento del rilascio, abbiamo faticato per un po' di tempo con la diramazione e la suddivisione secondaria dal nostro monorepo per mancanza di documentazione e uso esteso nella nostra utility CLI.
Come possiamo evitare che ciò accada di nuovo?
Una suite di test automatizzati JavaScript avrebbe potuto aiutare a rilevare il problema introdotto che non è stato notato durante le revisioni. Sono già in corso lavori per implementare Jest per una delle prossime versioni. I test automatizzati avranno un effetto enorme nell'evitare questi problemi in futuro.
Fonte avviso originale: https://discuss.flarum.org/d/31999-critical-security-update-to-flarum-core-v162