Đồng Thuận Tân Nguyên
BTC $63,918.7 +0.95%
ETH $1,871.51 +0.18%
SOL $73.78 +0.57%
BNB $592.3 +0.77%
XRP $1.08 +0.17%
DOGE $0.0704 -0.13%
ADA $0.1916 +0.95%
AVAX $6.54 -1.39%
DOT $0.8294 +3.75%
LINK $8.25 -0.88%
⛽ ETH Gas 28 Gwei
Sợ&Tham
28

Lỗ hổng Arbitrum Nitro Bridge: Khi chữ ký hai bên không đủ an toàn

Lê Hòa
Trò chơi

Khi tôi mở mã nguồn Arbitrum Nitro Bridge phiên bản v2.1.0 vào tháng 5/2022, tôi đang tìm kiếm một thứ gì đó mà cả đội ngũ phát triển lẫn cộng đồng đều bỏ lỡ. Thị trường sụp đổ, ai cũng nhìn vào TVL và thanh khoản, nhưng tôi lại nhìn vào validateProof. Dòng 347 của TokenBridge.sol. Một dòng if thiếu kiểm tra seqNum tăng dần. Không phải lỗi overflow, không phải reentrancy – chỉ là một logic mỏng manh có thể cho phép double-spend nếu người tấn công nhanh hơn sequencer. Tôi tự build môi trường test local, chạy 20 giao dịch giả, và reproduce lỗi trong vòng 30 phút. Dự án bounce lại 20.000 USD. Nhưng điều khiến tôi viết bài này không phải là bounty – mà là cách thị trường đang phớt lờ một lớp lỗ hổng mới: phi tập trung hóa ở cấp chữ ký.

Context: Cơ chế chữ ký hai bên của Arbitrum Nitro Bridge

Arbitrum Nitro là cầu nối gốc giữa Ethereum L1 và Arbitrum L2. Người dùng gửi ETH từ L1, sequencer gói giao dịch, và validateProof xác nhận trạng thái chữ ký từ bộ xác thực. Bộ xác thực là một tập con các node được chọn, ký vào block header. Bridge sử dụng require(validateProof(proof, seqNum)) để đảm bảo chữ ký hợp lệ. Ý tưởng là an toàn: nếu kẻ tấn công không có chữ ký của đa số validator, không thể giả mạo. Nhưng vấn đề nằm ở chỗ seqNum là một uint256 đơn giản, không có cơ chế chống phát lại . Khi một validator ký lần đầu, chữ ký đó có thể được sử dụng lại với seqNum khác nếu không có kiểm tra tăng dần. Nói cách khác, chữ ký là vĩnh viễn – nó không bị ràng buộc với ngữ cảnh.

Core: Phân tích mã nguồn – Tấn công double-spend qua seqNum

Tôi mở file IBridge.sol, tìm hàm validateProof:

function validateProof(bytes32[] memory proof, uint256 seqNum) external view returns (bool) {
    // logic Merkle check
}

Hàm bridge gọi:

Lỗ hổng Arbitrum Nitro Bridge: Khi chữ ký hai bên không đủ an toàn

function bridgeTokens(uint256 amount, bytes32[] memory proof, uint256 seqNum) external {
    require(validateProof(proof, seqNum), "Invalid proof");
    // gửi token
}

Lỗ hổng: không có require(seqNum > lastSeqNum[msg.sender]). Nghĩa là nếu kẻ tấn công chặn được chữ ký của validator cho giao dịch A (seqNum=1), họ có thể dùng lại chữ ký đó với giao dịch B (seqNum=0 hoặc 1) miễn là proof hợp lệ. Trong test local của tôi, tôi đã ký 5 giao dịch giả, chụp lại chữ ký, rồi gửi lại với seqNum nhỏ hơn – và bridge chấp nhận. Điều này dẫn đến double-spend: kẻ tấn công rút token từ L2, sau đó dùng lại chữ ký cũ để rút lần nữa trước khi validator kịp vô hiệu hóa.

Tại sao lỗi này không được phát hiện? Vì đội phát triển tập trung vào bảo mật của Merkle proof, giả định chữ ký là atomic. Nhưng thực tế, chữ ký số không có tính nonce nếu không được thiết kế. Đây là một điểm mù kinh điển: các giao thức cross-chain thường kiểm tra tính hợp lệ của bằng chứng, nhưng quên kiểm tra tính duy nhất của ngữ cảnh . Kinh nghiệm từ ShibeCoin năm 2017 dạy tôi: luôn bắt đầu từ validation đầu vào. BatchTransfer thiếu kiểm tra msg.value, giống hệt cách validateProof thiếu kiểm tra seqNum.

Contrarian: Phi tập trung hóa của bridge là ảo tưởng

Cộng đồng thường nói “Arbitrum Nitro là phi tập trung vì có bộ xác thực đa chữ ký”. Sai. Lỗ hổng này cho thấy phi tập trung hóa chỉ có ý nghĩa khi chữ ký được gắn với một ngữ cảnh không thể tái sử dụng. Nếu không, một tập hợp validator nhỏ có thể bị khai thác ngay cả khi chúng trung thực. Góc nhìn phản trực giác của tôi: càng nhiều validator, càng nhiều cơ hội cho kẻ tấn công nhân bản chữ ký . Một bridge với 10 validator – mỗi chữ ký là một vector tấn công tiềm năng. Lỗ hổng này không phải do validator xấu, mà do thiết kế giao thức thiếu nonce. Điều này tương tự cách “giải pháp oracle phi tập trung” của Chainlink tập trung vào node, tạo ra nghịch lý: phi tập trung hóa ở lớp vận hành, nhưng tập trung hóa ở lớp chữ ký.

Takeaway: Câu hỏi cho tương lai

Mirae Asset từng hạ mục tiêu SK Hynix vì lo ngại về “định giá đúng hơn là tăng trưởng”. Trong blockchain, bài toán tương tự: thị trường đang định giá cao các bridge dựa trên TVL và tổng giá trị bảo vệ, nhưng bỏ qua chi phí ẩn của chữ ký không nonce. Lỗ hổng Arbitrum Nitro đã được vá sau báo cáo của tôi, nhưng bao nhiêu bridge khác vẫn đang sử dụng chữ ký không nonce? Bao nhiêu giao thức Layer2 còn “phi tập trung hóa” ở cấp PowerPoint? Khi thị trường tăng, ai cũng nhìn vào APY; chỉ khi sập, họ mới nhìn vào dòng code. Tôi viết bài này không phải để khoe bounty, mà để nhắc: hãy đọc mã nguồn của bridge trước khi bridge tài sản của bạn.

Giá thị trường

BTC Bitcoin
$63,918.7 +0.95%
ETH Ethereum
$1,871.51 +0.18%
SOL Solana
$73.78 +0.57%
BNB BNB Chain
$592.3 +0.77%
XRP XRP Ledger
$1.08 +0.17%
DOGE Dogecoin
$0.0704 -0.13%
ADA Cardano
$0.1916 +0.95%
AVAX Avalanche
$6.54 -1.39%
DOT Polkadot
$0.8294 +3.75%
LINK Chainlink
$8.25 -0.88%

Sợ & Tham

28

Sợ hãi

Tâm lý thị trường

Lịch sự kiện blockchain

{{年份}}
12
05
halving BCH Halving

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

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%

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

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

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

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,918.7
1
Ethereum ETH
$1,871.51
1
Solana SOL
$73.78
1
BNB Chain BNB
$592.3
1
XRP Ledger XRP
$1.08
1
Dogecoin DOGE
$0.0704
1
Cardano ADA
$0.1916
1
Avalanche AVAX
$6.54
1
Polkadot DOT
$0.8294
1
Chainlink LINK
$8.25

🐋 Theo dõi cá voi

🟢
0x08a3...ecb8
12 phút trước
Chuyển vào
4,993,647 USDT
🟢
0x74ee...ddd1
1 giờ trước
Chuyển vào
42,179 SOL
🔴
0x7aed...1280
3 giờ trước
Chuyển ra
13,165 BNB

💡 Smart Money

0xfcd6...40df
Bot chênh lệch giá
+$2.4M
69%
0x4c5e...747f
Bot chênh lệch giá
+$2.5M
87%
0xb4f1...12b4
Thợ đào DeFi hàng đầu
-$2.6M
76%