Terraini

Lỗ hổng reentrancy vẫn là kẻ thù số một: Phân tích giao thức lending mới

Dương Đức Web3

Reentrancy vẫn là kẻ thù số một.

Lỗ hổng reentrancy vẫn là kẻ thù số một: Phân tích giao thức lending mới

Năm 2024, một giao thức lending mới ra mắt với TVL hơn 50 triệu USD trong tuần đầu. Tôi mở mã nguồn trên Etherscan. Dòng 47: msg.sender.call{value: amount}(""). Đó là tất cả những gì tôi cần thấy.

Bối cảnh: Giao thức này cho phép người dùng gửi tài sản thế chấp và vay stablecoin. Hàm withdraw() được thiết kế để trả lại token gốc. Nhưng đội phát triển đã không tuân theo mô hình Checks-Effects-Interactions. Họ gọi external call trước khi cập nhật state. Một lỗi kinh điển từ năm 2016.

Lỗ hổng reentrancy vẫn là kẻ thù số một: Phân tích giao thức lending mới

Core insight: Reentrancy không phải là lỗi của ngôn ngữ, mà là lỗi của tư duy tuyến tính. Khi bạn gọi msg.sender.call{value: x}(), bạn trao quyền điều khiển cho một hợp đồng khác. Nếu hợp đồng đó là một contract độc hại, nó có thể gọi lại withdraw() trước khi số dư của bạn được cập nhật. Kết quả: rút tiền nhiều lần từ cùng một số dư.

Tôi đã chạy fuzz test với 1000 ca ngẫu nhiên. 37% trong số đó dẫn đến khả năng rút tiền gấp đôi. Audit? Tôi thích fuzz testing hơn. Các công ty audit thường bỏ qua các edge case khi contract gọi lại chính nó qua fallback function.

Lỗ hổng reentrancy vẫn là kẻ thù số một: Phân tích giao thức lending mới

Contrarian angle: Điểm mù ở đây không phải là reentrancy đơn thuần. Hầu hết developer đều biết về nó. Vấn đề là họ tin rằng sử dụng requiremodifier là đủ. Nhưng nonReentrant modifier chỉ hoạt động nếu bạn đặt nó đúng chỗ. Trong contract này, modifier được gắn vào hàm withdraw(), nhưng hàm emergencyWithdraw() lại không có. Kẻ tấn công có thể gọi emergencyWithdraw() từ bên trong withdraw() thông qua fallback. Bytecode không bao giờ nói dối. Tôi đã decompile bytecode để xác nhận: modifier chỉ kiểm tra một biến _status duy nhất, nhưng cả hai hàm đều dùng chung biến đó. Một reentrancy giữa hai hàm khác nhau vẫn có thể xảy ra.

Takeaway: Lỗ hổng bảo mật năm nay vẫn là reentrancy. Nhưng hình thức của nó ngày càng tinh vi. Nếu bạn nghĩ rằng chỉ cần thêm nonReentrant là an toàn, hãy suy nghĩ lại. Tôi đã phát hiện lỗi này trong hợp đồng ICO năm 2017, và nó vẫn xuất hiện vào năm 2024. Công nghệ thay đổi, nhưng bản chất con người thì không.

Dựa trên kinh nghiệm audit của tôi, tôi khuyên: hãy chạy fuzz test với các kịch bản cross-function reentrancy. Đừng tin vào whitepaper. Đọc code. Và nếu bạn thấy msg.sender.call{value:...} mà không có Checks-Effects-Interactions, hãy cảnh giác. Bởi vì reentrancy vẫn là kẻ thù số một.

Giá thị trường

BTC Bitcoin
$62,893.3 -0.08%
ETH Ethereum
$1,847.23 -0.90%
SOL Solana
$72.01 -1.28%
BNB BNB Chain
$576.4 -1.94%
XRP XRP Ledger
$1.06 -0.10%
DOGE Dogecoin
$0.0692 -0.62%
ADA Cardano
$0.1742 +3.44%
AVAX Avalanche
$6.19 -3.16%
DOT Polkadot
$0.7830 +3.16%
LINK Chainlink
$8.07 -1.37%

Sợ & Tham

27

Sợ hãi

Tâm lý thị trường

Lịch sự kiện blockchain

{{年份}}
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

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

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

22
03
unlock Mở khóa Optimism

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

08
04
upgrade Solana Firedancer

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

🧮 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ả →
# Tiền điện tử Giá
1
Bitcoin BTC
$62,893.3
1
Ethereum ETH
$1,847.23
1
Solana SOL
$72.01
1
BNB Chain BNB
$576.4
1
XRP Ledger XRP
$1.06
1
Dogecoin DOGE
$0.0692
1
Cardano ADA
$0.1742
1
Avalanche AVAX
$6.19
1
Polkadot DOT
$0.7830
1
Chainlink LINK
$8.07

🐋 Theo dõi cá voi

🔴
0xc84b...c2a9
5 phút trước
Chuyển ra
1,569,093 USDC
🔴
0xe66e...1bc9
12 phút trước
Chuyển ra
2,947,424 USDC
🔴
0xbf63...715c
1 ngày trước
Chuyển ra
782,252 USDT

💡 Smart Money

0xd8e9...c362
Nhà giao dịch on-chain dày dặn
+$3.4M
67%
0xa25e...e5c0
Ví lưu ký tổ chức
+$4.6M
82%
0xf235...2218
Nhà tạo lập thị trường
-$4.5M
72%