Hook
USD/JPY giảm xuống 162.69 vào sáng nay. Trên Etherscan, một giao thức lending Nhật Bản có tên YamaLend ghi nhận 12 lệnh thanh lý chỉ trong 3 block. Điều này không phải ngẫu nhiên.
Context
YamaLend là một AMM cho phép người dùng gửi stablecoin JPY (JPYC) và vay USDC. Oracle giá của nó lấy từ một API tập trung duy nhất – CoinGecko, với mức trượt giá 2% được hardcode. Khi USD/JPY biến động hơn 0.3% trong vài phút, oracle không kịp cập nhật, tạo ra chênh lệch giá giữa on-chain và off-chain. Kẻ tấn công đã khai thác điều này: vay USDC với tài sản thế chấp là JPYC đang bị định giá cao hơn thực tế, sau đó rút thanh khoản ngay lập tức.
Core
Tôi đã đọc contract của YamaLend. Hàm updatePrice() được gọi mỗi 30 phút, không có cơ chế push từ oracle. Khi giá thay đổi trong khoảng thời gian đó, người dùng có thể thực hiện giao dịch dựa trên giá cũ. Đây là lỗi thiết kế cổ điển. Dưới đây là snippet: