Matrix è un protocollo di messaggistica istantanea aperto. È progettato per consentire agli utenti di comunicare tramite chat online, voice over IP e chat video.
Di recente, gli sviluppatori della piattaforma di comunicazione decentralizzata "Matrix" hanno pubblicato un avviso riguardante diverse vulnerabilità critiche rilevate nelle librerie matrix-js-sdk, matrix-ios-sdk e matrix-android-sdk2, che consentono agli amministratori del server di impersonare altri utenti e leggere i messaggi di chat crittografati end-to-end (E2EE).
Si afferma che per portare a termine con successo un attacco è necessario l'accesso a un server domestico controllato dagli aggressori (server domestico: un server utilizzato per memorizzare la cronologia e gli account dei clienti). L'utilizzo della crittografia end-to-end lato client impedisce all'amministratore del server di interferire con la messaggistica, ma le vulnerabilità identificate consentono di aggirare questa protezione.
I problemi riguardano il client principale di Element Matrix (precedentemente Riot) per Web, desktop, iOS e Android, nonché applicazioni client di terze parti come Cinny, Beeper, SchillidiChat, Circuli e Synod.im.
Le vulnerabilità non compaiono nelle librerie matrix-rust-sdk, hydrogen-sdk, Matrix Dart SDK, mautrix-python, mautrix-go e matrix-nio, così come Hydrogen, ElementX, Nheko, FluffyChat, Siphon, Timmy, Applicazioni Gomuks e Pantalaimon.
Si noti che i problemi di gravità critica sono problemi di implementazione in matrix-js-sdk e derivati e non sono problemi di protocollo in Matrix. L'ultima versione del documento dei ricercatori che abbiamo visto ritrae erroneamente Element come "il client Matrix di riferimento" e confonde errori di implementazione di gravità maggiore con critiche al protocollo di gravità inferiore.
Esistono tre principali scenari di attacco:
- L'amministratore del server Matrix può interrompere la verifica basata su emoji (SAS, Short Authentication Chains) utilizzando firme incrociate e impersonando un altro utente. Il problema è causato da una vulnerabilità (CVE-2022-39250) nel codice matrix-js-sdk relativo alla combinazione di gestione dell'ID dispositivo e chiavi di firma incrociata.
- Un utente malintenzionato che controlla il server può impersonare un mittente attendibile e passare una chiave falsa per intercettare i messaggi di altri utenti. Il problema è dovuto a una vulnerabilità in matrix-js-sdk (CVE-2022-39251), matrix-ios-sdk (CVE-2022-39255) e matrix-android-sdk2 (CVE-2022-39248), che ha causato il Il client accetta erroneamente messaggi indirizzati a dispositivi crittografati utilizzando il protocollo Megolm anziché Olm , attribuendo i messaggi al mittente Megolm anziché al mittente effettivo.
- Sfruttando le vulnerabilità citate nel paragrafo precedente, l'amministratore del server può anche aggiungere una chiave di riserva fittizia all'account utente per estrarre le chiavi utilizzate per crittografare i messaggi.
I ricercatori che hanno identificato la vulnerabilità hanno anche dimostrato attacchi che aggiungono un utente di terze parti a una chat o collegano un dispositivo di terze parti all'utente. Questi attacchi sfruttano il fatto che i messaggi di servizio utilizzati per aggiungere utenti alla chat non sono collegati alle chiavi del creatore della chat e possono essere generati dall'amministratore del server.
Gli sviluppatori del progetto Matrix hanno classificato queste vulnerabilità come minori , poiché tali manipolazioni non sono specifiche di Matrix e interessano solo i client basati sul protocollo, ma ciò non significa che passeranno inosservate: se un utente viene sostituito, verrà visualizzato nell'elenco degli utenti della chat, e quando viene aggiunto un dispositivo, verrà visualizzato un avviso e il dispositivo verrà contrassegnato come non verificato (in questo caso, immediatamente dopo l'aggiunta del dispositivo non autorizzato, inizierà a ricevere le chiavi pubbliche necessarie per decifrare i messaggi).
Noterai che matrix-rust-sdk, Hydrogen-sdk e altri SDK di XNUMXa e XNUMXa generazione non sono stati interessati dai bug nella causa principale dei problemi critici qui. Questo è esattamente il motivo per cui abbiamo lavorato per sostituire gli SDK di prima generazione con un'implementazione pulita e accuratamente scritta di Rust sotto forma di matrix-rust-sdk, completa di un audit pubblico indipendente in corso.
Le vulnerabilità sono causate da errori nelle singole implementazioni del protocollo Matrix e non rappresentano un problema del protocollo stesso. Il progetto ha già rilasciato aggiornamenti per gli SDK interessati e per alcune delle applicazioni client basate su di essi.
Infine, se siete interessati ad approfondire l'argomento , potete trovare maggiori dettagli al seguente link.