Phân tích tấn công tái nhập khoản vay nhanh của dự án Jarvis Network
Vào ngày 15 tháng 1 năm 2023, dự án Jarvis_Network đã bị tấn công, mất 663,101 MATIC. Cuộc tấn công này chủ yếu lợi dụng khoản vay nhanh và lỗ hổng tái nhập, dẫn đến sự mất mát tài sản của dự án.
Bằng cách phân tích ngăn xếp gọi giao dịch, phát hiện ra rằng kẻ tấn công đã thực hiện tấn công tái nhập trong hàm remove_liquidity. Hàm này chịu trách nhiệm loại bỏ tính thanh khoản và hoàn lại token cho người dùng. Do Polygon có cấu trúc tương tự như chuỗi EVM, quá trình chuyển MATIC đã kích hoạt tái nhập hợp đồng.
Cuộc tấn công tái nhập xảy ra ở giai đoạn truy vấn giá. Kẻ tấn công chuyển MATIC vào hợp đồng của mình khi loại bỏ thanh khoản. Trong quá trình gọi lại, kẻ tấn công đã truy vấn giá của một mã thông báo nào đó trước. Do việc cập nhật biến self.D trong hợp đồng chậm hơn so với thao tác chuyển tiền, dẫn đến việc lấy giá ở giai đoạn trước đó bị sai.
Quy trình thực hiện hàm remove_liquidity như sau:
Tiêu hủy token LP của người dùng
Gửi tiền ký quỹ đến người dùng
Cập nhật biến self.D
Biến self.D được sử dụng để tính toán giá, và sẽ được cập nhật khi thêm và loại bỏ thanh khoản. Kẻ tấn công đã lợi dụng việc thao tác với số tiền lớn, dẫn đến giá trị self.D tăng đáng kể khi thêm thanh khoản, trong khi không kịp cập nhật khi loại bỏ.
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 đã vượt qua giới hạn này bằng cách vay mượn qua hợp đồng.
Cuộc tấn công này đã phơi bày ra những lỗ hổng an ninh trong mã dự án. Để tránh những vấn đề tương tự, chúng tôi khuyên bên dự án nên thực hiện các biện pháp sau:
Thực hiện kiểm toán an ninh nghiêm ngặt
Đặt thao tác sửa đổi biến trước khi gọi bên ngoài
Sử dụng nhiều nguồn dữ liệu để lấy giá
Tuân theo quy tắc lập trình "Kiểm tra - Hiệu lực - Tương tác" (Checks-Effects-Interactions)
Bằng cách tối ưu hóa logic mã và tăng cường biện pháp an ninh, có thể nâng cao hiệu quả tính an toàn và ổn định của dự án, ngăn chặn các cuộc tấn công tương tự xảy ra lần nữa.
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遭Khoản vay nhanh重入攻击损失663,101个MATIC
Phân tích tấn công tái nhập khoản vay nhanh của dự án Jarvis Network
Vào ngày 15 tháng 1 năm 2023, dự án Jarvis_Network đã bị tấn công, mất 663,101 MATIC. Cuộc tấn công này chủ yếu lợi dụng khoản vay nhanh và lỗ hổng tái nhập, dẫn đến sự mất mát tài sản của dự án.
Bằng cách phân tích ngăn xếp gọi giao dịch, phát hiện ra rằng kẻ tấn công đã thực hiện tấn công tái nhập trong hàm remove_liquidity. Hàm này chịu trách nhiệm loại bỏ tính thanh khoản và hoàn lại token cho người dùng. Do Polygon có cấu trúc tương tự như chuỗi EVM, quá trình chuyển MATIC đã kích hoạt tái nhập hợp đồng.
Cuộc tấn công tái nhập xảy ra ở giai đoạn truy vấn giá. Kẻ tấn công chuyển MATIC vào hợp đồng của mình khi loại bỏ thanh khoản. Trong quá trình gọi lại, kẻ tấn công đã truy vấn giá của một mã thông báo nào đó trước. Do việc cập nhật biến self.D trong hợp đồng chậm hơn so với thao tác chuyển tiền, dẫn đến việc lấy giá ở giai đoạn trước đó bị sai.
Quy trình thực hiện hàm remove_liquidity như sau:
Biến self.D được sử dụng để tính toán giá, và sẽ được cập nhật khi thêm và loại bỏ thanh khoản. Kẻ tấn công đã lợi dụng việc thao tác với số tiền lớn, dẫn đến giá trị self.D tăng đáng kể khi thêm thanh khoản, trong khi không kịp cập nhật khi loại bỏ.
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 đã vượt qua giới hạn này bằng cách vay mượn qua hợp đồng.
Cuộc tấn công này đã phơi bày ra những lỗ hổng an ninh trong mã dự án. Để tránh những vấn đề tương tự, chúng tôi khuyên bên dự án nên thực hiện các biện pháp sau:
Bằng cách tối ưu hóa logic mã và tăng cường biện pháp an ninh, có thể nâng cao hiệu quả tính an toàn và ổn định của dự án, ngăn chặn các cuộc tấn công tương tự xảy ra lần nữa.