Vultisig가 8월 안드로이드와 iOS 앱을 업데이트해 다자간 서명 과정의 오류 처리 방식을 고쳤다. 서명 라이브러리가 참여자의 악의적 행위를 감지하면 앱이 자동으로 재시도하지 않고, 해당 기기를 사용하지 말라는 경고를 표시한다. ChainSecurity가 10월 21일 공개한 연구에 따르면, 이전 버전에서는 한 서명 참여자를 장악한 공격자가 악성 메시지를 반복해서 보내고 오류 응답을 관찰해 다른 참여자의 키 조각을 복구한 뒤 전체 개인키를 알아낼 가능성이 있었다.
문제는 ECDSA 서명 절차와 관련된다. 여러 기기에 키를 나눠 보관하더라도, 프로토콜이 중단을 요구한 뒤 앱이 후속 통신을 멈추지 않으면 정보가 유출될 수 있다는 점을 보여준다. 거래에 사용할 수 있는 서명이 만들어지지 않더라도 오류 응답이 정보를 드러낼 수 있다.
오류 응답이 프로토콜 내부 시드 노출로 이어질 가능성
다자간 계산(MPC) 지갑은 서명 권한을 여러 키 조각에 분산한다. 정상적인 서명 과정에서는 참여자들이 협력해 블록체인이 인식하는 표준 서명을 만들며, 통상적인 사용 중 전체 개인키를 다시 조합할 필요가 없다. 두 기기가 모두 참여해야 하는 설정에서 공격자가 한쪽 기기만 장악했다면, 원칙적으로는 다른 기기의 승인도 필요하다.
ChainSecurity가 설명한 공격은 참여자 한 명이 이미 침해된 상황을 전제로 한다. 공격자는 다른 참여자에게 악성 서명 메시지를 여러 차례 보내고, 상대가 오류를 반환하는지 살펴볼 수 있다. 연구진은 이런 응답을 통해 재사용 가능한 내부 프로토콜 시드의 정보가 점진적으로 노출될 수 있다고 지적했다. 공격이 계속되면 다른 참여자의 키 조각을 복구해 전체 개인키까지 알아낼 가능성이 있다.
시드는 프로토콜 내부에서 사용하는 설정 비밀값이다. 해당 서명 라이브러리는 심각한 오류가 발생하면 호출한 애플리케이션이 후속 서명을 중단하고 시드를 교체할 것으로 가정했다. 그러나 구버전 앱은 이 중단 조건을 구현하지 않은 채 일반적인 실패 메시지만 표시했고, 재시도를 이어갈 수 있었다. 따라서 핵심은 실패한 서명을 거래로 전파할 수 있는지가 아니라, 실패 후에도 문제가 감지된 참여자와 계속 통신하는지에 있다.
8월 업데이트에서 악성 참여자 감지 후 재시도 중단
Vultisig의 안드로이드와 iOS 유지보수 담당자는 관련 코드 변경을 각각 8월 21일 병합했다. 취약점이 공개된 시점보다 약 두 달 앞선 조치다. 구버전 코드는 서명 실패를 라이브러리의 성공 결과와 비교했지만, 악성 참여자 차단 오류를 별도로 처리하지 않았다. 서명 과정은 최대 세 차례까지 재시도할 수 있었고, 사용자에게는 일반적인 실패 안내가 표시됐다. 이 재시도 횟수는 키 복구에 필요한 메시지 수를 뜻하지 않으며, 공격에 필요한 세션 수를 추정하는 근거로 볼 수도 없다.
업데이트된 앱은 세션 설정, 메시지 처리, 서명 완료 등 여러 단계에서 DKLS 서명 라이브러리의 악성 참여자 오류 코드 100~109를 감지한다. 두 플랫폼 모두 해당 오류를 기기 식별자와 연결해 자동 재시도 과정에서 묻히지 않도록 하고, 사용자에게 현지화된 경고를 표시해 관련 기기를 더 이상 사용하지 말도록 안내한다. 안드로이드 버전은 중계 복구 절차도 건너뛴다.
이제 앱은 일반적인 서명 실패와 암호 라이브러리가 참여자를 악성으로 판정한 경우를 구분한다. 일시적 오류라면 자동 재시도가 작업을 복구하는 데 도움이 될 수 있지만, 라이브러리가 통신 중단을 요구한 상황에서 재시도를 계속하면 정보 노출 가능성이 커질 수 있다.
관련 변경 사항은 안드로이드 PR #5658과 iOS PR #5235에 반영됐다. iOS v1.45.71은 8월 21일, 안드로이드 v1.0.118은 8월 25일 릴리스 기록에 각각 해당 수정 사항을 포함했다.
금고 유형별 영향 범위는 추가 확인 필요
Vultisig 제품 안내에 따르면 Fast Vault에서는 사용자 기기가 키 조각 하나를 보유하고, VultiServer가 다른 조각을 보유해 공동 서명에 참여한다. Secure Vault는 VultiServer에 의존하지 않고 사용자가 관리하는 두 대 이상의 기기에 서명 권한을 분산한다. 두 방식 모두 분산 서명을 사용하지만 운영상 의존 관계는 다르다. 한 서명 세션에 참여하는 주체가 두 명이라고 해서 금고 전체의 키 조각도 두 개뿐이라고 단정할 수는 없다.
공개된 연구와 앱 자료에는 영향을 받은 버전과 금고 구성을 연결한 상세 목록이 없다. 따라서 현재 정보만으로는 각 구성의 구체적인 영향 범위나 업데이트가 과거 버전까지 어디까지 보완했는지 판단하기 어렵다.
Vultisig의 보안 문서는 Trail of Bits가 2024년 Silence Laboratories의 DKLS23 라이브러리를 감사했다고 밝히고 있다. 모바일과 데스크톱 앱의 감사 보고서는 공개되는 대로 제공할 예정이라고도 안내했다. ChainSecurity는 취약점 공개 당시 Vultisig의 수정 사항을 검토하지 않았으며 프로토콜의 다른 부분도 감사하지 않았다고 밝혔다. 따라서 앱 차원의 수정은 ChainSecurity 평가에 포함되지 않았다.
앞으로는 영향을 받는 릴리스 버전과 금고 구성을 구체적으로 밝히고, 자동 재시도뿐 아니라 사용자가 서명을 수동으로 다시 시작할 때도 중단 조건이 적용되는지 확인할 필요가 있다. 이번 사례에서 확인된 쟁점은 다자간 키 분산만으로 충분하지 않으며, 서명 라이브러리가 요구한 중단을 앱이 전체 과정에서 실제로 지켜야 한다는 점이다.