Detectaron varias vulnerabilidades que compromenten muchos clientes de Matrix
Hace poco los desarrolladores de la plataforma de comunicaciones descentralizadas «Matrix» dieron a conocer una advertencia sobre varias vulnerabilidades que fueron detectadas y que son críticas en las bibliotecas matrix-js-sdk, matrix-ios-sdk y matrix-android-sdk2 que permiten a los administradores del servidor hacerse pasar por otros usuarios y leer mensajes de extremo a extremo chats encriptados (E2EE).
Se menciona que para completar con éxito un ataque, se debe acceder a un servidor doméstico controlado por los atacantes (servidor doméstico: un servidor para almacenar el historial y las cuentas de los clientes). El uso de cifrado de extremo a extremo en el lado del cliente no permite que el administrador del servidor intervenga en la mensajería, pero las vulnerabilidades identificadas permiten eludir esta protección.
Los problemas afectan al cliente principal de Element Matrix (antes Riot) para Web, escritorio, iOS y Android, así como a aplicaciones de clientes de terceros, como Cinny, Beeper, SchildiChat, Circuli y Synod.im.
Las vulnerabilidades no aparecen en las bibliotecas matrix-rust-sdk, hydrogen-sdk, Matrix Dart SDK, mautrix-python, mautrix-go y matrix-nio, así como en Hydrogen, ElementX, Nheko, FluffyChat, Siphon, Timmy, Gomuks y Aplicaciones Pantalaimon.
Tenga en cuenta que los problemas de gravedad crítica son problemas de implementación en matrix-js-sdk y derivados, y no son problemas de protocolo en Matrix. La última versión del artículo de los investigadores que hemos visto presenta incorrectamente a Element como «el cliente Matrix de referencia» y confunde los errores de implementación de mayor gravedad con la crítica del protocolo de menor gravedad.
Hay tres escenarios principales de ataque:
- El administrador del servidor de Matrix puede romper la verificación basada en emoji (SAS, Cadenas de autenticación cortas) al usar firmas cruzadas y hacerse pasar por otro usuario. El problema se debe a una vulnerabilidad (CVE-2022-39250) en el código matrix-js-sdk relacionado con la combinación del manejo de ID de dispositivos y claves de firma cruzada.
- Un atacante que controla el servidor puede suplantar a un remitente confiable y pasar una clave falsa para interceptar mensajes de otros usuarios. El problema se debe a una vulnerabilidad en matrix-js-sdk (CVE-2022-39251), matrix-ios-sdk (CVE-2022-39255) y matrix-android-sdk2 (CVE-2022-39248), que causó la cliente acepte incorrectamente mensajes dirigidos a dispositivos cifrados mediante el protocolo Megolm en lugar de Olm , atribuyendo los mensajes al remitente de Megolm en lugar del remitente real.
- Al explotar las vulnerabilidades mencionadas en el párrafo anterior, el administrador del servidor también puede agregar una clave de repuesto ficticia a la cuenta de usuario para extraer las claves utilizadas para cifrar los mensajes.
Los investigadores que identificaron la vulnerabilidad también demostraron ataques que agregan un usuario de terceros a un chat o conectan un dispositivo de terceros al usuario. Los ataques se basan en el hecho de que los mensajes de servicio utilizados para agregar usuarios al chat no están vinculados a las claves del creador del chat y pueden ser generados por el administrador del servidor.
Los desarrolladores del proyecto Matrix clasificaron estas vulnerabilidades como menores, ya que tales manipulaciones no son propias de Matrix y solo afectan a clientes basados en el protocolo, pero esto no quiere decir que no pasarán desapercibidas: si se sustituye un usuario, se mostrará en la lista de usuarios del chat, y cuando se agregue un dispositivo, se mostrará una advertencia y el dispositivo se marcará como no verificado (en este caso, inmediatamente después de agregar el dispositivo no autorizado, comenzará a recibir las claves públicas necesarias para descifrar los mensajes.
Notará que matrix-rust-sdk, hydrogen-sdk y otros SDK de segunda y tercera generación no se vieron afectados por los errores en la causa raíz de los problemas críticos aquí. Esta es precisamente la razón por la que hemos estado trabajando para reemplazar los SDK de primera generación con una implementación de Rust limpia y cuidadosamente escrita en forma de matrix-rust-sdk, completa con una auditoría pública independiente en curso.
Las vulnerabilidades son causadas por errores en implementaciones individuales del protocolo Matrix y no son problemas del protocolo en sí. Actualmente, el proyecto ha publicado actualizaciones para los SDK problemáticos y algunas de las aplicaciones cliente creadas sobre esta base.
Finalmente si estás interesado en poder conocer más al respecto, puedes consultar los detalles en el siguiente enlace.