
Hơn 1.900 ETH bị đánh cắp, Radiant Capital bị tin tặc "dòm ngó" và lấy đi 4,5 triệu USD như thế nào
Tuyển chọn TechFlowTuyển chọn TechFlow

Hơn 1.900 ETH bị đánh cắp, Radiant Capital bị tin tặc "dòm ngó" và lấy đi 4,5 triệu USD như thế nào
Vào ngày 3 tháng 1 năm 2024, dự án Radiant Capital đã bị tấn công bằng flash loan, kẻ tấn công đã đánh cắp hơn 1.900 ETH qua 3 giao dịch, tương đương hơn 4,5 triệu USD. Hiện tại, số tiền bị đánh cắp vẫn đang được lưu giữ trong địa chỉ của kẻ tấn công.
Tác giả: Beosin
Ngày 3 tháng 1 năm 2024, theo dữ liệu từ nền tảng giám sát, cảnh báo và ngăn chặn rủi ro an ninh EagleEye thuộc Beosin, dự án Radiant Capital đã bị tấn công bằng flash loan. Kẻ tấn công thông qua 3 giao dịch đã đánh cắp hơn 1900 ETH, trị giá trên 4,5 triệu USD. Hiện tại, số tiền bị đánh cắp vẫn đang được lưu giữ tại địa chỉ của kẻ tấn công. Ngay lập tức, đội ngũ an ninh Beosin đã tiến hành phân tích sự việc này.
Phân tích lỗ hổng
Nguyên nhân gốc rễ của sự cố này là do trong quá trình tính toán số lượng token, dự án Radiant Capital đã sử dụng mở rộng độ chính xác và áp dụng phương pháp làm tròn (làm tròn đến số nguyên gần nhất), khiến cho kẻ tấn công có thể kiểm soát kích thước độ chính xác, kết hợp với việc làm tròn để khuếch đại điểm lợi nhuận nhằm thực hiện cuộc tấn công.

Xem xét đoạn mã trên, hàm rayDiv nhận hai giá trị uint256 là a và b, toàn bộ quá trình có thể viết gọn thành (a*RAY + b/2)/b, trong đó RAY là giá trị mở rộng độ chính xác, bằng 10^27, do đó kết quả tương đương với a*RAY/b + 0.5, thực hiện chức năng làm tròn. Sai số chính của cách tính này bắt nguồn từ b: nếu b cực nhỏ so với a thì sai số có thể bỏ qua; nhưng nếu b cùng bậc độ lớn với a, sai số có thể đạt tới mức bằng chính a.
Ví dụ: Nếu a*RAY = 10000, b = 3, thì kết quả tính được là 3333, nhỏ hơn giá trị thực tế 1/10000; còn nếu a*RAY = 10000, b = 3000, kết quả tính được là 3, nhỏ hơn giá trị thực tế 1/10.
Trong sự kiện lần này, kẻ tấn công đã điều khiển giá trị b sao cho b cùng bậc độ lớn với a, khiến phép tính tương đương với 3/2.0001 = 1, giá trị tính toán nhỏ hơn giá trị thực tế tới 1/3.
Quy trình tấn công
Hãy cùng xem quy trình tấn công của tin tặc:
1. Tin tặc trước tiên mượn 3 triệu USDC thông qua flash loan trên AAVE, dùng làm vốn khởi động cho cuộc tấn công.

2. Tin tặc gửi 2 triệu USDC vào hợp đồng Radiant và nhận được 2 triệu token chứng nhận rUSDCn.

3. Tin tặc thực hiện flash loan thông qua hợp đồng Radiant để vay 2 triệu USDC, trong hàm callback hoàn trả lại 2 triệu USDC, đồng thời rút lượng USDC đã gửi ở bước thứ hai, cuối cùng hàm flash loan sẽ gọi hàm transferFrom để chuyển toàn bộ số USDC của tin tặc vào hợp đồng kèm theo cả gốc lẫn phí. Lúc này sẽ thu một khoản phí 9/10000, và khoản phí này sẽ trở thành thanh khoản cho pool.

4. Tin tặc lặp lại thao tác ở bước 3 nhiều lần, kiểm soát chỉ số liquidityIndex tăng lên rất lớn, cụ thể liquidityIndex = 271800000000999999999999998631966035920.

5. Tiếp theo, tin tặc tạo một hợp đồng mới và nạp vào 543.600 USDC, do 5436 (giá trị USDC) đúng bằng gấp đôi 2718 (giá trị liquidityIndex), thuận tiện cho việc kiểm soát phép làm tròn.

6. Tin tặc thế chấp toàn bộ 543.600 USDC vào hợp đồng Radiant và nhận được số lượng rUSDCn tương ứng.

7. Tin tặc rút ra 407.700 USDC. Về lý thuyết cần phải đốt 407.700 rUSDCn, nhưng như đã nói ở trên, hàm burn sử dụng mở rộng độ chính xác và tính toán làm tròn.
407700000000000000000000000000000000000 / 271800000000999999999999998631966035920 = 1.49999999, làm tròn sẽ được 1, dẫn đến kết quả nhỏ hơn 1/3 so với thực tế.
Như hình dưới đây, lẽ ra phải đốt 407.700 nhưng vẫn còn lại 271.800, nghĩa là chỉ đốt đi 271.800, nhưng tin tặc đã rút được 407.700 USDC.

8. Tin tặc lợi dụng lỗ hổng ở bước 7, lặp lại thao tác thế chấp và rút tiền, với lượng rút luôn nhiều hơn lượng thế chấp 1/3, cuối cùng rút sạch toàn bộ USDC trong pool.

Theo dõi dòng tiền
Tính đến thời điểm xuất bản bài viết, 1902 ETH bị đánh cắp vẫn nằm im tại địa chỉ của tin tặc chưa di chuyển. Beosin Trace sẽ tiếp tục giám sát dòng tiền này.

Khi năm 2024 vừa bắt đầu, chúng ta đã chứng kiến hai vụ việc bị đánh cắp với số tiền lớn. (Tổng kết sự cố an ninh hôm qua: Vụ án đầu năm, sự cố Orbit Chain bị mất 80 triệu USD là như thế nào?) Một loạt các sự kiện này một lần nữa nhắc nhở chúng ta rằng, trong hệ sinh thái Web3, phòng ngừa an ninh vẫn luôn cực kỳ quan trọng!
Chào mừng tham gia cộng đồng chính thức TechFlow
Nhóm Telegram:https://t.me/TechFlowDaily
Tài khoản Twitter chính thức:https://x.com/TechFlowPost
Tài khoản Twitter tiếng Anh:https://x.com/BlockFlow_News













