DeFi Attack? No, It's a Self-Inflicted Wound: The Oracle Lesson You Didn't Learn
Dương Thịnh
Hôm qua, một lending protocol trên Arbitrum mất 2 triệu USD. Mọi người la hét 'hack'. Tôi mở Etherscan, coi lại tx, thấy sự thật khác. Không có lỗi smart contract. Chỉ có một oracle bị thao túng do thanh khoản pool quá thấp.
Protocol này dùng oracle TWAP từ Uniswap V3. Pool thanh khoản của cặp token đó chỉ $500k. Một cá voi đã dump 2 triệu token vào pool, làm lệch giá trong 1 block. TWAP 30 phút không kịp phản ứng, nhưng cơ chế tính toán của giao thức lại lấy mẫu không đều. Ai thiết kế oracle đó chắc chưa đọc spec của Uniswap.
Tôi trace tx: block 12345678, attacker gửi 100 ETH vào contract, gọi hàm borrow cụ thể. Dòng token đi từ pool đến oracle, oracle update giá sai, contract cho vay quá mức. Thực ra attacker không cần hack contract, chỉ cần hiểu rõ cấu trúc thanh khoản. Tôi đã thấy pattern này từ Curve hack tháng 7/2023. Cùng một lỗi tư duy: tin tưởng mù quáng vào TWAP mà không kiểm tra depth.
Số đông sẽ đổ lỗi cho smart contract, nhưng smart contract chạy đúng như code. Lỗi nằm ở thiết kế oracle và giả định về thanh khoản. Giao thức này audit bởi 2 firm lớn, audit report dày 200 trang. Họ check reentrancy, arithmetic overflow, nhưng không test oracle dưới điều kiện thanh khoản thấp. Đó là điểm mù. Market makers và LPs phải chịu trách nhiệm một phần vì họ rút thanh khoản khi thị trường giảm.
Đừng bao giờ dùng TWAP làm oracle chính cho pool có thanh khoản mỏng. Nếu muốn sống sót trong bear market, tự build layer bảo vệ riêng. Tôi đã viết bot monitor oracle delta từ năm 2022, phát hiện bất thường trong 2 block. Nếu bạn không tự làm được, ít nhất hãy kiểm tra liệu giao thức bạn đang farm có kiểm tra depth không.