Lỗ hổng reentrancy trong hợp đồng staking mới: 200 ETH đã mất, bài học cho dev

Văn hóa | Trương Tuấn |

Tối qua, một giao thức staking mới trên Arbitrum vừa bị khai thác. Kẻ tấn công rút được 200 ETH chỉ trong 3 block. Tôi đọc mã nguồn của chúng trong 10 phút, thấy ngay lỗi. withdraw() không tuân thủ checks-effects-interactions.

Họ dùng OpenZeppelin ReentrancyGuard? Không. Họ tự viết lại modifier. Và họ quên đặt nonReentrant cho hàm claimRewards. Kết quả: kẻ tấn công gọi deposit(), sau đó trong callback của transfer, gọi lại claimRewards trước khi số dư được cập nhật.

Tôi từng audit dự án "AfriCoin" năm 2017. Lỗi y hệt. Chỉ khác là lúc đó tôi phát hiện sớm, cứu được 200 ETH. Lần này, dev không test kỹ.

Lỗ hổng reentrancy trong hợp đồng staking mới: 200 ETH đã mất, bài học cho dev

Hợp đồng staking này có 3 pool chính, mỗi pool cho phép người dùng stake token ERC-20 để nhận phần thưởng. Hàm withdraw(uint256 amount) thực hiện: chuyển token staking về ví, giảm stakedBalance[msg.sender], sau đó gọi _claimRewards() để chốt phần thưởng. Vấn đề: _claimRewards() gọi msg.sender.transfer(rewardAmount), và transfer này kích hoạt fallback function của contract attacker. Trong fallback, attacker gọi lại withdraw() lần nữa. Vì stakedBalance chưa giảm, lần rút thứ hai vẫn hợp lệ. Lặp lại cho đến khi hết pool.

Lỗ hổng reentrancy trong hợp đồng staking mới: 200 ETH đã mất, bài học cho dev

Điều đáng nói: hợp đồng này đã được audit bởi một công ty có tiếng. Báo cáo audit công bố trên Medium. Họ kết luận "không có lỗi reentrancy" vì cho rằng hàm withdraw có kiểm tra balanceOf từ pool. Nhưng họ bỏ qua callback. Đây là điểm mù kinh điển: audit chỉ dựa trên logic tuần tự, không mô phỏng tấn công bằng reentrancy contract.

Lỗ hổng reentrancy trong hợp đồng staking mới: 200 ETH đã mất, bài học cho dev

Tôi đã thử nghiệm lại với môi trường Hardhat fork chính xác trạng thái trước khi tấn công. Chỉ cần 20 dòng Solidity để khai thác. Kẻ tấn công thực tế đã dùng bot để tự động gọi, kịp thời chớp lấy cơ hội trước khi team kịp pause contract. Tổn thất 200 ETH, tương đương 400.000 USD tại thời điểm viết bài.

Bài học: Đừng bao giờ tin vào audit một chiều. Hãy tự chạy fuzz test và kiểm tra reentrancy bằng công cụ như Slither, MythX, hoặc ít nhất là Hardhat console. Tôi từng xây bot yield farming cho Uniswap v2, biết rõ tầm quan trọng của deadline và nonReentrant. Một dòng modifier có thể cứu cả pool.

Dự báo: Vụ này sẽ làm dấy lên làn sóng audit lại các hợp đồng staking tương tự. Các giao thức fork từ codebase này sẽ bị ảnh hưởng. Hãy kiểm tra ngay contract của bạn trước khi quá muộn.

Giá thị trường

BTC Bitcoin
$63,099.9 +0.62%
ETH Ethereum
$1,871.2 +0.92%
SOL Solana
$73.03 +0.07%
BNB BNB Chain
$580.2 -1.07%
XRP XRP Ledger
$1.06 +0.17%
DOGE Dogecoin
$0.0702 +1.95%
ADA Cardano
$0.1751 +4.60%
AVAX Avalanche
$6.37 -0.02%
DOT Polkadot
$0.7710 +2.70%
LINK Chainlink
$8.11 +0.75%

Sợ & Tham

27

Sợ hãi

Tâm lý thị trường

Lịch sự kiện blockchain

{{年份}}
08
04
upgrade Solana Firedancer

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

18
03
unlock Mở khóa token Sui

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

22
03
unlock Mở khóa Optimism

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

15
04
halving Bitcoin Halving

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

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

12
05
halving BCH Halving

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

28
03
unlock Mở khóa token Arbitrum

Giải phóng 92 triệu ARB

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

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,099.9
1
Ethereum
ETH
$1,871.2
1
Solana
SOL
$73.03
1
BNB Chain
BNB
$580.2
1
XRP Ledger
XRP
$1.06
1
Dogecoin
DOGE
$0.0702
1
Cardano
ADA
$0.1751
1
Avalanche
AVAX
$6.37
1
Polkadot
DOT
$0.7710
1
Chainlink
LINK
$8.11

🐋 Theo dõi cá voi

🔵
0x1195...f4f9
2 phút trước
Stake
572,082 USDT
🔴
0x358e...341d
1 ngày trước
Chuyển ra
2,704,177 DOGE
🟢
0xf985...e68b
1 giờ trước
Chuyển vào
3,701,164 DOGE

💡 Smart Money

0x785b...5df3
Thợ đào DeFi hàng đầu
+$4.8M
84%
0xcad8...aa28
Thợ đào DeFi hàng đầu
+$2.4M
74%
0xca66...f50f
Bot chênh lệch giá
+$2.1M
65%

🧮 Công cụ

Tất cả →