Phân tích dự án Jarvis Network từ một cuộc tấn công tái tham gia flash loan
Gần đây, một sự kiện tấn công nhằm vào dự án Jarvis Network đã thu hút sự chú ý của ngành. Theo dữ liệu giám sát trên chuỗi, cuộc tấn công xảy ra vào ngày 15 tháng 1 năm 2023, dẫn đến thiệt hại cho dự án là 663,101 token MATIC.
Thông qua việc phân tích ngăn xếp gọi của giao dịch tấn công, chúng tôi phát hiện ra rằng kẻ tấn công đã sử dụng sự kết hợp giữa Khoản vay nhanh và lỗ hổng tái nhập. Trong quá trình loại bỏ tính thanh khoản, kẻ tấn công đã thành công trong việc thực hiện tấn công tái nhập, dẫn đến cùng một hàm trước và sau khi tái nhập trả về các giá trị hoàn toàn khác nhau.
Nghiên cứu sâu cho thấy, vấn đề nằm ở hàm remove_liquidity. Hàm này chịu trách nhiệm loại bỏ thanh khoản và trả lại token cho người dùng. Do chuỗi Polygon tương thích với EVM, trong quá trình chuyển tiền đã kích hoạt logic gọi lại của hợp đồng.
Lỗ hổng chính nằm ở biến self.D được sử dụng trong việc tính toán giá. Thông thường, self.D nên được cập nhật kịp thời khi loại bỏ tính thanh khoản. Tuy nhiên, do thiếu sót trong logic mã, việc cập nhật self.D đã bị trì hoãn cho đến sau khi gọi bên ngoài. Điều này đã tạo cơ hội cho kẻ tấn công chèn các thao tác vào giữa, tận dụng giá trị self.D chưa được cập nhật để thực hiện giao dịch chênh lệch giá.
Mặc dù hàm remove_liquidity sử dụng bộ trang trí @nonreentrant('lock') để ngăn chặn tấn công tái nhập, nhưng kẻ tấn công đã khéo léo vượt qua cơ chế bảo vệ này. Họ đã tránh tái nhập vào hàm remove_liquidity bằng cách tái nhập vào các chức năng cho vay của hợp đồng khác.
Cuộc tấn công lần này đã làm nổi bật tầm quan trọng của một số nguyên tắc an toàn chính trong phát triển hợp đồng thông minh:
Tuân thủ nghiêm ngặt mô hình Kiểm tra-Hiệu ứng-Tương tác.
Đảm bảo rằng việc cập nhật các biến quan trọng hoàn thành trước bất kỳ cuộc gọi bên ngoài nào.
Sử dụng nhiều nguồn dữ liệu để lấy giá, nhằm tăng cường tính linh hoạt của hệ thống.
Kiểm tra bảo mật toàn diện là điều cần thiết để tìm và khắc phục các lỗ hổng tiềm ẩn.
Sự cố này là một lời nhắc nhở khác rằng bảo mật luôn là ưu tiên hàng đầu trong hệ sinh thái blockchain đang phát triển nhanh chóng. Nhóm phát triển dự án nên liên tục theo dõi các phương pháp bảo mật mới nhất và tiến hành đánh giá mã và kiểm tra lỗ hổng thường xuyên để đảm bảo tính bảo mật của tài sản người dùng.
Xem bản gốc
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.
Jarvis Network đã bị tấn công tái tham gia khoản vay nhanh, mất 660.000 token MATIC
Phân tích dự án Jarvis Network từ một cuộc tấn công tái tham gia flash loan
Gần đây, một sự kiện tấn công nhằm vào dự án Jarvis Network đã thu hút sự chú ý của ngành. Theo dữ liệu giám sát trên chuỗi, cuộc tấn công xảy ra vào ngày 15 tháng 1 năm 2023, dẫn đến thiệt hại cho dự án là 663,101 token MATIC.
! Phân tích sự cố tấn công tái tham gia của Jarvis Network Flash Loan
Thông qua việc phân tích ngăn xếp gọi của giao dịch tấn công, chúng tôi phát hiện ra rằng kẻ tấn công đã sử dụng sự kết hợp giữa Khoản vay nhanh và lỗ hổng tái nhập. Trong quá trình loại bỏ tính thanh khoản, kẻ tấn công đã thành công trong việc thực hiện tấn công tái nhập, dẫn đến cùng một hàm trước và sau khi tái nhập trả về các giá trị hoàn toàn khác nhau.
! Phân tích sự cố tấn công tái tham gia của Jarvis Network Flash Loan
Nghiên cứu sâu cho thấy, vấn đề nằm ở hàm remove_liquidity. Hàm này chịu trách nhiệm loại bỏ thanh khoản và trả lại token cho người dùng. Do chuỗi Polygon tương thích với EVM, trong quá trình chuyển tiền đã kích hoạt logic gọi lại của hợp đồng.
Lỗ hổng chính nằm ở biến self.D được sử dụng trong việc tính toán giá. Thông thường, self.D nên được cập nhật kịp thời khi loại bỏ tính thanh khoản. Tuy nhiên, do thiếu sót trong logic mã, việc cập nhật self.D đã bị trì hoãn cho đến sau khi gọi bên ngoài. Điều này đã tạo cơ hội cho kẻ tấn công chèn các thao tác vào giữa, tận dụng giá trị self.D chưa được cập nhật để thực hiện giao dịch chênh lệch giá.
Mặc dù hàm remove_liquidity sử dụng bộ trang trí @nonreentrant('lock') để ngăn chặn tấn công tái nhập, nhưng kẻ tấn công đã khéo léo vượt qua cơ chế bảo vệ này. Họ đã tránh tái nhập vào hàm remove_liquidity bằng cách tái nhập vào các chức năng cho vay của hợp đồng khác.
Cuộc tấn công lần này đã làm nổi bật tầm quan trọng của một số nguyên tắc an toàn chính trong phát triển hợp đồng thông minh:
Sự cố này là một lời nhắc nhở khác rằng bảo mật luôn là ưu tiên hàng đầu trong hệ sinh thái blockchain đang phát triển nhanh chóng. Nhóm phát triển dự án nên liên tục theo dõi các phương pháp bảo mật mới nhất và tiến hành đánh giá mã và kiểm tra lỗ hổng thường xuyên để đảm bảo tính bảo mật của tài sản người dùng.