Mới đây, một dự án DeFi mới nổi trên Arbitrum đã huy động thành công 12 triệu USD từ các quỹ đầu tư hàng đầu. Mã nguồn của họ trông có vẻ sạch sẽ, được kiểm toán bởi một công ty audit có tiếng. Nhưng tôi không tin vào vẻ ngoài. Tôi đã dành 48 giờ để đào sâu vào từng dòng code, và phát hiện ra một lỗ hổng reentrancy tinh vi được ngụy trang dưới dạng một hàm claimRewards tưởng chừng vô hại.
Đây không phải lần đầu tiên. Trong sự nghiệp audit của mình, tôi đã chứng kiến quá nhiều hợp đồng thông minh 'sạch' che giấu những điểm yếu chết người. Và như tôi thường nói: 'Mã nguồn nói dối, nhưng dấu vết không.' Hôm nay, tôi sẽ phân tích chi tiết lỗ hổng này, và chỉ ra tại sao hầu hết các audit truyền thống đều bỏ lỡ những vector tấn công tinh vi nhất.
Trước hết, hãy hiểu bối cảnh. Dự án này xây dựng một giao thức yield aggregator, cho phép người dùng stake token LP và nhận phần thưởng bằng token quản trị. Hàm claimRewards được thiết kế để cho phép người dùng rút phần thưởng tích lũy. Mã nguồn có vẻ an toàn: sử dụng mô hình checks-effects-interactions, kiểm tra số dư trước khi gửi. Nhưng có một chi tiết nhỏ bị bỏ qua: hàm này gọi một callback tới địa chỉ người dùng trước khi cập nhật trạng thái claimed.
Phân tích kỹ thuật: Dưới đây là đoạn code giả lập (đã được đơn giản hóa):