

Vào sáng sớm ngày 19 tháng 3, một số người dùng trong cộng đồng đã báo cáo rằng có nguy cơ chi tiêu gấp đôi trên mạng chính Filecoin. Các sàn giao dịch như Binance và OKex đã đóng chức năng nạp tiền của mã thông báo mạng chính Filecoin FIL. Cobo Custody cũng ngay lập tức tạm dừng việc nạp tiền và Rút tiền.
tiêu đề phụ
Câu chuyện "chi tiêu gấp đôi" của Filecoin
Theo phản hồi từ những người khai thác Filecoin của Filfox và FileStar, vào thứ Tư, Binance đã gặp phải một cuộc tấn công nạp tiền chi tiêu gấp đôi FIL trị giá hàng triệu đô la.
Lý do là mất quá nhiều thời gian để một giao dịch trị giá 61.000 FIL (khoảng 4,6 triệu đô la Mỹ) được ghi lại, vì vậy những người khai thác Filfox và FileStar đã bắt đầu một giao dịch RBF để tăng tốc. Giao dịch RBF dẫn đến hai khoản tiền gửi vào tài khoản Binance và cuối cùng 120.000 FIL đã được ghi có. Sau đó, các nhà phát triển của Filfox và FileStar đã trả lời rằng có "lỗ hổng nghiêm trọng" trong mã RPC của Filecoin. Lỗ hổng khiến Binance chọn gửi tiền cùng lúc sau khi thấy hai giao dịch trái ngược nhau.
Các nhà phát triển FilFox và FileStar đã liên hệ với Binance ngay khi có thể và thông báo cho quan chức của Filecoin càng sớm càng tốt.
tiêu đề phụ
Đánh giá chi tiết kỹ thuật
Các tổ chức giám sát tập trung như sàn giao dịch và ví tập trung sẽ ghi có cho người dùng theo hành vi chuyển tiền trên chuỗi, vì vậy làm thế nào để phân tích hành vi chuyển tiền trên chuỗi một cách hiệu quả, chính xác và kịp thời là rất quan trọng. nội dung giao dịch tương ứng và kết quả thực hiện giao dịch dựa trên ID giao dịch.
Nút hoa sen Filecoin cung cấp nhiều API để lấy các giao dịch trên chuỗi. Ví dụ: ChainGetBlockMessages có thể lấy tất cả nội dung giao dịch trong một khối được chỉ định và StateGetReceipt có thể lấy kết quả thực thi tương ứng với ID giao dịch được chỉ định. Sàn giao dịch bị tấn công lần này đã áp dụng phương pháp này .Hai API được sử dụng để phân tích hành vi chuyển tiền trên chuỗi và dựa vào đó để nhập tài khoản cho người dùng.
Tuy nhiên, họ không để ý rằng giao diện StateGetReceipt có thiết kế không theo tư duy logic thông thường, đó là khi lấy kết quả thực hiện của ID giao dịch được chỉ định, nếu giao dịch đã được thay thế bằng RBF (thay thế bằng phí), nó sẽ trả về RBF cuối cùng thành công Kết quả thực hiện của giao dịch đó và không có dấu hiệu nào trong giá trị trả về rằng đây là kết quả thực hiện của giao dịch sau RBF.
Giả sử trước tiên kẻ tấn công gửi TX1, ID giao dịch tương ứng là TXID1, sau đó kẻ tấn công thực hiện RBF trên TX1 để tạo TX2, ID giao dịch tương ứng là TXID2 và cuối cùng TX2 được tải lên chuỗi thành công. Tại thời điểm này, hãy truy vấn TXID1 và TXID2 tương ứng thông qua StateGetReceipt và cả hai đều có thể nhận được kết quả thực thi chính xác.
Sau khi cuộc tấn công xảy ra, nhà phát triển Filecoin chính thức đã giải thích bổ sung cho API, làm rõ logic trả về của StateGetReceipt và sẽ loại bỏ API này sau phiên bản v1
https://github.com/filecoin-project/lotus/pull/5838/files
Đội ngũ kỹ thuật của Cobo Custody đã phát hiện ra các vấn đề trên trong quá trình kết nối với Filecoin nên thay vì sử dụng ChainGetBlockMessages và StateGetReceipt để lấy hành vi chuyển trên chuỗi, nó sử dụng ChainGetParentMessages và ChainGetParentReceipts để lấy các giao dịch đã được tải lên chuỗi thành công , để tránh về cơ bản Nguy cơ nạp tiền chi tiêu gấp đôi, do đó, nó không bị ảnh hưởng bởi cuộc tấn công nạp tiền chi tiêu gấp đôi này.
Trong quá trình sử dụng ChainGetParentMessages và ChainGetParentReceipts, nhóm kỹ thuật Cobo Custody nhận thấy rằng một số giá trị trả về của nút hoa sen không nhất quán với tư duy logic thông thường, chẳng hạn như có một số vấn đề với việc xử lý các khối trống. Nhóm kỹ thuật Cobo Custody đã xử lý vấn đề này đúng cách và qua đây nhắc nhở những người giám sát tập trung khác rằng họ cần kiểm tra cẩn thận các mã kết nối có liên quan để tránh các cuộc tấn công nạp tiền chi tiêu hai lần khác.
Chi tiêu gấp đôi là sử dụng mã thông báo của giao dịch trước đó để thực hiện lại giao dịch, dẫn đến giao dịch sai.
Vào năm 2018, Bitcoin Gold (BTG) đã bị một người khai thác tấn công ác ý. Người khai thác tạm thời kiểm soát chuỗi khối BTG, nhanh chóng rút tiền sau khi nạp vào sàn giao dịch, sau đó đảo ngược khối, thực hiện thành công một cuộc tấn công chi tiêu gấp đôi. Kẻ tấn công đã đánh cắp hơn 388.200 BTG, trị giá tới 18,6 triệu đô la và đây cũng là một trong những cuộc tấn công chi tiêu gấp đôi nổi tiếng nhất trong lịch sử blockchain.
