Phân tích cuộc tấn công tái nhập khoản vay nhanh vào Jarvis Network
Vào ngày 15 tháng 1 năm 2023, dự án Jarvis_Network đã gặp phải một sự cố tấn công lớn, gây ra thiệt hại 663,101 đồng MATIC. Cuộc tấn công này đã lợi dụng sự kết hợp giữa khoản vay nhanh và tấn công tái nhập, làm lộ ra các lỗ hổng nghiêm trọng trong hợp đồng của dự án.
Kẻ tấn công đã khéo léo lợi dụng một lỗ hổng trong hàm remove_liquidity. Hàm này sẽ trả lại các token mà người dùng đã thêm khi loại bỏ thanh khoản. Do chuỗi Polygon tương thích với EVM, khi MATIC được chuyển cho hợp đồng, logic tái nhập của hợp đồng sẽ được kích hoạt.
Phân tích cho thấy, điểm mấu chốt của cuộc tấn công nằm ở việc gọi hàm getUnderlyingPrice. Hàm này trả về mức giá khác biệt rõ rệt trước và sau khi gọi lại: trước khi gọi lại là 1002157321772769944, sau khi gọi lại thì lên tới 10091002696492234934, chênh lệch gần 10 lần.
Nguồn gốc của vấn đề là do thời điểm cập nhật biến self.D trong hợp đồng không hợp lý. Thứ tự thực hiện của hàm remove_liquidity là: 1) tiêu hủy LP token 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. Kẻ tấn công đã thực hiện một cuộc tấn công tái nhập ở bước thứ hai, lợi dụng giá trị self.D chưa được cập nhật để có được thông tin giá sai lệch, từ đó thực hiện các hoạt động vay mượn có lợi.
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 cuộc tấn công liên quan đến các thao tác giữa các hợp đồng, biện pháp bảo vệ này không hiệu quả.
Sự kiện này đã làm nổi bật một số nguyên tắc an ninh quan trọng:
Việc sửa đổi biến nên được hoàn thành trước khi gọi từ bên ngoài, để tránh tình trạng không nhất quán.
Cơ chế lấy giá nên sử dụng phương pháp nhiều nguồn dữ liệu, tăng cường độ tin cậy.
Logic mã nên tuân theo mô hình "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 điều kiện, sau đó sửa đổi biến trạng thái, cuối cùng mới thực hiện gọi bên ngoài.
Cuộc tấn công lần này lại một lần nữa chứng minh rằng, việc kiểm toán an ninh hợp đồng thông minh là vô cùng quan trọng. Các bên dự án nên chú trọng hơn đến tính an toàn của hợp đồng, đảm bảo mã nguồn được kiểm tra một cách toàn diện và nghiêm ngặt, nhằm ngăn ngừa sự xuất hiện của các lỗ hổng tương tự.
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万MATIC
Phân tích cuộc tấn công tái nhập khoản vay nhanh vào Jarvis Network
Vào ngày 15 tháng 1 năm 2023, dự án Jarvis_Network đã gặp phải một sự cố tấn công lớn, gây ra thiệt hại 663,101 đồng MATIC. Cuộc tấn công này đã lợi dụng sự kết hợp giữa khoản vay nhanh và tấn công tái nhập, làm lộ ra các lỗ hổng nghiêm trọng trong hợp đồng của dự án.
Kẻ tấn công đã khéo léo lợi dụng một lỗ hổng trong hàm remove_liquidity. Hàm này sẽ trả lại các token mà người dùng đã thêm khi loại bỏ thanh khoản. Do chuỗi Polygon tương thích với EVM, khi MATIC được chuyển cho hợp đồng, logic tái nhập của hợp đồng sẽ được kích hoạt.
Phân tích cho thấy, điểm mấu chốt của cuộc tấn công nằm ở việc gọi hàm getUnderlyingPrice. Hàm này trả về mức giá khác biệt rõ rệt trước và sau khi gọi lại: trước khi gọi lại là 1002157321772769944, sau khi gọi lại thì lên tới 10091002696492234934, chênh lệch gần 10 lần.
Nguồn gốc của vấn đề là do thời điểm cập nhật biến self.D trong hợp đồng không hợp lý. Thứ tự thực hiện của hàm remove_liquidity là: 1) tiêu hủy LP token 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. Kẻ tấn công đã thực hiện một cuộc tấn công tái nhập ở bước thứ hai, lợi dụng giá trị self.D chưa được cập nhật để có được thông tin giá sai lệch, từ đó thực hiện các hoạt động vay mượn có lợi.
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 cuộc tấn công liên quan đến các thao tác giữa các hợp đồng, biện pháp bảo vệ này không hiệu quả.
Sự kiện này đã làm nổi bật một số nguyên tắc an ninh quan trọng:
Cuộc tấn công lần này lại một lần nữa chứng minh rằng, việc kiểm toán an ninh hợp đồng thông minh là vô cùng quan trọng. Các bên dự án nên chú trọng hơn đến tính an toàn của hợp đồng, đảm bảo mã nguồn được kiểm tra một cách toàn diện và nghiêm ngặt, nhằm ngăn ngừa sự xuất hiện của các lỗ hổng tương tự.