BTC $63,099.9 +0.62%
ETH $1,871.2 +0.92%
SOL $73.03 +0.07%
BNB $580.2 -1.07%
XRP $1.06 +0.17%
DOGE $0.0702 +1.95%
ADA $0.1751 +4.60%
AVAX $6.37 -0.02%
DOT $0.7710 +2.70%
LINK $8.11 +0.75%
⛽ ETH Gas 28 Gwei
Sợ&Tham
27
On-chain

Lỗ hổng reentrancy ẩn trong giao thức lending mới: Bài học từ audit thực tế của một DeFi Security Auditor

Vũ Tuệ

Hôm qua, tôi nhận được một cuộc gọi khẩn từ team dự án X – một giao thức lending cross-chain vừa huy động 15 triệu USD trong vòng Series A. Họ bảo: ‘Hợp đồng của chúng tôi đã được hai công ty audit lớn ký duyệt, nhưng token vẫn đang giảm 40% vì một lỗ hổng chưa ai tìm ra.’ Tôi mở mã nguồn ra, và trong vòng 30 phút, tôi thấy thứ khiến tôi lạnh sống lưng: một lỗ hổng reentrancy tinh vi nằm trong hàm flashRepay, được ngụy trang bằng modifier nonReentrant nhưng thực chất không bảo vệ được cuộc gọi callback đến token ERC-777. Lỗ hổng này có thể cho phép kẻ tấn công rút toàn bộ thanh khoản của pool lending chỉ trong một giao dịch. Đây không phải là lỗi do code kém – đó là lỗi do thiết kế tin tưởng sai chỗ.

Hãy hiểu cơ chế của giao thức X. Nó cho phép người dùng vay tài sản bằng cách thế chấp LP token từ AMM, và trả nợ nhanh (flash loan) trong cùng một block. Điểm đặc biệt: khi trả nợ, hợp đồng gọi một hàm flashRepay để kiểm tra số dư token đã được chuyển về chưa. Nếu token hỗ trợ callback (ERC-777), kẻ tấn công có thể gọi lại hàm borrow từ trong callback, tận dụng trạng thái trung gian khi số dư nợ chưa được cập nhật. Modifier nonReentrant chỉ bảo vệ hàm flashRepay khỏi bị gọi lại, nhưng không bảo vệ các hàm khác như borrow hay withdraw. Đây là một lỗi thiết kế cổ điển – reentrancy cross-function – mà nhiều team audit bỏ qua vì chỉ kiểm tra từng hàm riêng lẻ.

Tôi đã thấy pattern này từ năm 2017, khi tôi audit hợp đồng ICO của Status và phát hiện lỗ hỏng reentrancy trong hàm withdraw. Lúc đó, tôi mới 24 tuổi, vừa ra trường, và tôi đã viết proof-of-concept bằng một contract tấn công chỉ dài 30 dòng Solidity. Kết quả: team dự án vá lỗi ngay trước ICO, cứu 12,000 ETH. Nhưng điều làm tôi sợ nhất không phải lỗi kỹ thuật, mà là cách các team audit hiện tại vẫn mắc sai lầm tương tự. Họ kiểm tra từng hàm như một hòn đảo, quên mất rằng lỗ hổng không hề nằm ở logic, mà nằm ở lòng tin – trust rằng modifier nonReentrant sẽ bảo vệ mọi thứ, trust rằng token ERC-20 không bao giờ có callback (nhưng ERC-777 không phải ERC-20).

Lỗ hổng reentrancy ẩn trong giao thức lending mới: Bài học từ audit thực tế của một DeFi Security Auditor

Bây giờ, hãy nói về góc nhìn phản trực giác: nhiều người nghĩ rằng audit bảo mật là tìm lỗi trong code. Sai. Audit thực sự là tìm lỗi trong mô hình tin tưởng (trust model). Giao thức X tin rằng nếu họ dùng modifier nonReentrant trên hàm flashRepay, thì toàn bộ hệ thống an toàn. Nhưng trong thiết kế của họ, borrowflashRepay chia sẻ cùng một trạng thái (state variable debt[user]). Kẻ tấn công gọi flashRepay, trước khi cập nhật debt, hợp đồng chuyển token qua callback ERC-777, callback đó gọi borrow – mà borrow không bị nonReentrant bảo vệ. Kết quả: borrow kiểm tra số dư tài sản thế chấp vẫn còn đủ (vì chưa bị trừ), và cho vay thêm tiền. Lỗi này không phải do reentrancy trong cùng hàm, mà do reentrancy cross-contract – một thứ mà nhiều auditor non-blockchain không hiểu.

Quan điểm của tôi: hầu hết các dự án DeFi hiện tại đều đang sống trong ảo tưởng về bảo mật. Họ tuyển dụng auditor từ các công ty lớn, nhưng auditor chỉ kiểm tra code template, không hiểu sâu về token tương tác. Chainlink giải quyết phi tập trung bằng các node tập trung? Đó là một nghịch lý. DeFi cần một tiêu chuẩn audit mới: kiểm tra toàn bộ đồ thị gọi hàm (call graph) thay vì từng hợp đồng riêng lẻ. Nếu không, tôi dự đoán trong vòng 6 tháng tới, sẽ có ít nhất một giao thức lending top-10 bị hack theo cách này, với thiệt hại trên 50 triệu USD.

Kết luận? Đừng tin vào audit report dày 50 trang. Hãy hỏi auditor của bạn: ‘Anh có kiểm tra reentrancy cross-function không? Anh có test với token ERC-777 không?’ Nếu họ trả lời ‘có’ mà không đưa được proof, hãy tìm người khác. Bởi vì trong thế giới blockchain, code is law, nhưng chỉ khi luật đó được viết bởi người hiểu được mọi loophole.

Lỗ hổng reentrancy ẩn trong giao thức lending mới: Bài học từ audit thực tế của một DeFi Security Auditor

Giá thị trường

Tiền điện tử Giá 24h
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

{{年份}}
18
03
unlock Mở khóa token Sui

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

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

15
04
halving Bitcoin Halving

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

08
04
upgrade Solana Firedancer

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

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

22
03
unlock Mở khóa Optimism

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

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
$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

🔴
0xd5a1...b361
12 giờ trước
Chuyển ra
15,868 BNB
🔵
0x81a9...8219
1 ngày trước
Stake
22,730 SOL
🟢
0xa5ff...7b39
5 phút trước
Chuyển vào
46,915 SOL

💡 Smart Money

0x249a...32ef
Nhà đầu tư sớm
+$1.0M
73%
0x1d04...cdd9
Thợ đào DeFi hàng đầu
+$3.4M
74%
0x5872...04c4
Nhà tạo lập thị trường
+$4.5M
77%

Công cụ

Tất cả →