Phân tích cuộc tấn công tái nhập khoản vay nhanh của Jarvis Network
Gần đây, một dự án có tên Jarvis_Network đã遭受 khoản vay nhanh重入攻击, dẫn đến thiệt hại khoảng 66.3 nghìn MATIC代币. Sự kiện này xảy ra vào tối ngày 15 tháng 1 năm 2023.
Thông qua việc phân tích sâu về ngăn xếp gọi giao dịch, chúng tôi phát hiện ra rằng kẻ tấn công đã lợi dụng lỗ hổng tái nhập. Trong quá trình tái nhập, cùng một hàm của cùng một hợp đồng đã được gọi nhiều lần, nhưng giá trị trả về mỗi lần gọi lại có sự khác biệt lớn. Sự khác biệt này chủ yếu thể hiện trong hàm remove_liquidity.
Cuộc tấn công tái nhập xảy ra trong quá trình loại bỏ thanh khoản. Do Polygon và EVM là các chuỗi đồng cấu, khi MATIC được chuyển đến hợp đồng, logic tái nhập của hợp đồng được kích hoạt. Thông qua việc phân tích chi tiết ngăn xếp gọi, chúng tôi phát hiện ra vấn đề nằm ở chức năng getUnderlyingPrice.
Cuộc điều tra sâu hơn cho thấy, kẻ tấn công đã lợi dụng lỗ hổng trong thời điểm cập nhật biến self.D khi loại bỏ tính thanh khoản. Trong trường hợp bình thường, quy trình của phương thức remove_liquidity nên là: 1) hủy LP của người dùng; 2) gửi vốn ký quỹ cho người dùng; 3) cập nhật self.D. Tuy nhiên, kẻ tấn công đã thực hiện một thao tác gọi lại ở bước thứ hai, dẫn đến việc tính toán giá gặp lỗi nghiêm trọng.
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 do kẻ tấn công tái nhập vào các hợp đồng khác để vay mượn tiền, khóa tái nhập này đã không phát huy tác dụng.
Cuộc tấn công lần này chủ yếu phơi bày hai vấn đề:
Logic thay đổi biến nằm sau khi gọi bên ngoài, dẫn đến việc lấy giá bất thường.
Tái nhập giữa các hợp đồng làm cho khóa tái nhập mất hiệu lực.
Để ngăn chặn các cuộc tấn công tương tự, dự án nên thực hiện các biện pháp sau:
Đảm bảo mã đã trải qua kiểm toán an ninh chặt chẽ.
Đặt việc sửa đổi biến trước khi gọi từ bên ngoài.
Sử dụng phương pháp nhiều nguồn dữ liệu để lấy giá.
Tuân theo quy tắc lập trình "đánh giá trước, ghi vào biến sau, sau đó thực hiện gọi bên ngoài" (Checks-Effects-Interactions).
Bằng cách thực hiện những biện pháp này, dự án có thể cải thiện đáng kể tính bảo mật và ổn định của mình, cung cấp dịch vụ đáng tin cậy hơn cho 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遭 Khoản vay nhanh重入攻击 损失66.3万MATIC
Phân tích cuộc tấn công tái nhập khoản vay nhanh của Jarvis Network
Gần đây, một dự án có tên Jarvis_Network đã遭受 khoản vay nhanh重入攻击, dẫn đến thiệt hại khoảng 66.3 nghìn MATIC代币. Sự kiện này xảy ra vào tối ngày 15 tháng 1 năm 2023.
Thông qua việc phân tích sâu về ngăn xếp gọi giao dịch, chúng tôi phát hiện ra rằng kẻ tấn công đã lợi dụng lỗ hổng tái nhập. Trong quá trình tái nhập, cùng một hàm của cùng một hợp đồng đã được gọi nhiều lần, nhưng giá trị trả về mỗi lần gọi lại có sự khác biệt lớn. Sự khác biệt này chủ yếu thể hiện trong hàm remove_liquidity.
Cuộc tấn công tái nhập xảy ra trong quá trình loại bỏ thanh khoản. Do Polygon và EVM là các chuỗi đồng cấu, khi MATIC được chuyển đến hợp đồng, logic tái nhập của hợp đồng được kích hoạt. Thông qua việc phân tích chi tiết ngăn xếp gọi, chúng tôi phát hiện ra vấn đề nằm ở chức năng getUnderlyingPrice.
Cuộc điều tra sâu hơn cho thấy, kẻ tấn công đã lợi dụng lỗ hổng trong thời điểm cập nhật biến self.D khi loại bỏ tính thanh khoản. Trong trường hợp bình thường, quy trình của phương thức remove_liquidity nên là: 1) hủy LP của người dùng; 2) gửi vốn ký quỹ cho người dùng; 3) cập nhật self.D. Tuy nhiên, kẻ tấn công đã thực hiện một thao tác gọi lại ở bước thứ hai, dẫn đến việc tính toán giá gặp lỗi nghiêm trọng.
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 do kẻ tấn công tái nhập vào các hợp đồng khác để vay mượn tiền, khóa tái nhập này đã không phát huy tác dụng.
Cuộc tấn công lần này chủ yếu phơi bày hai vấn đề:
Để ngăn chặn các cuộc tấn công tương tự, dự án nên thực hiện các biện pháp sau:
Bằng cách thực hiện những biện pháp này, dự án có thể cải thiện đáng kể tính bảo mật và ổn định của mình, cung cấp dịch vụ đáng tin cậy hơn cho người dùng.
Ngôn ngữ nội dung: tiếng Trung
Bình luận được đưa ra:
Không làm kiểm toán hợp đồng mà chịu thiệt như vậy~