BTC $62,761.3 -0.33%
ETH $1,839.93 -1.24%
SOL $71.7 -1.83%
BNB $575.9 -1.97%
XRP $1.06 -0.47%
DOGE $0.0690 -1.02%
ADA $0.1738 +2.72%
AVAX $6.17 -3.77%
DOT $0.7759 +1.73%
LINK $8.04 -1.26%
⛽ ETH Gas 28 Gwei
Sợ&Tham
27

Phân tích kỹ thuật: Lỗ hổng Oracle trong Uniswap V3 đã bị khai thác như thế nào?

Trò chơi | Hoàng Đức |

Trong 7 ngày qua, một bot MEV đã rút 2000 ETH từ các pool thanh khoản thấp trên Uniswap V3. Nhưng câu chuyện không chỉ dừng lại ở đó. Khi tôi đào sâu vào transaction hash 0xabcd…, tôi thấy một pattern không bình thường trong việc tính toán TWAP. Các block timestamp bị chênh lệch đột ngột – điều này không thể xảy ra nếu oracle hoạt động đúng.

Để hiểu, bạn cần biết Uniswap V3 Oracle hoạt động ra sao. Nó lưu trữ một mảng tích lũy (accumulator) của (timestamp * tick, secondsPerLiquidity) mỗi lần có swap. Khi ai đó gọi observe(), contract sẽ tính giá trung bình (TWAP) dựa trên sự chênh lệch của các accumulator trong một khoảng thời gian. Ý tưởng rất thông minh, nhưng có một lỗ hổng trong cách xử lý overflow.

code function observe(uint32[] calldata secondsAgos) external view override returns (int56[] memory tickCumulatives, uint128[] memory secondsPerLiquidityCumulativeX128s) { // ... for (uint256 i = 0; i < secondsAgos.length; i++) { (tickCumulatives[i], secondsPerLiquidityCumulativeX128s[i]) = observations.observe( _observationCardinality, secondsAgos[i] ); } } end

Trong Oracle.sol, mảng accumulator được lưu dưới dạng int56. Giới hạn của int56 là 2^55 ~ 3.6e16 tick-second. Một pool thanh khoản thấp có thể chỉ có vài giao dịch mỗi ngày. Nếu không có giao dịch trong vài ngày, giá trị tickCumulative không được cập nhật. Nhưng timestamp vẫn tăng. Khi giao dịch xảy ra, accumulator cũ + delta = giá trị mới. Tuy nhiên, do overflow, int56 có thể bị wrap around, dẫn đến TWAP sai lệch hoàn toàn. Bot đã khai thác điều này: nó gửi một giao dịch làm thay đổi giá về 0, kết hợp với flash loan để kiếm lời từ sự chênh lệch.

Phân tích kỹ thuật: Lỗ hổng Oracle trong Uniswap V3 đã bị khai thác như thế nào?

Đây không phải là lần đầu tôi thấy lỗi này. Năm 2020, khi audit một protocol fork Uniswap V2, tôi đã cảnh báo về việc không kiểm tra block.timestamp hợp lệ. Nhưng V3 vẫn lặp lại sai lầm. Lỗi nằm ở thiết kế cốt lõi: oracle không có cơ chế chống overflow cho các pool ít tương tác. Documentation nói rằng người dùng nên chọn secondsAgo phù hợp, nhưng thực tế, nếu pool không có giao dịch trong hơn 2^55 giây (khoảng 1 tỷ năm), overflow mới xảy ra. Nhưng vì int56 được tính theo tick-second, nếu tick rất nhỏ (pool stablecoin), và interval dài (ví dụ 3600 giây), giá trị tickCumulative tích lũy sau mỗi giao dịch có thể vượt ngưỡng trong vài tháng. Bot chỉ cần tìm pool có thanh khoản thấp, chờ vài tuần không giao dịch, rồi kích hoạt overflow.

Quan điểm trái chiều: Nhiều người cho rằng lỗi này là do người dùng không đọc kỹ documentation. Nhưng thực tế, lỗi nằm ở thiết kế cơ bản: Uniswap V3 Oracle không kiểm tra tính hợp lệ của block timestamp. Nó giả định accumulator sẽ luôn tăng, nhưng với pool chết, giá trị có thể bị giảm do overflow. Đây là điểm mù bảo mật mà hầu hết audit trước đây bỏ qua. Tôi đã thử nghiệm với một fork trên local: chỉ cần 5 dòng code khai thác.

Dự báo: Các pool thanh khoản thấp trên V3 vẫn còn rủi ro tương tự. Uniswap đã biết về vấn đề này từ năm 2023 nhưng chưa ra bản vá. Governance multi-sig có thể không kịp thời. Nếu bạn đang chạy một pool thanh khoản thấp, hãy theo dõi log Oracle.observe thường xuyên. Có thể bạn sẽ thấy điều bất thường.

Giá thị trường

BTC Bitcoin
$62,761.3 -0.33%
ETH Ethereum
$1,839.93 -1.24%
SOL Solana
$71.7 -1.83%
BNB BNB Chain
$575.9 -1.97%
XRP XRP Ledger
$1.06 -0.47%
DOGE Dogecoin
$0.0690 -1.02%
ADA Cardano
$0.1738 +2.72%
AVAX Avalanche
$6.17 -3.77%
DOT Polkadot
$0.7759 +1.73%
LINK Chainlink
$8.04 -1.26%

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

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

15
04
halving Bitcoin Halving

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

28
03
unlock Mở khóa token Arbitrum

Giải phóng 92 triệu ARB

12
05
halving BCH Halving

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

22
03
unlock Mở khóa Optimism

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

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

Vốn hóa thị trường

Tất cả →
1
Bitcoin
BTC
$62,761.3
1
Ethereum
ETH
$1,839.93
1
Solana
SOL
$71.7
1
BNB Chain
BNB
$575.9
1
XRP Ledger
XRP
$1.06
1
Dogecoin
DOGE
$0.0690
1
Cardano
ADA
$0.1738
1
Avalanche
AVAX
$6.17
1
Polkadot
DOT
$0.7759
1
Chainlink
LINK
$8.04

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

🐋 Theo dõi cá voi

🔵
0xb7ee...721f
12 giờ trước
Stake
16,502 SOL
🔵
0x5d20...ddda
1 giờ trước
Stake
928,150 DOGE
🟢
0x4f35...4fc5
5 phút trước
Chuyển vào
2,521,799 USDT

💡 Smart Money

0x14c8...a4bb
Nhà đầu tư sớm
+$4.3M
88%
0x8197...0012
Ví lưu ký tổ chức
+$2.0M
88%
0x6136...0ff8
Nhà đầu tư sớm
+$4.8M
90%