Разработчики платформы децентрализованных коммуникаций Matrix предупредили о выявлении критических уязвимостей в библиотеках matrix-js-sdk, matrix-ios-sdk и matrix-android-sdk2, позволяющих получить доступ к сообщениям, передаваемым в чатах со сквозным шифрованием (E2EE). Уязвимости вызваны ошибками в отдельных реализациях протокола Matrix и не являются проблемами самого протокола. В настоящее время, проектом выпущены обновления проблемных SDK и части построенных на их основе клиентских приложений.
Для успешного совершения атаки требуется обращение к подконтрольному атакующим домашнему серверу (homeserver, сервер для хранения истории и учётных записей клиентов). Проблема затрагивает основной Matrix-клиент Element (бывший Riot) для Web, настольных систем, iOS и Android, а также сторонние клиентские приложения, включая Cinny, Beeper, SchildiChat, Circuli и Synod.im. Проблема не проявляется в библиотеках matrix-rust-sdk, hydrogen-sdk, Matrix Dart SDK, mautrix-python, mautrix-go и matrix-nio, а также в приложениях Hydrogen, ElementX, Nheko, FluffyChat, Syphon, Timmy, Gomuks и Pantalaimon.
Выделяются три основных сценария проведения атаки:
- Администратор Matrix-сервера может нарушить работу верификации на основе emoji (SAS, Short Authentication Strings) при использовании перекрёстных подписей и выдать себя за другого пользователя. Проблема вызвана уявзимостью (CVE-2022-39250) в коде matrix-js-sdk, связанной со смешиванием обработки идентификаторов устройств и ключей перекрестной подписи.
- Контролирующий работу сервера атакующий может подделать отправителя, заслуживающего доверие, и использовать фиктивные ключи для перехвата сообщений от других пользователей. Проблема вызвана уязвимостью в matrix-js-sdk (CVE-2022-39251), matrix-ios-sdk (CVE-2022-39255) и matrix-android-sdk2 (CVE-2022-39248), из-за которой клиент некорректно принимал адресованные устройствам сообщения, зашифрованные с использованием протокола Megolm вместо Olm, приписывая сообщения отправителю Megolm, а не фактическому отправителю.
- Используя упомянутые в предыдущем пункте уязвимости администратор сервера также может добавить фиктивный запасной ключ в пользовательскую учётную запись.