В большинстве клиентских приложений для платформы децентрализованных коммуникаций Matrix выявлены уязвимости (CVE-2021-40823, CVE-2021-40824), позволяющие получить сведения о ключах, использованных для передачи сообщений в чатах со сквозным шифрованием (E2EE). Атакующий, скомпрометировав одного из пользователей чата, может расшифровать сообщения, ранее отправленные этому пользователю из уязвимых клиентских приложений.
Для успешной эксплуатации требуется наличие доступа к учётной записи получателя сообщений. Доступ может быть получен как через утечку параметров учётной записи, так и через взлом Matrix-сервера, через который подключается пользователь. Наибольшую опасность уязвимости представляют для пользователей шифрованных чат-комнат, к которым подключены Matrix-серверы, подконтрольные злоумышленникам. Администраторы подобных серверов могут попытаться выдать себя за пользователей сервера для перехвата сообщений отправляемых в чат с уязвимых клиентских приложений.
Уязвимости вызваны логическим ошибками в реализациях механизма предоставления повторного доступа к ключам, предложенных в matrix-js-sdk matrix-android-sdk2 matrix-rust-sdk FamedlySDK Nheko ≤ 0.8.2. Реализации на базе библиотек matrix-ios-sdk, matrix-nio и libolm уязвимостям не подвержены.
Соответственно, уязвимости проявляются во всех приложениях, заимствовавших проблемный код, и не касаются непосредственно протоколов Matrix и Olm/Megolm. В частности, проблема затрагивает основной Matrix-клиент Element (бывший Riot) для Web, настольных систем и Android, а также сторонние клиентские приложения и библиотеки, включая FluffyChat, Nheko, Cinny и SchildiChat. Проблема не проявляется в официальном клиенте для платформы iOS, а также в приложениях Chatty, Hydrogen, mautrix, purple-matrix и Syphon.
Уязвимости были выявлены в ходе аудита безопасности клиента Element. Исправления в настоящее время уже выпущены для всех проблемных клиентов. Пользователям рекомендуется срочно установить обновления, а до установки обновления перевести клиенты в режим offline. Свидетельства об эксплуатации уязвимости до публикации исправления отсутствуют. По штатным логам клиента и сервера определить факт атаки невозможно, но так как для атаки требуется компрометация учётной записи администраторы могут проанализировать наличие подозрительных входов по логам аутентификации на своих серверах, а пользователи оценить список привязанных к своей учётной записи устройств на предмет недавних переподключений и смены статуса доверия.
Механизм повторного доступа к ключам (key sharing), в реализации которого были найдены уязвимости, позволяет клиенту, у которого нет ключей для расшифровки сообщения, запросить ключи у устройства отправителя или других своих устройств. Например, подобная возможность необходима для обеспечения расшифровки старых сообщений на новом устройстве пользователя или в случае потери пользователем имевшихся ключей. Спецификация протокола предписывает по умолчанию не отвечать на запросы ключей и отправлять их автоматически только верифицированным устройствам того же пользователя. К сожалению, в практических реализациях данное требование не было обеспечено и запросы на отправку ключей обрабатывались без должной идентификации устройства.