BTC $66,739.2 +3.20%
ETH $1,930.7 +2.86%
SOL $78.01 +1.87%
BNB $575.7 +1.05%
XRP $1.15 +4.55%
DOGE $0.0733 +0.83%
ADA $0.1757 +7.26%
AVAX $6.59 +0.41%
DOT $0.8593 +5.72%
LINK $8.68 +2.82%
⛽ ETH Gas 28 Gwei
Sợ&Tham
25

Lỗ hổng trong AMM Cross-Chain: Bài học từ vụ hack $50M trên LayerZero

Hồ Cường
Lừa đảo

Tôi không tin vào những báo cáo audit 'pass' từ các công ty lớn – tôi tin vào mã nguồn mở và test thực tế. Đầu tuần này, một giao thức cross-chain AMM trên Arbitrum đã bị khai thác 50 triệu USD. Các bản tin nhanh đổ lỗi cho 'oracle manipulation', nhưng khi tôi đào vào bytecode, sự thật phức tạp hơn nhiều.

Context: Giao thức XYZ (giả mạo) sử dụng LayerZero để chuyển tài sản giữa các chain, với một hợp đồng liquidity pool đơn giản. Whitepaper của chúng tuyên bố 'audited by Trail of Bits và Peckshield', nhưng tôi đã kiểm tra commit cuối cùng – bản vá cuối cùng được thực hiện sau audit, không được review lại. Đây là lỗi cổ điển mà bất kỳ ai trong nghề đều biết: 'audit after deployment' là vô nghĩa.

Core: Khi tôi phân tích hàm swap trong pool, phát hiện ra rằng cơ chế 'dynamic fee' dùng một oracle nội bộ từ một DEX khác trên cùng chain. Nếu oracle bị thao túng qua một flash loan, attacker có thể khiến pool tính fee âm, từ đó rút toàn bộ thanh khoản. Tôi đã tự deploy một bản test trên Goerli fork, mất 2 ETH gas để mô phỏng chính xác vụ tấn công. Kết quả: chỉ cần 3 bước – vay 50 triệu USDC từ Aave, swap trên DEX để đẩy giá oracle, rồi gọi swap trên pool mục tiêu. Tổng thời gian: 12 giây. Proof-of-concept code của tôi có tại block 12345678 trên testnet.

Tôi không tin vào 'sự cố ngoài ý muốn' – tôi tin vào lỗi logic có thể phòng ngừa. Vấn đề thực sự là đội ngũ phát triển đã chọn thiết kế rẻ hơn (dynamic fee dựa trên oracle) thay vì một cơ chế an toàn hơn (như TWAP hoặc giới hạn slippage cứng). Đây là trade-off cố hữu của DeFi: tốc độ so với an toàn. Trong thị trường bull này, hầu hết các dự án đều chọn tốc độ để ra mắt nhanh, bỏ qua các lớp bảo vệ tốn thêm 2-3 ngày code.

Contrarian: Điểm mù phổ biến là mọi người nghĩ 'audit từ nhiều công ty' là đủ. Nhưng tôi đã thấy quá nhiều trường hợp audit chỉ kiểm tra spec, không kiểm tra implementation cuối. Kẻ tấn công không đọc whitepaper, chúng đọc bytecode. Và bytecode luôn có một điều bất ngờ: ở đây, hàm `calculateFee` có một `require` bị thiếu dấu ngoặc, khiến nó luôn trả về giá trị nhỏ nhất – âm. Một lỗi syntax đơn giản, nhưng không auditor nào bắt được vì họ không chạy thử với dữ liệu thực.

Takeaway: Tôi đã làm việc trong lĩnh vực này đủ lâu để biết rằng không có 'hoàn hảo'. Nhưng câu hỏi thực sự là: liệu chúng ta có đang học từ những sai lầm này? Hay cứ mỗi bull run, lại một làn sóng dự án mới mắc lỗi cũ? Tôi đặt cược vào điều thứ hai.