Dự án Euler Finance bị cuộc tấn công cho vay chớp nhoáng, thiệt hại gần 200 triệu đô la
Vào ngày 13 tháng 3 năm 2023, dự án Euler Finance đã bị tấn công cho vay chớp nhoáng do lỗ hổng hợp đồng, với tổn thất lên tới 197 triệu USD. Kẻ tấn công đã lợi dụng lỗ hổng trong hàm donateToReserves của hợp đồng dự án, nơi thiếu kiểm tra tính thanh khoản, để thu được lợi nhuận khổng lồ thông qua nhiều thao tác.
Phân tích quá trình tấn công
Kẻ tấn công đầu tiên vay 30 triệu DAI từ một nền tảng cho vay bằng khoản vay nhanh, và triển khai hai hợp đồng: hợp đồng cho vay và hợp đồng thanh lý.
Kẻ tấn công đã thế chấp 20 triệu DAI đã vay vào hợp đồng Euler Protocol, nhận được 195.000 eDAI.
Sử dụng tính năng đòn bẩy 10 lần của Giao thức Euler, kẻ tấn công đã vay ra 1.956.000 eDAI và 2.000.000 dDAI.
Kẻ tấn công sử dụng 10 triệu DAI còn lại để trả một phần nợ, đã tiêu hủy lượng dDAI tương ứng, sau đó lại vay số lượng eDAI và dDAI tương đương.
Bước quan trọng: Kẻ tấn công gọi hàm donateToReserves, quyên góp 1 triệu eDAI, sau đó thông qua hàm liquidate để thanh lý, nhận được 3,1 triệu dDAI và 2,5 triệu eDAI.
Cuối cùng, kẻ tấn công đã rút 389.000 DAI, hoàn trả 300.000 DAI khoản vay nhanh, và cuối cùng thu lợi 88.700 DAI.
Nguyên nhân lỗ hổng
Lỗ hổng cốt lõi của cuộc tấn công này nằm ở hàm donateToReserves trong hợp đồng Euler Finance, thiếu kiểm tra thanh khoản cần thiết. So với các hàm quan trọng khác như mint, hàm donateToReserves không thực hiện thao tác checkLiquidity. Điều này cho phép kẻ tấn công có thể vượt qua kiểm tra thanh khoản bình thường, tạo ra trạng thái có thể bị thanh lý một cách nhân tạo, sau đó hoàn thành việc thanh lý để thu lợi.
Trong trường hợp bình thường, hàm checkLiquidity sẽ gọi mô-đun RiskManager để đảm bảo rằng số lượng Etoken của người dùng lớn hơn số lượng Dtoken, nhằm duy trì tính an toàn của hợp đồng. Tuy nhiên, do hàm donateToReserves thiếu bước quan trọng này, kẻ tấn công đã tận dụng lỗ hổng này để thực hiện cuộc tấn công.
Đề xuất an toàn
Đối với các cuộc tấn công như vậy, chúng tôi khuyên các dự án blockchain:
Thực hiện kiểm toán an ninh toàn diện trước khi hợp đồng được ra mắt, đảm bảo tính an toàn của hợp đồng.
Đối với các dự án cho vay, cần đặc biệt chú ý đến các khía cạnh then chốt như hoàn trả vốn, kiểm tra tính thanh khoản và thanh lý nợ.
Đảm bảo rằng tất cả các hàm có thể ảnh hưởng đến trạng thái tài sản của người dùng đều bao gồm các kiểm tra an toàn cần thiết, chẳng hạn như kiểm tra tính thanh khoản.
Thực hiện kiểm tra và cập nhật mã định kỳ, kịp thời sửa chữa các lỗ hổng phát hiện.
Thiết lập cơ chế phản ứng khẩn cấp để có thể phản ứng và xử lý nhanh chóng khi xảy ra sự cố an ninh.
Bằng cách thực hiện các biện pháp này, bên dự án có thể giảm đáng kể rủi ro bị tấn công tương tự, nâng cao tính an toàn tổng thể của hợp đồng.
Trang này có thể chứa nội dung của bên thứ ba, được cung cấp chỉ nhằm mục đích thông tin (không phải là tuyên bố/bảo đảm) và không được coi là sự chứng thực cho quan điểm của Gate hoặc là lời khuyên về tài chính hoặc chuyên môn. Xem Tuyên bố từ chối trách nhiệm để biết chi tiết.
9 thích
Phần thưởng
9
5
Đăng lại
Chia sẻ
Bình luận
0/400
WhaleWatcher
· 08-11 16:40
又 một đồ ngốc đã vào cuộc.
Xem bản gốcTrả lời0
Lonely_Validator
· 08-10 08:22
Blockchain an ninh bây giờ kém đến vậy? Thật không nói nên lời.
Euler Finance遭 cuộc tấn công cho vay chớp nhoáng 近2亿美元损失
Dự án Euler Finance bị cuộc tấn công cho vay chớp nhoáng, thiệt hại gần 200 triệu đô la
Vào ngày 13 tháng 3 năm 2023, dự án Euler Finance đã bị tấn công cho vay chớp nhoáng do lỗ hổng hợp đồng, với tổn thất lên tới 197 triệu USD. Kẻ tấn công đã lợi dụng lỗ hổng trong hàm donateToReserves của hợp đồng dự án, nơi thiếu kiểm tra tính thanh khoản, để thu được lợi nhuận khổng lồ thông qua nhiều thao tác.
Phân tích quá trình tấn công
Kẻ tấn công đầu tiên vay 30 triệu DAI từ một nền tảng cho vay bằng khoản vay nhanh, và triển khai hai hợp đồng: hợp đồng cho vay và hợp đồng thanh lý.
Kẻ tấn công đã thế chấp 20 triệu DAI đã vay vào hợp đồng Euler Protocol, nhận được 195.000 eDAI.
Sử dụng tính năng đòn bẩy 10 lần của Giao thức Euler, kẻ tấn công đã vay ra 1.956.000 eDAI và 2.000.000 dDAI.
Kẻ tấn công sử dụng 10 triệu DAI còn lại để trả một phần nợ, đã tiêu hủy lượng dDAI tương ứng, sau đó lại vay số lượng eDAI và dDAI tương đương.
Bước quan trọng: Kẻ tấn công gọi hàm donateToReserves, quyên góp 1 triệu eDAI, sau đó thông qua hàm liquidate để thanh lý, nhận được 3,1 triệu dDAI và 2,5 triệu eDAI.
Cuối cùng, kẻ tấn công đã rút 389.000 DAI, hoàn trả 300.000 DAI khoản vay nhanh, và cuối cùng thu lợi 88.700 DAI.
Nguyên nhân lỗ hổng
Lỗ hổng cốt lõi của cuộc tấn công này nằm ở hàm donateToReserves trong hợp đồng Euler Finance, thiếu kiểm tra thanh khoản cần thiết. So với các hàm quan trọng khác như mint, hàm donateToReserves không thực hiện thao tác checkLiquidity. Điều này cho phép kẻ tấn công có thể vượt qua kiểm tra thanh khoản bình thường, tạo ra trạng thái có thể bị thanh lý một cách nhân tạo, sau đó hoàn thành việc thanh lý để thu lợi.
Trong trường hợp bình thường, hàm checkLiquidity sẽ gọi mô-đun RiskManager để đảm bảo rằng số lượng Etoken của người dùng lớn hơn số lượng Dtoken, nhằm duy trì tính an toàn của hợp đồng. Tuy nhiên, do hàm donateToReserves thiếu bước quan trọng này, kẻ tấn công đã tận dụng lỗ hổng này để thực hiện cuộc tấn công.
Đề xuất an toàn
Đối với các cuộc tấn công như vậy, chúng tôi khuyên các dự án blockchain:
Thực hiện kiểm toán an ninh toàn diện trước khi hợp đồng được ra mắt, đảm bảo tính an toàn của hợp đồng.
Đối với các dự án cho vay, cần đặc biệt chú ý đến các khía cạnh then chốt như hoàn trả vốn, kiểm tra tính thanh khoản và thanh lý nợ.
Đảm bảo rằng tất cả các hàm có thể ảnh hưởng đến trạng thái tài sản của người dùng đều bao gồm các kiểm tra an toàn cần thiết, chẳng hạn như kiểm tra tính thanh khoản.
Thực hiện kiểm tra và cập nhật mã định kỳ, kịp thời sửa chữa các lỗ hổng phát hiện.
Thiết lập cơ chế phản ứng khẩn cấp để có thể phản ứng và xử lý nhanh chóng khi xảy ra sự cố an ninh.
Bằng cách thực hiện các biện pháp này, bên dự án có thể giảm đáng kể rủi ro bị tấn công tương tự, nâng cao tính an toàn tổng thể của hợp đồng.