Ngày 15 tháng 3 năm 2025, một giao thức cross-chain mới vừa mất 10 triệu USD vì lỗi oracle. Phân tích mã? Tôi chỉ mất 3 phút để thấy vấn đề: không phải smart contract bị tấn công, mà là cơ chế xác thực tin nhắn bị phá vỡ ở lớp ứng dụng. Nhưng trước khi đi vào chi tiết, hãy hiểu bối cảnh.
Context: LayerZero và cơn sốt cross-chain
LayerZero là giao thức truyền thông xuyên chuỗi, cho phép các dApp gửi tin nhắn giữa các blockchain mà không cần trung gian. Nó hoạt động dựa trên hai thực thể chính: Oracle (báo cáo trạng thái chuỗi gửi) và Relayer (chuyển tiếp dữ liệu giao dịch). Để một tin nhắn được xác thực, cả Oracle và Relayer phải đồng thuận. Điều này tạo ra niềm tin rằng không ai có thể giả mạo tin nhắn trừ khi cả hai bên thông đồng. Nhưng thực tế tinh vi hơn nhiều.
Trong sự cố hôm qua, một dApp lending trên Arbitrum sử dụng LayerZero để nhận giá token từ chuỗi chính Ethereum. Oracle báo giá tăng 20%, Relayer xác nhận giao dịch. Hợp đồng lending bắt đầu cho vay với tỷ lệ tài sản đảm bảo mới. Kẻ tấn công đã khai thác điểm yếu không nằm ở code của LayerZero, mà ở cách dApp triển khai logic oracle của chính nó.
Core: Phân tích cấp code và trade-offs
Dưới đây là đoạn code giả lập từ hợp đồng lending (đã được giản lược):