Matrix는 개방형 인스턴트 메시징 프로토콜입니다. 사용자가 온라인 채팅, VoIP(Voice over IP) 및 화상 채팅을 통해 통신할 수 있도록 설계되었습니다.
최근 분산형 통신 플랫폼 "매트릭스" 개발사인 매트릭스 (Matrix)는 matrix-js-sdk, matrix-ios-sdk, matrix-android-sdk2 라이브러리에서 발견된 여러 심각한 취약점 에 대해 경고를 발표했습니다. 이 취약점을 통해 서버 관리자는 다른 사용자를 사칭하여 종단 간 암호화(E2EE)된 채팅 메시지를 읽을 수 있습니다.
공격을 성공적으로 완료하려면 공격자가 제어하는 홈 서버(고객 기록 및 계정을 저장하는 데 사용되는 서버)에 대한 접근 권한이 필요하다고 언급되어 있습니다 . 클라이언트 측에서 종단 간 암호화를 사용하면 서버 관리자가 메시지 전송에 개입할 수 없지만, 발견된 취약점을 통해 이러한 보호 조치를 우회할 수 있습니다.
이 문제는 Element Matrix의 주요 클라이언트 (이전 Riot)인 웹, 데스크톱, 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, Siphon, Timmy, Gomuks 및 Pantalaimon 응용 프로그램.
심각한 심각도 문제는 matrix-js-sdk 및 파생 상품의 구현 문제이며 Matrix의 프로토콜 문제가 아닙니다. 우리가 본 연구원 논문의 최신 버전은 Element를 "벤치마크 매트릭스 클라이언트"로 잘못 묘사하고 심각도가 높은 구현 오류와 심각도가 낮은 프로토콜 비판을 혼동합니다.
주요 공격 시나리오 는 세 가지입니다.
- Matrix 서버 관리자는 교차 서명을 사용하고 다른 사용자를 가장하여 이모티콘 기반 검증(SAS, Short Authentication Chains)을 깨뜨릴 수 있습니다. 이 문제는 기기 ID 처리 및 교차 서명 키 조합과 관련된 matrix-js-sdk 코드의 취약점(CVE-2022-39250)으로 인해 발생합니다.
- 서버를 제어하는 공격자는 신뢰할 수 있는 보낸 사람을 가장하고 가짜 키를 전달하여 다른 사용자의 메시지를 가로챌 수 있습니다. 이 문제는 matrix-js-sdk(CVE-2022-39251), matrix-ios-sdk(CVE-2022-39255) 및 matrix-android-sdk2(CVE-2022-39248)의 취약점으로 인해 발생합니다. 클라이언트는 Olm 대신 Megolm 프로토콜을 사용하여 암호화된 장치로 주소 지정된 메시지를 잘못 수락하고 메시지를 실제 보낸 사람 대신 Megolm 보낸 사람에게 표시합니다.
- 서버 관리자는 이전 단락에서 언급한 취약점을 악용하여 사용자 계정에 더미 예비 키를 추가하여 메시지 암호화에 사용되는 키를 추출할 수도 있습니다.
해당 취약점을 발견한 연구원들은 제3자 사용자를 채팅에 추가 하거나 제3자 기기를 사용자에게 연결하는 공격도 시연했습니다. 이러한 공격은 채팅에 사용자를 추가하는 데 사용되는 서비스 메시지가 채팅 생성자의 키와 연결되어 있지 않고 서버 관리자가 생성할 수 있다는 점을 악용합니다.
Matrix 프로젝트 개발자들은 이러한 취약점을 사소한 문제로 분류했습니다 . 이러한 조작은 Matrix에만 국한된 것이 아니라 해당 프로토콜 기반 클라이언트에만 영향을 미치기 때문입니다. 하지만 그렇다고 해서 이러한 취약점이 눈에 띄지 않는다는 의미는 아닙니다. 사용자가 교체되면 채팅 사용자 목록에 표시되고, 기기가 추가되면 경고 메시지가 표시되며 해당 기기는 미인증 기기로 표시됩니다(이 경우, 승인되지 않은 기기가 추가되는 즉시 메시지 복호화에 필요한 공개 키를 수신하기 시작합니다).
matrix-rust-sdk, hydrogen-sdk 및 기타 XNUMX세대 및 XNUMX세대 SDK는 여기서 중요한 문제의 근본 원인에 있는 버그의 영향을 받지 않았음을 알 수 있습니다. 이것이 바로 우리가 XNUMX세대 SDK를 지속적인 독립 공개 감사를 통해 완성된 matrix-rust-sdk 형태의 깨끗하고 신중하게 작성된 Rust 구현으로 교체하기 위해 노력한 이유입니다.
해당 취약점은 Matrix 프로토콜 자체의 문제가 아니라 Matrix 프로토콜의 개별 구현 오류로 인해 발생합니다 . 프로젝트팀은 현재 영향을 받는 SDK 및 이를 기반으로 구축된 일부 클라이언트 애플리케이션에 대한 업데이트를 배포했습니다.
마지막으로, 이 주제에 대해 더 자세히 알고 싶으시다면 다음 링크 에서 자세한 내용을 확인하실 수 있습니다.