Vào ngày 3 tháng 1 năm 2024, theo Beosin EagleEye, dự án Radiant Capital đã trở thành nạn nhân của một cuộc tấn công cho vay nhanh của kẻ tấn công. Thông qua ba giao dịch, kẻ tấn công đã đánh cắp hơn 1900 ETH, trị giá hơn 4,5 triệu USD. Số tiền bị đánh cắp hiện đang được giữ tại địa chỉ của kẻ tấn công và nhóm bảo mật Beosin đã nhanh chóng phân tích vụ việc.

Phân tích lỗ hổng

Nguyên nhân sâu xa của sự cố này nằm ở việc tính toán số lượng token của dự án Radiant Capital, bao gồm việc mở rộng và làm tròn độ chính xác. Kẻ tấn công khai thác khả năng kiểm soát độ chính xác và kết hợp với làm tròn, mở rộng tỷ suất lợi nhuận cho cuộc tấn công.

Trong mã được quan sát, hàm rayDiv lấy hai dữ liệu uint256, a và b. Toàn bộ quá trình có thể được đơn giản hóa dưới dạng (a RAY + b/2) / b, trong đó RAY là dữ liệu mở rộng chính xác, bằng 10²⁷. Điều này dẫn đến RAY / b + 0,5, đạt được chức năng làm tròn. Nguồn sai số chính trong phép tính này xuất phát từ b. Nếu b nhỏ hơn a đáng kể thì sai số sẽ không đáng kể. Tuy nhiên, nếu b có độ lớn tương tự a thì sai số có thể rất lớn.

Ví dụ: nếu RAY = 10000 và b = 3, kết quả tính toán là 3333, nhỏ hơn 1/10000 so với giá trị thực. Nếu RAY = 10000 và b = 3000 thì kết quả tính toán là 3, nhỏ hơn 1/10 so với giá trị thực.

Trong vụ việc này, kẻ tấn công đã thao túng giá trị của b để có độ lớn tương tự a, khiến phép tính tương đương 3/2.0001 = 1. Giá trị tính được nhỏ hơn 1/3 so với giá trị thực.

Quá trình tấn công

  1. Kẻ tấn công ban đầu đã vay 3 triệu USDC thông qua khoản vay nhanh AAVE làm vốn khởi nghiệp cho cuộc tấn công.

2. 2 triệu USDC đã được cam kết cho hợp đồng Radiant và kẻ tấn công đã nhận được 2 triệu chứng chỉ mã thông báo rUSDCn.

3. Kẻ tấn công đã sử dụng khoản vay nhanh thông qua hợp đồng Radiant để vay 2 triệu USDC. Trong chức năng gọi lại, 2 triệu USDC đã được hoàn trả, đồng thời trích xuất USDC đã cam kết từ bước thứ hai. Chức năng cho vay nhanh được gọi là chức năng chuyển từ, chuyển USDC của kẻ tấn công vào hợp đồng, với khoản phí 9/10000 được thu làm thanh khoản cho nhóm.

4. Bằng cách lặp lại bước 3, kẻ tấn công đã kiểm soát chỉ số thanh khoản ở mức độ lớn, đạt đến mức thanh khoản Index=2718000000009999999999999998631966035920.

5. Sau đó, kẻ tấn công đã tạo một hợp đồng mới và gửi 543.600 USDC vào đó. Số tiền này tương ứng với hai lần giá trị chỉ số thanh khoản từ bước 4, tạo điều kiện thuận lợi cho việc kiểm soát làm tròn.

6. Kẻ tấn công đã thế chấp toàn bộ 543.600 USDC vào hợp đồng Radiant, thu được số tiền rUSDCn tương đương.

7. Kẻ tấn công đã rút 407.700 USDC. Mặc dù lẽ ra 407.700 rUSDCn đã bị đốt, như đã đề cập ở trên, nhưng chức năng ghi này liên quan đến việc tính toán làm tròn và mở rộng độ chính xác. 4077000000000000000000000000000000000000/271800000000999999999999999999999998631966035920 = 1,49999999, nhưng làm tròn cho kết quả là 1, khiến kết quả nhỏ hơn 1/3 so với giá trị thực. Như hình bên dưới, thay vì đốt 407.700 thì chỉ đốt 271.800, cho phép kẻ tấn công rút được 407.700 USDC.

8. Khai thác lỗ hổng từ bước 7, kẻ tấn công lặp lại các hoạt động cầm cố và rút tiền, liên tục rút nhiều hơn 1/3 số tiền đã cam kết, cuối cùng đổi tất cả USDC từ nhóm.

Theo dõi quỹ

Tính đến thời điểm viết bài, 1902 ETH bị đánh cắp vẫn nằm trong địa chỉ của hacker mà không hề di chuyển. Beosin Trace sẽ tiếp tục theo dõi quỹ.

Khi năm 2024 bắt đầu, chúng ta đã chứng kiến ​​hai vụ trộm cắp có giá trị cao. (Đánh giá về sự cố bảo mật ngày hôm qua: Điều gì đã xảy ra trong vụ trộm đầu tiên của năm, vụ trộm Orbit Chain trị giá 80 triệu USD?) Chuỗi sự kiện này như một lời nhắc nhở rằng trong hệ sinh thái Web3, các biện pháp phòng ngừa bảo mật vẫn rất quan trọng!

Liên hệ

Nếu bạn cần bất kỳ dịch vụ bảo mật blockchain nào, vui lòng liên hệ với chúng tôi:

Trang web chính thức Beosin EagleEye Twitter Telegram Linkedin