- Coinkite cho biết một lỗi biên dịch khiến chuỗi hạt giống (seed) trên các dòng ví phần cứng Coldcard lấy từ cơ chế dự phòng phần mềm thay vì trình tạo phần cứng.
- Họ tin rằng một kẻ tấn công đã sử dụng AI để khai thác mã nguồn mở của họ, đồng thời cho biết đợt kiểm tra bằng AI của chính công ty vài tuần trước đó không phát hiện ra điều gì.
- Mọi phiên bản hiện tại đều bị ảnh hưởng ở các mức độ khác nhau và việc cập nhật chương trình cơ sở (firmware) không thể khôi phục lại các chuỗi hạt giống đã được tạo trước đó.
Coinkite tin rằng một kẻ tấn công đã sử dụng AI để tìm ra lỗ hổng khiến những người sở hữu ví phần cứng Coldcard thiệt hại hàng chục triệu đô la bằng Bitcoin, đồng thời cho biết đợt rà soát bằng AI của chính họ đối với đoạn mã tương tự vào vài tuần trước không hề phát hiện ra vấn đề gì.
Nhà sản xuất ví phần cứng này đã công bố một bản cảnh báo cho dòng Mk3 và một phân tích kỹ thuật chi tiết vào thứ Năm, sau khi phát hiện ra rằng các seed được tạo bởi thiết bị của họ dễ đoán hơn nhiều so với dự tính.
Thiệt hại từ lỗ hổng này, bị khai thác vào đầu ngày thứ Sáu, được ước tính lên tới 594 BTC, tương đương khoảng 38 triệu USD. Các khoản tiền đã bị rút sạch từ khoảng 500 ví chỉ trong vòng 25 phút, với 562 BTC sau đó được gom lại vào một địa chỉ duy nhất.
Coinkite cho biết họ buộc phải giả định rằng “ai đó đã sử dụng AI để kiểm tra các phiên bản firmware trước đây” nhằm lật tẩy lỗ hổng này. Công ty chia sẻ rằng họ đã chạy một trong những mô hình tốt nhất hiện có trên chính mã nguồn của mình vài tuần trước đó, và mô hình này “không tìm thấy lỗi này hay bất kỳ vấn đề nghiêm trọng nào.” Kẻ tấn công và bên phòng thủ đều có chung các công cụ, họ viết, nhưng lần này “nó không giúp ích gì cho chúng tôi, mà chỉ làm lợi cho kẻ xấu.”
Điều gì đã xảy ra
Firmware của Coldcard gọi một hàm để lấy tính ngẫu nhiên (randomness), và có hai cách triển khai hàm này cùng tồn tại trong cơ sở mã nguồn với các chữ ký giống hệt nhau: bộ tạo phần cứng do Coinkite viết và một cơ chế dự phòng phần mềm được kế thừa từ MicroPython. Một trình kiểm tra tiền xử lý (preprocessor guard) chỉ kiểm tra xem một cài đặt có được xác định hay không, mà không kiểm tra giá trị của nó, do đó quá trình biên dịch vẫn hoàn tất dựa trên cơ chế dự phòng mà không hề có cảnh báo nào. Việc tạo seed đã âm thầm dựa vào cơ chế này kể từ đợt di chuyển mã nguồn vào tháng 3 năm 2021.
Mọi mẫu hiện tại đều bị ảnh hưởng ở một mức độ nào đó. Coinkite ước tính không gian tìm kiếm hiệu quả cho một seed trên Mk3 chỉ vào khoảng 40 bit, thay vì 128 bit như thiết kế ban đầu. Độ ngẫu nhiên bổ sung từ các phần tử bảo mật trên Mk4, Q và Mk5 nâng mức này lên khoảng 72 bit, mà công ty cho biết đã cải thiện đáng kể tình hình mặc dù vẫn chưa đạt được mục tiêu ban đầu. Các sản phẩm Tapsigner, Opendime và Satscard sử dụng mã nguồn khác nên không bị ảnh hưởng.
Chủ sở hữu ví phải làm gì
Coinkite đã phát hành bản vá khẩn cấp, phiên bản 5.6.0 cho Mk4 và Mk5 cùng 1.5.0Q cho dòng Q. Việc cập nhật không thể sửa chữa các seed đã được tạo sẵn trên firmware bị lỗi. Người dùng cần tạo một seed mới trên phần cứng đã được vá, và công ty khuyến nghị sử dụng cụm mật khẩu (passphrase) mạnh theo chuẩn BIP-39, tung xúc sắc ít nhất 99 lần, hoặc áp dụng cả hai. Những người dùng Mk3 – dòng sản phẩm đã ngừng hỗ trợ – được hướng dẫn theo một lộ trình chuyển đổi riêng.
Một seed được tạo ra trên thiết bị Coldcard bị lỗi vẫn sẽ giữ nguyên trạng thái kém bảo mật ngay cả khi được khôi phục sang thiết bị của thương hiệu khác, một điểm mà nhà sản xuất ví phần cứng đối thủ Trezor đã chỉ ra trong khi trấn an người dùng của mình rằng tài sản của họ vẫn an toàn. Block – đơn vị vừa công bố một bản phân tích độc lập vào thứ Sáu – cho biết không có sản phẩm nào của họ bị ảnh hưởng, đồng thời Trưởng bộ phận phần cứng Max Guise đã kêu gọi bất kỳ ai đang gặp rủi ro hãy nhanh chóng di dời tài sản ngay khi có thể làm điều đó một cách an toàn.