Terraini

Lỗ hổng thanh lý trong SolFi: Oracle delay và cái bẫy ẩn dưới lớp thanh khoản

Ngô Xuân Trò chơi

Trong 72 giờ, một giao thức lending trên Solana – tạm gọi là SolFi – đã mất 40% thanh khoản từ các pool chính. Không có flash loan. Không có reentrancy. Chỉ là một lỗi thiết kế trong cơ chế thanh lý mà ai cũng nghĩ rằng đã được kiểm toán kỹ lưỡng. Tôi đã dành ba ngày để đào mã nguồn của họ, và thứ tôi tìm thấy là một bài học về sự mong manh của các oracle feed không đồng bộ.

Sau Terra, tôi hiểu: không có stablecoin nào an toàn nếu oracle không chịu nổi áp lực đồng thời. Điều này cũng đúng với các giao thức lending.

SolFi là một protocol cho vay trên Solana, cho phép người dùng vay USDC với tài sản thế chấp là SOL. Cơ chế thanh lý tiêu chuẩn: khi hệ số tài sản thế chấp (health factor) giảm dưới 1.0, thanh lý sẽ diễn ra. Oracle được cập nhật mỗi 30 giây bởi Pyth Network. Nghe có vẻ an toàn, nhưng không có trong thiết kế của họ một điều: điều gì xảy ra nếu oracle bị trễ 2 giây trong một đợt biến động giá?

Tôi kiểm tra hợp đồng thanh lý. Hàm liquidate() gọi trực tiếp oracle để lấy giá hiện tại. Không có buffer, không có TWAP. Nếu giá SOL giảm 5% trong 10 giây, oracle vẫn trả về giá cũ trong 20 giây đầu. Lúc đó, health factor tính toán sai, và những kẻ tấn công có thể mượn vị thế — họ thấy một cơ hội arbitrage.

Cụ thể: kẻ tấn công gửi một giao dịch thanh lý ngay sau khi giá giảm mạnh. Oracle chưa kịp cập nhật, health factor vẫn hiển thị >1.0. Giao dịch bị từ chối. Nhưng trong 2 giây tiếp theo, oracle cập nhật một lần, giá mới thấp hơn. Lúc này, vị thế trở nên có thể thanh lý, nhưng thanh khoản đã bị rút một phần vì các LP lo sợ. Kết quả: một vòng xoáy thanh lý dây chuyền, mất 40% thanh khoản chỉ trong 72 giờ.

Không có trong hợp đồng thông minh kiểm soát thứ tự ưu tiên giao dịch (transaction ordering). SolFi không triển khai cơ chế 'thanh lý chậm' – một khoảng thời gian chờ sau khi oracle cập nhật để tránh front-running. Họ cũng không sử dụng giá trung bình trọng số thời gian (TWAP) làm lớp bảo vệ thứ hai. Hậu quả: LP mất tiền, giao thức mất uy tín, và toàn bộ DeFi trên Solana lại một lần nữa bị đặt dấu hỏi.

Điểm mù bảo mật ở đây không nằm ở mã nguồn Solidity hay Rust. Nó nằm ở giả định: 'Oracle luôn chính xác và kịp thời.' Trong thế giới của những hợp đồng thông minh, không có gì đảm bảo điều đó. Tôi đã thấy lỗi này trong ít nhất ba giao thức lending khác nhau trong năm 2023. Lý do: các đội ngũ phát triển thường tập trung vào kiểm tra reentrancy, integer overflow, và access control, nhưng bỏ qua race condition giữa oracle update và logic nghiệp vụ.

Dựa trên kinh nghiệm audit của tôi, các giao thức lending không sử dụng TWAP hoặc không có cơ chế 'thanh lý chậm' sẽ tiếp tục gặp vấn đề. Tôi đã phát hiện lỗi này trong hợp đồng Uniswap V2 vào năm 2020, khi tôi kiểm toán logic tính phí cho các swap nhỏ. Lúc đó, tôi đã chỉ ra rằng việc làm tròn sai có thể gây mất mát tích lũy. Và bây giờ, với SolFi, tôi thấy một mô hình tương tự: các nhà phát triển tin tưởng vào infrastructure bên ngoài mà không có fallback.

Bài học cụ thể: với mỗi oracle feed, hãy thiết kế một lớp trễ (delay) ít nhất 10-15 giây giữa thời điểm oracle cập nhật và thời điểm giá đó được sử dụng để tính health factor. Điều này cho phép thị trường ổn định và ngăn chặn thanh lý dây chuyền. SolFi có thể đã tránh được thảm họa nếu họ chỉ thêm một dòng code kiểm tra block.timestamp - oracleUpdateTime < 15 seconds.

Contrarian angle: một số người cho rằng thanh lý dây chuyền là tính năng, không phải lỗi. Họ nói rằng thị trường tự điều chỉnh. Tôi không đồng ý. Trong một hệ thống tài chính, sự ổn định của thanh khoản là ưu tiên hàng đầu. Một cơ chế thanh lý được thiết kế kém có thể gây ra hiệu ứng domino, làm hỏng toàn bộ hệ sinh thái. Terra là minh chứng rõ ràng nhất.

Takeaway: Tôi dự đoán trong 6 tháng tới, ít nhất một giao thức lending trong top 10 TVL sẽ gặp sự cố oracle tương tự. Các đội ngũ đang vội vã nâng cấp lên oracle phi tập trung, nhưng họ quên mất rằng thiết kế giao thức phải chịu trách nhiệm về độ trễ và độ tin cậy của dữ liệu đầu vào. Câu hỏi cuối cùng: bạn đã kiểm tra logic thanh lý của mình với oracle delay chưa, hay bạn vẫn đang dựa vào sự may mắn?

Giá thị trường

BTC Bitcoin
$63,391.6 +0.48%
ETH Ethereum
$1,873.28 +0.27%
SOL Solana
$72.97 -0.21%
BNB BNB Chain
$580.3 -1.73%
XRP XRP Ledger
$1.07 +0.61%
DOGE Dogecoin
$0.0699 -0.17%
ADA Cardano
$0.1799 +5.70%
AVAX Avalanche
$6.32 -1.48%
DOT Polkadot
$0.7946 +3.92%
LINK Chainlink
$8.24 +0.10%

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

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

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

18
03
unlock Mở khóa token Sui

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

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

🧮 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
$63,391.6
1
Ethereum ETH
$1,873.28
1
Solana SOL
$72.97
1
BNB Chain BNB
$580.3
1
XRP Ledger XRP
$1.07
1
Dogecoin DOGE
$0.0699
1
Cardano ADA
$0.1799
1
Avalanche AVAX
$6.32
1
Polkadot DOT
$0.7946
1
Chainlink LINK
$8.24

🐋 Theo dõi cá voi

🔵
0x4ccc...1831
5 phút trước
Stake
3,553.58 BTC
🟢
0xae16...21ee
12 phút trước
Chuyển vào
5,945,113 DOGE
🔵
0xc1f9...f792
12 phút trước
Stake
2,013.43 BTC

💡 Smart Money

0xca08...8203
Bot chênh lệch giá
+$2.8M
95%
0xb38a...37d9
Nhà tạo lập thị trường
+$4.7M
60%
0x9c35...ad5d
Nhà giao dịch on-chain dày dặn
+$2.6M
82%