bối cảnh
Vào ngày 22 tháng 5 , theo các tin nhắn 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 nhóm thanh khoản giảm đáng kể và nhiều cặp giao dịch token trên Cetus cũng giảm. Tổng 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. Đội ngũ hiện đang điều tra sự cố. Chúng tôi sẽ sớm đưa ra thông báo điều tra thêm".
Sau khi sự cố xảy ra, đội ngũ an ninh SlowMist đã ngay lập tức can thiệp để phân tích sự cố và đưa ra cảnh báo an toàn. 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
Địa chỉ của nhóm bị tấn công:
0x871d8a227114f375170f149f7e9d45be822dd003eba225e83c05ac80828596bc
Token liên quan:
haSUI/ Sui
Phân tích tấn công
Cốt lõi của sự cố lần là kẻ tấn công đã cẩn thận xây dựng trình kích hoạt để gây tràn nhưng bỏ qua khả năng phát hiện và cuối cùng đã trao đổi một lượng lớn tài sản thanh khoản với một lượng rất nhỏ mã thông báo. Sau đây là phân tích các bước cụ thể:

(Biểu đồ trình tự tấn công)
1. Kẻ tấn công đầu tiên đã vay 10.024.321,28 haSUI thông qua một khoản vay nhanh, khiến giá của nhóm giảm mạnh từ 18.956.530.795.606.879.104 xuống còn 18.425.720.184762886, giá giảm 99,90%.

2. Kẻ tấn công đã cẩn thận lựa chọn một phạm vi giá rất hẹp để mở vị thế thanh khoản:
Đánh dấu giới hạn dưới: 300000 (giá: 60.257.519.765.924.248.467.716.150)
Giới hạn tích tắc: 300200 (giá: 60.863.087.478.126.617.965.993.239)
Độ rộng phạm vi giá: chỉ 1.00496621%
3. Sau đây là cốt lõi của cuộc tấn công lần. Kẻ tấn công đã thông báo rằng hắn sẽ thêm 10.365.647.984.364.446.732.462.244.378.333.008 đơn vị thanh khoản khổng lồ, nhưng do lỗ hổng nên hệ thống chỉ thu thập được 1 token A.

Hãy cùng phân tích lý do tại sao kẻ tấn công có thể trao đổi thanh khoản lớn chỉ bằng 1 token. Lý do chính là có lỗ hổng phát hiện tràn bộ nhớ trong checked_shlw trong 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ề số lượng haSUI mới thực sự cần thiết. Do tình trạng tràn tiền không được phát hiện nên hệ thống đã đánh giá sai số lượng haSUI cần thiết, khiến kẻ tấn công có thể đổi lượng lớn tài sản thanh khoản chỉ bằng một vài mã thông báo, qua đó hoàn thành cuộc tấn công.
Khi hệ thống tính toán cần bao nhiêu haSUI để thêm một lượng thanh khoản lớn như vậy:

Vấn đề mấu chốt ở đây là việc triển khai hàm checked_shlw có lỗi nghiêm trọng. Trên thực tế, bất kỳ giá trị đầu vào nào nhỏ hơn 0xffffffffffffff << 192 sẽ bỏ qua chức năng phát hiện tràn dữ liệu. Tuy nhiên, khi các giá trị này được dịch trái 64 bit, kết quả vượt quá phạm vi biểu diễn của u256 và dữ liệu bậc cao bị cắt cụ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 = giá trị rất lớn (khoảng 2^256-2^192)
- Hầu như tất cả các đầu vào đều nhỏ hơn mặt nạ này, bỏ qua việc phát hiện tràn
- Vấn đề thực tế: khi n >= 2^192, n << 64 sẽ vượt quá phạm vi u256 và sẽ bị cắt bớt
Thanh khoản trung bình của kẻ tấn công * sqrt_price_diff = 6277101735386680763835789423207666908085499738337898853712:
- Mặt nạ lỗi nhỏ hơn, bỏ qua phát hiện tràn
- Tuy nhiên, sau khi dịch chuyển sang trái 64 bit, giá trị tối đa của u256 sẽ bị vượt quá, khiến phần thừa bị cắt bớt.
- Kết quả tính toán cuối cùng nhỏ hơn 1, nhưng vì làm tròn lên nên thương bằng 1.

4. Cuối cùng, kẻ tấn công loại bỏ thanh khoản và thu được lợi nhuận token khổng lồ:
Lần loại bỏ lần: 10.024.321,28 haSUI thu được
Lần xóa lần: Nhận 1 haSUI
Lần rút lần: 10.024.321,28 haSUI đã thu được

5. Kẻ tấn công trả lại Khoản vay nhanh, thu được 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 trạng sửa chữa của bên dự án
Sau cuộc tấn công, Cetus đã phát hành bản sửa lỗi. Để biết mã sửa lỗi cụ thể, vui lòng tham khảo : https://github.com/CetusProtocol/integer-mate/pull/7/files#diff-c04eb6ebebabb80342cd953bc63925e1c1cdc7ae1fb572f4aad240288a69409.
Hàm checked_shlw cố định như sau:

Hướng dẫn sửa chữa:
Đã sửa mặt nạ không chính xác 0xffffffffffffffff << 192 thành ngưỡng chính xác 1 << 192 Đã sửa điều kiện phán đoán từ mặt nạ n > thành mặt nạ n >=
Đảm bảo rằng khi dịch chuyển trái 64 bit có thể gây tràn, cờ tràn đượ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, bao gồm nhiều tài sản khác nhau như Sui , vSUI và USDC.

Chúng tôi phát hiện kẻ tấn công đã chuẩn bị Phí Gas hai ngày trước và đã thực hiện một nỗ lực trước khi tấn công nhưng không thành công:

Sau khi kiếm được lợi nhuận, kẻ tấn công đã chuyển một phần tiền như USDC, SOL và suiETH đến địa chỉ EVM 0x89012a55cd6b88e407c9d4ae9b3425f55924919b thông qua cầu nối xuyên chuỗi Chuỗi chéo như Sui Bridge, Circle, Wormhole và Mayan:

Trong đó, 5.2341 WBNB được liên Chuỗi chéo với địa chỉ BSC 0x89012a55cd6b88e407c9d4ae9b3425f55924919b:

Kẻ tấn công sau đó đã gửi 10 triệu đô la tài sản vào Suilend:

Kẻ tấn công cũng đã chuyển 24.022.896 Sui đến địa chỉ mới 0xcd8962dad278d8b50fa0f9eb0186bfa4cbdecc6d59377214c88d0286a0ac9562, nhưng vẫn 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 162 triệu đô la bị đánh cắp 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 Chuỗi MistTrack để phân tích địa chỉ 0x89012a55cd6b88e407c9d4ae9b3425f55924919b trên EVM nhận tiền xuyên 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 USDT, 40,88 triệu USDC, 1.771 SOL và 8.130,4 ETH trên Ethereum.
Trong đó, USDT, USDC và SOL được trao đổi lấy ETH thông qua coW Swap, ParaSwap, v.v.:


Tiếp theo, địa chỉ đã chuyển 20.000 ETH đến địa chỉ 0x0251536bfcf144b88e1afa8fe60184ffdb4caf16, nhưng vẫn chưa chuyển ra:

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ỉ nêu trên vào cơ sở dữ liệu đị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 lần 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ể bằng cách tính toán 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 giá 1 token . Đây là một cuộc tấn công toán học cực kỳ tinh vi. Đội ngũ bảo mật SlowMist khuyến nghị các nhà phát triển xác minh chặt chẽ 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.





