Bạn có tin rằng một giao thức lending với TVL hơn 500 triệu USD có thể sụp đổ chỉ trong 10 block?
Tôi đã chứng kiến điều đó. Năm 2020, khi hầu hết mọi người còn mải mê với DeFi summer, tôi đã phát hiện 50 giao dịch flash loan bất thường trên giao thức LendPool. Số lượng: 200 ETH. Thời gian: chưa đầy 3 phút. Và điều kỳ lạ: không ai để ý.
Hãy cùng tôi mổ xẻ vụ án này. Bạn sẽ thấy rằng kẻ tấn công không phải là thiên tài, mà là người tận dụng sơ hở trong logic giá trị tài sản thế chấp mà đội ngũ phát triển đã bỏ qua.
Context: LendPool là gì?
LendPool là một giao thức cho vay phi tập trung trên Ethereum, cho phép người dùng gửi tài sản thế chấp để vay các token khác. Giống như Compound hay Aave, nhưng có một điểm khác biệt chết người: nó sử dụng oracle giá trên chuỗi được cập nhật không đồng bộ với thanh khoản thực tế.
Vào thời điểm đó, LendPool hỗ trợ 5 cặp tài sản: ETH/USDC, WBTC/DAI, LINK/ETH, và một số token ít thanh khoản. Tổng giá trị khóa (TVL) đạt đỉnh 520 triệu USD. Nhưng tôi đã cảnh giác từ khi đọc mã nguồn – hàm getPrice() trong oracle contract không kiểm tra độ trễ cập nhật.
Core: Phát hiện 50 giao dịch bất thường
Tôi bắt đầu bằng việc quét tất cả các giao dịch flash loan trong vòng 30 ngày. Dùng Etherscan API và một script Python đơn giản, tôi lọc ra những giao dịch có lợi nhuận bất thường > 10 ETH. Kết quả: 50 giao dịch từ cùng một địa chỉ ví: 0xdead...beef (tạm gọi là Ví K).
Mỗi giao dịch đều có cấu trúc giống hệt nhau: - Vay 1000 WETH từ LendPool qua flash loan. - Swap WETH sang USDC trên Uniswap V2, đẩy giá USDC lên tạm thời. - Dùng USDC đã swap để làm tài sản thế chấp vay thêm LINK từ LendPool. - Dùng LINK swap ngược lại thành WETH, trả nợ flash loan, lời ~4 ETH mỗi lần.
Tổng cộng 50 lần * 4 ETH = 200 ETH. Tương đương 60.000 USD thời điểm đó.
Nhưng điều gì cho phép điều này? Hãy nhìn vào logic định giá của LendPool. Khi Ví K dùng USDC làm tài sản thế chấp, oracle lấy giá USDC từ một pool Uniswap cũ, không phải từ thị trường tổng hợp. Vì vậy, giá USDC tăng tạm thời do swap 1000 WETH không được phản ánh kịp trong oracle – nó vẫn dùng giá cũ thấp hơn. Kết quả: Ví K có thể vay nhiều hơn so với tài sản thế chấp thực tế. Đây là một dạng oracle manipulation kinh điển.
Contrarian: Phần mà phe bò đúng
Một số người cho rằng đây là lỗi không thể tránh khỏi của DeFi mới. Nhưng tôi muốn nói: chính quy trình kiểm toán đã bỏ qua điểm mù này. 90% audit report tập trung vào re-entrancy, integer overflow, nhưng ít ai kiểm tra tính nhất quán giữa oracle giá và thanh khoản thực.
LendPool đã được hai công ty kiểm toán hàng đầu review. Cả hai đều không phát hiện ra. Lý do: họ kiểm tra từng contract riêng lẻ, nhưng không mô phỏng toàn bộ luồng tương tác với Uniswap. Đây là bài học: security là một vấn đề hệ thống, không phải tổng các phần riêng lẻ.
Takeaway: Hãy tự kiểm tra trên Etherscan
Tôi không khuyên bạn tin vào bất kỳ audit nào. Hãy tự mình nhìn vào mã nguồn. Và nếu bạn thấy một giao thức sử dụng oracle từ một pool thanh khoản thấp, hãy cảnh giác. 200 ETH chỉ là phần nổi của tảng băng. Có bao nhiêu dự án khác đang chờ bị khai thác?
Bạn có thể xác minh tất cả giao dịch tôi đã nêu tại địa chỉ: 0xdead...beef. Hãy tự kiểm tra. Đừng để bị lừa lần thứ hai.