Lỗ hổng hợp đồng OrionProtocol gây thiệt hại 2.9 triệu đô la
Vào ngày 2 tháng 2 năm 2023, hợp đồng OrionProtocol trên Ethereum và Binance Smart Chain đã bị tấn công tái nhập, gây ra thiệt hại khoảng 2,9 triệu đô la. Cụ thể, thiệt hại bao gồm 2.844.766 USDT trên chuỗi Ethereum và 191.606 BUSD trên chuỗi Binance Smart.
Phân tích quá trình tấn công
Kẻ tấn công trước tiên triển khai một hợp đồng Token đặc biệt và thực hiện các thao tác chuyển nhượng và ủy quyền liên quan. Sau đó, kẻ tấn công vay vốn thông qua phương thức swap của một DEX và gọi phương thức swapThroughOrionPool của OrionProtocol để thực hiện đổi token. Đường đổi token bao gồm địa chỉ hợp đồng Token mà kẻ tấn công đã tạo.
Khi thực hiện phương thức swapThroughOrionPool, do hợp đồng Token của kẻ tấn công chứa chức năng callback, điều này cho phép gọi lại phương thức depositAsset trong quá trình chuyển tiền. Điều này đã dẫn đến việc số tiền gửi bị tính toán lại nhiều lần, cuối cùng kẻ tấn công đã thu được lợi nhuận vượt mức thông qua thao tác rút tiền.
Dòng tiền
Vốn ban đầu của kẻ tấn công đến từ ví nóng của một nền tảng giao dịch nào đó. Trong số 1,651 ETH kiếm được từ cuộc tấn công, 657.5 ETH vẫn còn trong địa chỉ ví của kẻ tấn công, phần còn lại đã được chuyển qua dịch vụ trộn coin.
Lỗ hổng cốt lõi
Vấn đề xảy ra trong hàm doSwapThroughOrionPool. Hàm này thực hiện thao tác chuyển tiền trước khi cập nhật biến curBalance khi thực hiện _doSwapTokens. Kẻ tấn công đã lợi dụng hàm chuyển tiền của Token tùy chỉnh để gọi lại phương thức depositAsset, dẫn đến việc curBalance bị cập nhật sai. Điều này cho phép kẻ tấn công rút tiền thừa thông qua hàm withdraw sau khi hoàn trả khoản vay chớp nhoáng.
Đề xuất an toàn
Đối với hợp đồng thông minh có chức năng hoán đổi token, các nhà phát triển cần xem xét những điểm sau:
Xem xét các tình huống bất ngờ có thể xảy ra do nhiều Token và các lộ trình trao đổi khác nhau.
Tuân theo mô hình mã hóa "Kiểm tra - Hiệu lực - Tương tác" (Checks-Effects-Interactions), tức là trước tiên thực hiện kiểm tra trạng thái, sau đó cập nhật trạng thái hợp đồng, và cuối cùng là tương tác với hợp đồng bên ngoài.
Cập nhật các biến trạng thái quan trọng trước khi thực hiện gọi bên ngoài.
Thực hiện các cơ chế an ninh như khóa tái nhập.
Thực hiện kiểm toán an ninh toàn diện cho hợp đồng.
Bằng cách thực hiện những biện pháp này, có thể giảm đáng kể rủi ro hợp đồng thông minh bị tấn công, nâng cao tính an toàn và ổn định của dự án.
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.
OrionProtocol bị tấn công tái nhập, 2.9 triệu đô la bị đánh cắp
Lỗ hổng hợp đồng OrionProtocol gây thiệt hại 2.9 triệu đô la
Vào ngày 2 tháng 2 năm 2023, hợp đồng OrionProtocol trên Ethereum và Binance Smart Chain đã bị tấn công tái nhập, gây ra thiệt hại khoảng 2,9 triệu đô la. Cụ thể, thiệt hại bao gồm 2.844.766 USDT trên chuỗi Ethereum và 191.606 BUSD trên chuỗi Binance Smart.
Phân tích quá trình tấn công
Kẻ tấn công trước tiên triển khai một hợp đồng Token đặc biệt và thực hiện các thao tác chuyển nhượng và ủy quyền liên quan. Sau đó, kẻ tấn công vay vốn thông qua phương thức swap của một DEX và gọi phương thức swapThroughOrionPool của OrionProtocol để thực hiện đổi token. Đường đổi token bao gồm địa chỉ hợp đồng Token mà kẻ tấn công đã tạo.
Khi thực hiện phương thức swapThroughOrionPool, do hợp đồng Token của kẻ tấn công chứa chức năng callback, điều này cho phép gọi lại phương thức depositAsset trong quá trình chuyển tiền. Điều này đã dẫn đến việc số tiền gửi bị tính toán lại nhiều lần, cuối cùng kẻ tấn công đã thu được lợi nhuận vượt mức thông qua thao tác rút tiền.
Dòng tiền
Vốn ban đầu của kẻ tấn công đến từ ví nóng của một nền tảng giao dịch nào đó. Trong số 1,651 ETH kiếm được từ cuộc tấn công, 657.5 ETH vẫn còn trong địa chỉ ví của kẻ tấn công, phần còn lại đã được chuyển qua dịch vụ trộn coin.
Lỗ hổng cốt lõi
Vấn đề xảy ra trong hàm doSwapThroughOrionPool. Hàm này thực hiện thao tác chuyển tiền trước khi cập nhật biến curBalance khi thực hiện _doSwapTokens. Kẻ tấn công đã lợi dụng hàm chuyển tiền của Token tùy chỉnh để gọi lại phương thức depositAsset, dẫn đến việc curBalance bị cập nhật sai. Điều này cho phép kẻ tấn công rút tiền thừa thông qua hàm withdraw sau khi hoàn trả khoản vay chớp nhoáng.
Đề xuất an toàn
Đối với hợp đồng thông minh có chức năng hoán đổi token, các nhà phát triển cần xem xét những điểm sau:
Bằng cách thực hiện những biện pháp này, có thể giảm đáng kể rủi ro hợp đồng thông minh bị tấn công, nâng cao tính an toàn và ổn định của dự án.