Tóm tắt

  • Coinkite cho biết một lỗi biên dịch đã khiến các seed trên ví phần cứng Coldcard của họ được lấy từ phần mềm dự phòng 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 trên mã nguồn mở của mình, và cho biết việc kiểm tra AI của họ vài tuần trước đó không phát hiện ra bất kỳ vấn đề nào.
  • Mọi mẫu hiện tại đều bị ảnh hưởng ở mức độ nào đó, và việc cập nhật firmware không sửa được seed đã được tạo ra.

Coinkite tin rằng một kẻ tấn công đã sử dụng AI để tìm ra lỗ hổng khiến chủ sở hữu ví phần cứng Coldcard của họ mất hàng chục triệu đô la Bitcoin, và cho biết việc kiểm tra AI của họ trên cùng mã nguồn đó vài tuần trước không phát hiện ra gì. 

Nhà sản xuất ví phần cứng đã đăng một khuyến cáo cho Mk3 và một phân tích kỹ thuật vào thứ Năm, sau khi phát hiện ra rằng các seed được tạo ra bởi thiết bị của họ dễ đoán hơn nhiều so với dự đị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, khoảng 38 triệu đô la. Tiền đã bị rút khỏi khoảng 500 ví chỉ trong 25 phút, với 562 BTC sau đó được tập hợp vào một địa chỉ duy nhất.

Coinkite cho biết họ phải giả định rằng "ai đó đã dùng AI để kiểm tra các phiên bản firmware trước đó của chúng tôi" nhằm phát hiện ra lỗ hổng. Công ty nói họ đã sử dụng một trong những mô hình tốt nhất hiện nay để kiểm tra mã của mình vài tuần trước, và mô hình "không phát hiện ra lỗi này hay bất cứ vấn đề nghiêm trọng nào." Theo công ty, kẻ tấn công và người bảo vệ đều có công cụ như nhau, nhưng lần này "AI không giúp chúng tôi, mà chỉ giúp phe xấu."

Điều gì đã xảy ra sai

Firmware của Coldcard gọi một hàm để lấy ngẫu nhiên, và có hai bản triển khai hàm này nằm trong mã nguồn với các chữ ký giống hệt nhau: trình tạo phần cứng do Coinkite viết và phần mềm dự phòng kế thừa từ MicroPython. Trình kiểm tra tiền xử lý chỉ kiểm tra xem một thiết lập đã được định nghĩa hay chưa, mà không kiểm tra giá trị của nó, do đó quá trình biên dịch chọn bản dự phòng mà không cảnh báo gì. Việc tạo seed đã dựa vào nó kể từ khi dịch chuyển mã vào tháng 3 năm 2021.

Tất cả những mẫu hiện tại đều bị ảnh hưởng ở mức độ nào đó. Coinkite ước tính không gian tìm kiếm hiệu quả cho seed của Mk3 vào khoảng 40 bit, trong khi seed lẽ ra cần có 128 bit. Entropy bổ sung từ 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, công ty cho biết điều này cải thiện tình hình đáng kể nhưng chưa đạt mục tiêu. Tapsigner, Opendime và Satscard sử dụng mã khác và không bị ảnh hưởng.

Chủ sở hữu 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 và 1.5.0Q cho Q. Việc cập nhật không sửa được seed đã tạo ra trên firmware bị ảnh hưởng. Chủ sở hữu cần tạo seed mới trên phần cứng đã được vá, và công ty khuyến nghị sử dụng passphrase BIP-39 mạnh, ít nhất 99 lần lắc xúc xắc, hoặc cả hai. Chủ sở hữu Mk3, mẫu đã hết hỗ trợ, được giới thiệu một lộ trình chuyển đổi riêng.