Bối cảnh
Vào ngày 22 tháng 5, theo tin tức cộng đồng, Cetus, nhà cung cấp thanh khoản trong hệ sinh thái SUI, bị nghi ngờ bị tấn công. Độ sâu của nhóm thanh khoản giảm đáng kể và nhiều cặp giao dịch mã thông báo trên Cetus cũng giảm. Tổng số tiền thiệt hại ước tính vượt quá 230 triệu đô la Mỹ. Sau đó, Cetus đã đưa ra thông báo rằng: "Một sự cố đã được phát hiện trong giao thức của chúng tôi. Vì lý do an toàn, hợp đồng thông minh đã bị tạm dừng. Hiện tại, nhóm đang điều tra sự cố. Chúng tôi sẽ sớm đưa ra tuyên bố điều tra thêm". Sau sự cố, nhóm bảo mật SlowMist đã can thiệp vào quá trình phân tích và đưa ra lời nhắc nhở về bảo mật. Sau đây là phân tích chi tiết về các phương pháp tấn công và chuyển tiền.
(https://x.com/CetusProtocol/status/1925515662346404024)
Thông tin liên quan
Một trong những giao dịch tấn công:
https://suiscan.xyz/mainnet/tx/DVMG3B2kocLEnVMDuQzTYRgjwuuFSfciawPvXXheB3x
Địa chỉ của kẻ tấn công:
0xe28b50cef1d633ea43d3296a3f6b67ff0312a5f1a99f0af753c85b8b5de8ff06
(Sơ đồ trình tự tấn công)
![]()
Tick Giới hạn dưới: 300000 (giá: 60.257.519.765.924.248.467.716.150)
Tick Giới hạn trên: 300200 (giá: 60.863.087.478.126.617.965.993.239)
Độ rộng phạm vi giá: chỉ 1,00496621%

Hãy cùng phân tích lý do tại sao kẻ tấn công đã có thể trao đổi lượng thanh khoản lớn với 1 Token. Lý do cốt lõi là có lỗ hổng bỏ qua phát hiện tràn trong checked_shlw của hàm get_delta_a. Kẻ tấn công đã lợi dụng điều này và gây ra sai lệch nghiêm trọng trong tính toán của hệ thống về lượng haSUI thực sự cần được thêm vào. Vì lượng tràn không được phát hiện, hệ thống đã đánh giá sai lượng haSUI cần thiết, dẫn đến việc kẻ tấn công có thể đổi một lượng lớn tài sản thanh khoản chỉ với một số lượng nhỏ token, do đó đạt được cuộc tấn công.
Khi hệ thống tính toán lượng haSUI cần thiết để thêm lượng thanh khoản lớn như vậy:

Điểm mấu chốt ở đây là việc triển khai hàm checked_shlw bị lỗi nghiêm trọng. Trên thực tế, bất kỳ giá trị đầu vào nào nhỏ hơn 0xffffffffffffffff << 192 sẽ bỏ qua kiểm tra tràn. Tuy nhiên, khi các giá trị này được dịch trái 64 bit, kết quả sẽ vượt quá phạm vi biểu diễn của u256 và dữ liệu bậc cao bị cắt bớt, dẫn đến kết quả nhỏ hơn nhiều so với giá trị lý thuyết. Điều này khiến hệ thống đánh giá thấp lượng haSUI cần thiết trong các phép tính tiếp theo.

Mặt nạ lỗi: 0xffffffffffffffff << 192 = một giá trị rất lớn (khoảng 2^256-2^192)
Hầu hết các đầu vào đều nhỏ hơn mặt nạ này, bỏ qua phát hiện tràn
Vấn đề thực sự: khi n >= 2^192 , n << 64 sẽ vượt quá phạm vi u256 và bị cắt bớt
Kẻ tấn công đã xây dựng một giá trị trung gian tính thanh khoản * sqrt_price_diff = 6277101735386680763835789423207666908085499738337898853712:
nhỏ hơn mặt nạ lỗi, bỏ qua phát hiện tràn
nhưng sau khi dịch trái 64 bit, nó sẽ vượt quá giá trị tối đa u256, dẫn đến phần thừa bị cắt bớt
left;">Kết quả tính toán cuối cùng xấp xỉ nhỏ hơn 1, nhưng vì được làm tròn lên nên dấu ngoặc kép bằng 1

4. Cuối cùng, kẻ tấn công đã xóa thanh khoản và thu được khoản thu nhập token khổng lồ:
Lần xóa đầu tiên: 10.024.321,28 haSUI
Lần xóa thứ hai: Thu được 1 haSUI
Lần xóa thứ ba: Thu được 10.024.321,28 haSUI
5. Kẻ tấn công đã trả lại khoản vay nhanh, với lợi nhuận ròng khoảng 10.024.321,28 haSUI và 5.765.124,79 SUI, và cuộc tấn công đã hoàn tất.
Tình hình sửa chữa của nhóm dự án
Sau cuộc tấn công, Cetus đã phát hành bản vá sửa chữa. Để biết mã sửa chữa cụ thể, vui lòng tham khảo: https://github.com/CetusProtocol/integer-mate/pull/7/files#diff-c04eb6ebebabb80342cd953bc63925e1c1cdc7ae1fb572f4aad240288a69409.
Hàm checked_shlw đã sửa như sau:

Hướng dẫn sửa:
Sửa mặt nạ không đúng 0xffffffffffffffff << 192 đến ngưỡng chính xác 1 << 192
Sửa điều kiện phán đoán từ n > mặt nạ to n >= mask
Đảm bảo rằng khi dịch chuyển trái 64 bit có thể gây tràn, cờ tràn có thể được phát hiện chính xác và trả về
Phân tích MistTrack
Theo phân tích, kẻ tấn công 0xe28b50cef1d633ea43d3296a3f6b67ff0312a5f1a99f0af753c85b8b5de8ff06 đã kiếm được lợi nhuận khoảng 230 triệu đô la Mỹ, bao gồm SUI, vSUI, USDC và các tài sản khác.
![]()
Chúng tôi phát hiện ra rằng kẻ tấn công đã chuẩn bị Phí Gas hai ngày trước, và sau đó đã thực hiện một nỗ lực trước khi tấn công, nhưng không thành công:
Chúng tôi phát hiện ra rằng kẻ tấn công đã chuẩn bị Phí Gas hai ngày trước, và sau đó đã thực hiện một nỗ lực trước khi tấn công, nhưng không thành công:
Chúng tôi phát hiện ra rằng kẻ tấn công đã chuẩn bị Phí Gas hai ngày trước, và sau đó đã thực hiện một nỗ lực trước khi tấn công, nhưng không thành công:
Chúng tôi phát hiện ra rằng kẻ tấn công đã chuẩn bị Phí Gas hai ngày trước, và sau đó đã thực hiện một nỗ lực trước khi tấn công, nhưng không thành công:
Chúng tôi phát hiện ra rằng kẻ tấn công đã chuẩn bị Phí Gas hai ngày trước, và sau đó đã thực hiện một nỗ lực trước khi tấn công, nhưng không thành công:
style="text-align:center">![]()
Trong số đó, 5.2341 địa chỉ WBNB liên kết chuỗi chéo với BSC 0x89012a55cd6b88e407c9d4ae9b3425f55924919b:
Kẻ tấn công cũng sẽ 24.022.896 SUI Chuyển đến địa chỉ mới 0xcd8962dad278d8b50fa0f9eb0186bfa4cbdecc6d59377214c88d0286a0ac9562, chưa chuyển ra ngoài:
May mắn thay, theo Cetus, với sự hợp tác của SUI Foundation và các thành viên khác trong hệ sinh thái, số tiền bị đánh cắp là 162 triệu đô la Mỹ trên SUI đã được đóng băng thành công.
(https://x.com/CetusProtocol/status/1925567348586815622)
Tiếp theo, chúng tôi sử dụng công cụ theo dõi và chống rửa tiền trên chuỗi MistTrack để phân tích địa chỉ 0x89012a55cd6b88e407c9d4ae9b3425f55924919b trên EVM nhận tiền từ nhiều chuỗi.
Địa chỉ này đã nhận được 5,2319 BNB trên BSC và vẫn chưa chuyển ra ngoài:
Địa chỉ này đã nhận được 3.000 Ethereum USDT, 40,88 triệu USDC, 1.771 SOL và 8.130,4 ETH.
Trong số đó, USDT, USDC và SOL được trao đổi lấy ETH thông qua coW Swap, ParaSwap, v.v.:
Tiếp theo, địa chỉ sẽ chuyển 20.000 ETH đến địa chỉ 0x0251536bfcf144b88e1afa8fe60184ffdb4caf16, chưa chuyển ra ngoài:
Số dư hiện tại của địa chỉ này trên Ethereum là 3.244 ETH:
MistTrack đã thêm các địa chỉ liên quan ở trên vào thư viện địa chỉ độc hại. Đồng thời, chúng tôi sẽ tiếp tục theo dõi số dư địa chỉ.
Tóm tắt
Cuộc tấn công này chứng minh sức mạnh của lỗ hổng tràn toán học. Kẻ tấn công đã chọn các tham số cụ thể thông qua các phép tính chính xác và khai thác lỗ hổng trong hàm checked_shlw để lấy được hàng tỷ đô la thanh khoản với chi phí là 1 token. Đây là một cuộc tấn công toán học cực kỳ tinh vi. Nhóm bảo mật SlowMist khuyến nghị các nhà phát triển xác minh nghiêm ngặt các điều kiện biên của tất cả các hàm toán học trong quá trình phát triển hợp đồng thông minh.