Vultisig đã cập nhật ứng dụng Android và iOS trong tháng 8 để sửa cách xử lý lỗi trong quy trình ký đa bên: khi thư viện ký xác định một bên tham gia có hành vi độc hại, ứng dụng sẽ không tự động thử lại và sẽ cảnh báo người dùng ngừng sử dụng thiết bị liên quan. Nghiên cứu ChainSecurity công bố ngày 21/10 cho biết quy trình cũ có thể cho phép kẻ tấn công đã kiểm soát một bên ký khôi phục dần phần khóa của bên còn lại bằng cách gửi thông điệp độc hại lặp đi lặp lại và quan sát phản hồi lỗi, từ đó có khả năng ghép thành khóa riêng hoàn chỉnh.
Lỗ hổng liên quan đến chữ ký ECDSA. Vụ việc cho thấy mức độ an toàn của ví ký bằng nhiều thiết bị không chỉ phụ thuộc vào việc chia nhỏ và lưu trữ khóa riêng, mà còn vào khả năng ứng dụng dừng tương tác khi giao thức phát tín hiệu yêu cầu ngừng. Ngay cả khi chữ ký lỗi không tạo ra giao dịch có thể sử dụng, phản hồi lỗi vẫn có thể làm lộ thông tin.
Phản hồi lỗi có thể làm lộ dữ liệu giao thức nội bộ
Ví tính toán đa bên phân chia quyền ký thành nhiều phần khóa. Khi ký bình thường, các bên phối hợp tạo ra chữ ký chuẩn mà blockchain có thể xác minh, nhưng không cần ghép lại toàn bộ khóa riêng trong những thao tác thông thường. Với cấu hình yêu cầu hai thiết bị cùng tham gia, về lý thuyết, kẻ tấn công chỉ kiểm soát một thiết bị vẫn cần bên còn lại chấp thuận mới hoàn tất được việc ký.
Kịch bản ChainSecurity nêu ra giả định rằng một bên tham gia đã bị xâm nhập. Kẻ tấn công có thể gửi nhiều thông điệp ký độc hại đến bên còn lại rồi theo dõi xem bên đó có trả về lỗi hay không. Các nhà nghiên cứu cho biết những phản hồi này có thể dần làm lộ thông tin về một hạt giống giao thức nội bộ có thể tái sử dụng. Nếu tiếp tục khai thác, kẻ tấn công có thể khôi phục phần khóa của bên kia và cả khóa riêng hoàn chỉnh.
Hạt giống này là một bí mật cấu hình nội bộ của giao thức. Thư viện ký liên quan vốn giả định rằng sau một lỗi nghiêm trọng, ứng dụng gọi thư viện sẽ dừng các lần ký tiếp theo cho đến khi thay hạt giống. Ứng dụng phiên bản cũ không thực thi điều kiện dừng này: ứng dụng chỉ hiển thị thông báo thất bại chung và có thể tiếp tục thử lại. Vì vậy, vấn đề không nằm ở việc một lần ký thất bại có thể được phát lên mạng blockchain hay không, mà ở chỗ ứng dụng có tiếp tục tương tác với bên đã bị đánh dấu sau lỗi hay không.
Bản cập nhật tháng 8 chặn thử lại với bên bị đánh dấu
Nhóm duy trì ứng dụng Android và iOS của Vultisig lần lượt hợp nhất các thay đổi mã liên quan vào ngày 21/8, sớm hơn khoảng hai tháng so với thời điểm công bố công khai. Mã cũ so sánh lỗi ký với kết quả thành công từ thư viện, nhưng không xử lý riêng lỗi chặn bên tham gia có hành vi độc hại. Quy trình ký có thể thử lại tối đa ba lần, trong khi người dùng chỉ nhận được thông báo lỗi chung. Con số này không phải số lượng thông điệp cần thiết để khôi phục khóa và cũng không cho biết một cuộc tấn công cần bao nhiêu phiên ký.
Sau cập nhật, ứng dụng nhận diện mã lỗi bên tham gia độc hại từ 100 đến 109 của thư viện ký DKLS tại các bước như thiết lập phiên, xử lý thông điệp và hoàn tất ký. Cả hai nền tảng đều liên kết bên bị đánh dấu với mã định danh thiết bị, tránh để cơ chế tự động thử lại bỏ qua lỗi, đồng thời hiển thị cảnh báo đã bản địa hóa, khuyên người dùng không tiếp tục sử dụng thiết bị liên quan. Bản Android còn bỏ qua quy trình khôi phục qua relay.
Thay đổi này giúp ứng dụng phân biệt lỗi ký thông thường với đánh giá có tính chất mật mã của thư viện về một bên tham gia. Tự động thử lại có thể giúp khắc phục sự cố tạm thời; nhưng nếu thư viện đã yêu cầu dừng tương tác, việc tiếp tục thử lại có nguy cơ làm lộ thêm thông tin.
Các thay đổi được ghi nhận lần lượt tại PR Android #5658 và PR iOS #5235. Nhật ký phát hành iOS v1.45.71 ghi ngày 21/8, còn Android v1.0.118 ghi ngày 25/8; cả hai đều liệt kê bản sửa lỗi liên quan.
Phạm vi ảnh hưởng theo cấu hình ví chưa được làm rõ
Tài liệu sản phẩm của Vultisig phân biệt cách các thiết bị tham gia ký. Với Fast Vault, thiết bị của người dùng giữ một phần khóa, còn VultiServer giữ phần còn lại và tham gia ký chung. Secure Vault phân chia quyền ký giữa ít nhất hai thiết bị do người dùng kiểm soát, không phụ thuộc vào VultiServer. Cả hai phương án đều dùng chữ ký phân tán nhưng có mức độ phụ thuộc vào đơn vị vận hành khác nhau; hai bên tham gia trong một phiên ký cũng không đồng nghĩa toàn bộ ví chỉ có hai phần khóa.
Nghiên cứu đã công bố và tài liệu ứng dụng hiện chưa đưa ra bảng đối chiếu đầy đủ giữa các phiên bản bị ảnh hưởng và cấu hình ví. Vì vậy, người dùng khó xác định chính xác phạm vi ảnh hưởng với từng cấu hình, cũng như mức độ bao phủ của bản cập nhật đối với các phiên bản cũ.
Tài liệu bảo mật của Vultisig cho biết Trail of Bits đã kiểm toán thư viện DKLS23 của Silence Laboratories vào năm 2024, đồng thời cho biết báo cáo kiểm toán ứng dụng di động và máy tính để bàn sẽ được cung cấp sau khi phát hành. Khi công bố phát hiện, ChainSecurity cho biết họ chưa xem xét bản sửa lỗi của Vultisig và chưa kiểm toán các phần khác của giao thức; do đó, những sửa đổi ở cấp ứng dụng này không nằm trong phạm vi đánh giá của họ.
Thông tin cần được làm rõ thêm gồm những phiên bản và cấu hình ví nào bị ảnh hưởng, cũng như điều kiện dừng có được áp dụng cả khi ứng dụng tự thử lại lẫn khi người dùng tự khởi động lại quy trình ký hay không. Điểm cốt yếu là cơ chế cô lập nhiều bên mà người dùng dựa vào cần được ứng dụng thực thi xuyên suốt quy trình ký, chứ không chỉ dừng ở yêu cầu do thư viện ký đưa ra.