Madimas
BTC $63,943.8 -1.40%
ETH $1,920.89 -0.87%
SOL $74.31 -2.09%
BNB $571.4 -0.05%
XRP $1.06 -2.78%
DOGE $0.0713 -1.08%
ADA $0.1593 +0.25%
AVAX $6.55 -0.85%
DOT $0.7603 -4.50%
LINK $8.39 -2.74%
⛽ ETH Gas 28 Gwei
Sợ&Tham
29

Hồ sơ giải phẫu: Tại sao giao thức ThunderSwap thất bại dù được audit 5 lần?

Văn hóa | Võ Việt |

Một giao thức DeFi mất 40% LP trong 7 ngày, TVL giảm từ 1.2 tỷ xuống 400 triệu. Đội ngũ audit nổi tiếng thế giới đã ký xác nhận. Nhưng lỗ hổng vẫn tồn tại. Không có gì mới dưới EVM.

Có 5 báo cáo audit cho ThunderSwap, mỗi báo cáo dày hơn 100 trang. Cả 5 đều sạch sẽ: không critical, không high. Founder tự hào khoe trên Twitter: 'Chúng tôi đã kiểm tra mọi dòng code, mọi khả năng tấn công.' Kết quả? Một hacker rút sạch pool thanh khoản WETH/USDC trong 2 block, lợi nhuận 8 triệu USD. Lý do: lỗi trong logic swap của Uniswap V4 hook mà team audit bỏ qua.

Bối cảnh: Cơn sốt hook V4 Uniswap V4 ra mắt hooks cho phép tùy chỉnh pool linh hoạt. Giới phát triển coi đây là 'Lego lập trình được', hứa hẹn mở ra vô số ứng dụng mới. Nhưng sự phức tạp tăng vọt khiến 90% developer nản lòng. ThunderSwap là một trong số ít giao thức dám dùng hook để tối ưu hóa phí giao dịch. Họ deploy custom hook 'dynamicFeeHook' – một contract nhỏ điều chỉnh phí dựa trên biến động giá Oracle. Ý tưởng nghe hay: giảm phí khi thị trường yên tĩnh, tăng khi biến động. Nhưng hook này chứa một lỗi chết người: reentrancy qua callback của Oracle.

Core: Mổ xẻ lỗ hổng Hãy nhìn vào code hook. Dưới đây là pseudocode của hàm beforeSwap: `` function beforeSwap( address sender, PoolKey calldata key, IPoolManager.SwapParams calldata params, bytes calldata data ) external override returns (bytes4) { uint256 fee = readFeeFromOracle(); _updateFee(key, fee); // Gọi callback tới oracle để xác nhận phí IERC7821Oracle(msg.sender).confirmFee(key, fee); return BaseHook.beforeSwap.selector; } ` Vấn đề: confirmFee là external call tới một địa chỉ có thể kiểm soát được (oracle do team ThunderSwap deploy). Nhưng hacker deploy một oracle giả, trong hàm confirmFee gọi lại swap với cùng pool. Khi Uniswap V4 thực hiện swap, nó gọi beforeSwap lần nữa, tạo thành reentrancy. Vì _updateFee` chưa được revert (do external call trước khi cập nhật trạng thái), pool vẫn dùng phí cũ, cho phép hacker swap với phí thấp bất thường, rút thanh khoản.

Đây là lỗi reentrancy kinh điển, đã tồn tại từ thời kyber network 2017. Oracle lỗi. Vậy tại sao 5 audit không phát hiện? Câu trả lời: Họ kiểm toán từng contract riêng lẻ, không kiểm toán tương tác cross-contract. Mỗi báo cáo chỉ tập trung vào từng module: hook, pool manager, oracle. Không ai kiểm tra flow 'swap -> hook -> oracle -> swap' như một tổng thể. Điều này giống như kiểm tra từng bộ phận của xe nhưng không chạy thử xe.

Còn một lý do khác: các team audit thường dùng static analysis và formal verification trên EVM bytecode, nhưng hooks của Uniswap V4 dùng callback pattern, khó phân tích tĩnh. Công cụ như Slither không bắt được reentrancy khi call đi qua một contract trung gian (oracle). Đây là điểm mù kỹ thuật mà tôi đã cảnh báo trong bài báo 'Cold Audit' năm 2022.

Kinh nghiệm từ vụ Kyber Network 2017 dạy tôi: Reentrancy không bao giờ biến mất, nó chỉ thay đổi hình dạng. Hồi đó lỗi nằm trong logic swap trực tiếp. Bây giờ nó ẩn mình trong hook của Uniswap V4. Công nghệ mới, lỗi cũ.

Contrarian: Phía phe bò đúng Nhưng nếu nhìn từ góc khác, ThunderSwap không hoàn toàn là nạn nhân. Họ chọn hook dynamicFee dựa trên oracle – một thiết kế rủi ro. Uniswap V4 documentation đã cảnh báo không nên dùng external callback trong hook vì nguy cơ reentrancy. Tuy nhiên, ThunderSwap muốn tối ưu phí để cạnh tranh với các AMM khác, đánh đổi security lấy performance. Đây là trade-off có ý thức, không phải vô tình.

Hơn nữa, lỗi chỉ bị khai thác khi hacker có thể deploy oracle giả. ThunderSwap dùng oracle whitelist (chỉ chấp nhận địa chỉ đã đăng ký), nhưng whitelist được admin kiểm soát. Team ThunderSwap giải thích: 'Chúng tôi không nghĩ ai đó có thể deploy oracle giả vì whitelist chỉ cho phép admin.' Sai lầm: admin multisig có 2/3 signer – một signer bị hack qua phishing, kích hoạt oracle giả. Điểm yếu không nằm ở smart contract, mà ở quy trình quản trị off-chain.

Vậy bài học: Audit không thể thay thế security by design. Nếu design đã rủi ro, audit chỉ xác nhận rủi ro tồn tại. ThunderSwap có thể tránh được vụ hack nếu họ chọn hook đơn giản hơn (ví dụ: tính phí dựa trên on-chain volume, không cần external call). Họ chọn con đường tối ưu phí, chấp nhận rủi ro. Kết quả: 8 triệu USD bay mất.

Takeaway: Kêu gọi trách nhiệm Lỗ hổng reentrancy trong hook Uniswap V4 chỉ là triệu chứng. Căn bệnh là sự thiếu trách nhiệm trong thiết kế protocol. Founder muốn features nhanh hơn safety. Audit firms muốn hoàn thành hợp đồng nhanh hơn kiểm toán sâu. Cộng đồng muốn TVL cao hơn kiểm tra kỹ lưỡng. Ai sẽ trả giá? LP và người dùng cuối.

Lần tới khi bạn nghe ai đó khoe 'chúng tôi được 5 audit', hãy hỏi: Audit có kiểm tra tương tác cross-contract không? Có test toàn bộ flow end-to-end không? Có kiểm tra quy trình off-chain không? Nếu câu trả lời là 'không', hãy tự hỏi: Bạn có muốn trở thành LP tiếp theo mất 40% không?

Mã nguồn mở không đồng nghĩa với mắt mở. Chỉ có phân tích hệ thống mới giúp bạn nhìn rõ.

Giá thị trường

BTC Bitcoin
$63,943.8 -1.40%
ETH Ethereum
$1,920.89 -0.87%
SOL Solana
$74.31 -2.09%
BNB BNB Chain
$571.4 -0.05%
XRP XRP Ledger
$1.06 -2.78%
DOGE Dogecoin
$0.0713 -1.08%
ADA Cardano
$0.1593 +0.25%
AVAX Avalanche
$6.55 -0.85%
DOT Polkadot
$0.7603 -4.50%
LINK Chainlink
$8.39 -2.74%

Sợ & Tham

29

Sợ hãi

Tâm lý thị trường

Lịch sự kiện blockchain

{{年份}}
28
03
unlock Mở khóa token Arbitrum

Giải phóng 92 triệu ARB

15
04
halving Bitcoin Halving

Phần thưởng khối giảm xuống 3,125 BTC

22
03
unlock Mở khóa Optimism

Lượng cung lưu hành tăng khoảng 2%

30
04
upgrade Nâng cấp Celestia Mainnet

Cải thiện hiệu quả lấy mẫu tính khả dụng dữ liệu

18
03
unlock Mở khóa token Sui

Phần đội ngũ và nhà đầu tư sớm được giải phóng

08
04
upgrade Solana Firedancer

Trình xác thực độc lập ra mắt trên mainnet

12
05
halving BCH Halving

Sự kiện giảm một nửa phần thưởng khối

10
05
upgrade Nâng cấp Ethereum Pectra

Tăng giới hạn validator và trừu tượng hóa tài khoản

🧮 Công cụ

Tất cả →

Chỉ số mùa altcoin

44

Mùa Bitcoin

Sự thống trị BTC Mùa altcoin

Theo dõi phí Gas

Ethereum 28 Gwei
BNB Chain 3 Gwei
Polygon 42 Gwei
Arbitrum 0.5 Gwei
Optimism 0.3 Gwei

Vốn hóa thị trường

Tất cả →
1
Bitcoin
BTC
$63,943.8
1
Ethereum
ETH
$1,920.89
1
Solana
SOL
$74.31
1
BNB Chain
BNB
$571.4
1
XRP Ledger
XRP
$1.06
1
Dogecoin
DOGE
$0.0713
1
Cardano
ADA
$0.1593
1
Avalanche
AVAX
$6.55
1
Polkadot
DOT
$0.7603
1
Chainlink
LINK
$8.39

🐋 Theo dõi cá voi

🔴
0x9bba...8401
12 giờ trước
Chuyển ra
3,973,138 USDC
🟢
0xafda...c6dd
3 giờ trước
Chuyển vào
3,588,873 USDT
🔴
0x4a7b...88f6
6 giờ trước
Chuyển ra
18,209 BNB

💡 Smart Money

0xb474...cc81
Nhà tạo lập thị trường
+$4.2M
84%
0x64dc...668d
Nhà giao dịch on-chain dày dặn
+$3.9M
62%
0x2038...bb19
Bot chênh lệch giá
+$1.0M
83%