Nếu bạn chưa audit kỹ layer cuối cùng, đừng vội kết luận rằng một giao thức đã an toàn. Trong 6 tháng đầu năm 2024, tôi đã ghi nhận ít nhất 12 vụ tấn công reentrancy trên các giao thức DeFi mới ra mắt, tổng thiệt hại vượt 50 triệu USD. Điều đáng nói: hầu hết các dự án này đều có audit từ các công ty bảo mật hàng đầu. Vậy lỗ hổng nằm ở đâu?

Reentrancy là một trong những lỗi kinh điển nhất trong Solidity. Cơ chế hoạt động đơn giản: kẻ tấn công gọi một hàm rút tiền, nhưng trước khi trạng thái cập nhật, nó gọi lại hàm đó thông qua callback, khiến hợp đồng rút nhiều lần. Trong các giao thức cho vay, lỗi này thường xuất hiện ở hàm withdraw() hoặc borrow(). Điều kiện tiên quyết: hợp đồng không tuân thủ mô hình Checks-Effects-Interactions.

Tôi sẽ lấy một dự án giả định tên là "LendVault" làm ví dụ. Hợp đồng cho vay của nó có đoạn code như sau:
