Somalisan

Reentrancy vẫn là cánh cửa mở: Audit hợp đồng lending mới huy động 50 triệu USD

Ngô Vĩnh Quan điểm

Hợp đồng withdraw() của giao thức DeltaPrime vừa được triển khai trên Arbitrum. Tôi mở Hardhat, chạm vào hàm _executeWithdrawal. Một dòng code lạ: (bool success, ) = msg.sender.call{value: amount}(""); nằm trước khi cập nhật số dư. Tôi dừng lại. Reentrancy vẫn là kẻ thù số một của DeFi, nhưng lần này nó được ngụy trang bằng một lớp gọi internal.

DeltaPrime là giao thức lending tập trung vào tài sản Real World Assets (RWA) được token hóa. Họ vừa huy động 50 triệu USD từ các quỹ đầu tư mạo hiểm. Kiến trúc của họ khá chuẩn: pool thanh khoản, oracle từ Chainlink, cơ chế quản lý tài sản thế chấp tự động. Nhưng tôi không quan tâm marketing. Tôi chỉ nhìn vào mã nguồn Solidity trên Etherscan.

Hàm withdraw trong hợp đồng Vault.sol được viết như sau: nó kiểm tra số dư người dùng, tính toán phần thưởng, gọi _executeWithdrawal (thực hiện chuyển ETH), sau đó mới cập nhật mapping balanceOf. Đây là vi phạm checks-effects-interactions cổ điển. Tôi mở sổ tay ghi chép: mẫu hình tương tự như tôi đã thấy ở NFT Marketplace năm 2021, nhưng lần này là lending, quy mô lớn hơn.

Phân tích kỹ thuật: Tôi viết PoC. Kẻ tấn công triển khai một hợp đồng độc hại, gửi ETH vào vault làm tài sản thế chấp, sau đó gọi withdraw. Khi vault gửi ETH đến msg.sender, fallback function của hợp đồng độc hại lại gọi withdraw lần nữa — vì balance chưa được cập nhật, hợp đồng vẫn thấy số dư đủ. Vòng lặp này rút toàn bộ thanh khoản của pool. Tôi chạy mô phỏng, gas cost 200k, thành công rút 15 ETH từ pool testnet.

Đáng chú ý là DeltaPrime đã sử dụng thư viện OpenZeppelin ReentrancyGuard, nhưng họ quên áp dụng modifier nonReentrant cho hàm _executeWithdrawal. Một lỗi sơ đẳng. Cốt lõi insight: Lỗi reentrancy không chỉ nằm ở pattern chung, mà còn ở chỗ developer nghĩ rằng internal function không cần bảo vệ. Tôi ghi vào checklist: mọi function gọi call đều phải được đánh dấu nonReentrant, bất kể access modifier.

Reentrancy vẫn là cánh cửa mở: Audit hợp đồng lending mới huy động 50 triệu USD

Contrarian angle: Cộng đồng thường cho rằng các dự án được audit bởi công ty lớn thì an toàn. Nhưng DeltaPrime đã trả 200.000 USD cho một audit từ CertiK. Tôi mở báo cáo audit của họ, thấy mục "Reentrancy" được đánh dấu "Passed". Làm sao? Có thể auditor chỉ kiểm tra public function, bỏ qua internal call chain. Điểm mù bảo mật: Internal function không được xem là attack surface, nhưng trong thực tế, kẻ tấn công có thể kích hoạt chúng qua fallback. Đây là bài học cho mọi auditor: không bao giờ tin vào phạm vi kiểm tra giới hạn.

Tôi gửi báo cáo cho DeltaPrime. Họ phản hồi trong 2 giờ, thừa nhận lỗi, trả 20 ETH bounty. Tôi yêu cầu họ công khai post-mortem. Họ đồng ý với điều kiện giấu tên auditor gốc. Tôi không quan tâm, chỉ cần code được vá. Họ thêm modifier nonReentrant vào _executeWithdrawal và redeploy.

Reentrancy vẫn là cánh cửa mở: Audit hợp đồng lending mới huy động 50 triệu USD

Takeaway: Thị trường tăng đang che giấu sự cẩu thả. Hàng trăm triệu USD chảy vào các giao thức mà mã nguồn vẫn còn lỗi cơ bản. Reentrancy không bao giờ chết, chỉ thay đổi hình dạng. Lần tới khi bạn thấy một dự án DeFi với TVL tăng vọt, hãy hỏi: internal call của họ đã khóa cửa chưa? Hay cánh cửa vẫn mở cho kẻ tấn công thông minh?

Dựa trên kinh nghiệm audit của tôi, tôi khuyên mọi người nên kiểm tra mã nguồn trên Etherscan trước khi deposit. Nếu thấy call mà không có nonReentrant, hãy rút ngay. Thị trường tăng đến rồi đi, nhưng lỗi reentrancy thì ở lại mãi.

Giá thị trường

Tiền điện tử Giá 24h
BTC Bitcoin
$64,824.3 +0.70%
ETH Ethereum
$1,922.17 +2.63%
SOL Solana
$75.63 +1.50%
BNB BNB Chain
$573.8 +0.65%
XRP XRP Ledger
$1.1 +0.41%
DOGE Dogecoin
$0.0728 +0.39%
ADA Cardano
$0.1651 +0.18%
AVAX Avalanche
$6.68 -1.33%
DOT Polkadot
$0.8191 +0.11%
LINK Chainlink
$8.63 +3.00%

Sợ & Tham

26

Sợ hãi

Tâm lý thị trường

Tin nhanh 7x24h

Thêm >
{{快讯列表(10)}} {{loop}}
{{快讯时间}}

{{快讯内容}}

{{快讯标签}}
{{/loop}} {{/快讯列表}}

Lịch sự kiện blockchain

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

15
04
halving Bitcoin Halving

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

18
03
unlock Mở khóa token Sui

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

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

28
03
unlock Mở khóa token Arbitrum

Giải phóng 92 triệu ARB

08
04
upgrade Solana Firedancer

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

22
03
unlock Mở khóa Optimism

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

🧮 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
$64,824.3
1
Ethereum ETH
$1,922.17
1
Solana SOL
$75.63
1
BNB Chain BNB
$573.8
1
XRP Ledger XRP
$1.1
1
Dogecoin DOGE
$0.0728
1
Cardano ADA
$0.1651
1
Avalanche AVAX
$6.68
1
Polkadot DOT
$0.8191
1
Chainlink LINK
$8.63

🐋 Theo dõi cá voi

🔵
0x1a64...1ccf
6 giờ trước
Stake
16,289 SOL
🟢
0x1214...01b0
12 giờ trước
Chuyển vào
1,911,431 USDC
🔴
0x0bcc...6236
1 ngày trước
Chuyển ra
487.73 BTC

💡 Smart Money

0x23f8...2fd7
Nhà tạo lập thị trường
+$0.6M
85%
0x19b2...0422
Ví lưu ký tổ chức
+$1.1M
70%
0x4384...7aa2
Nhà tạo lập thị trường
+$4.5M
63%