MonPing

Giá thị trường

BTC Bitcoin
$64,821.6 +3.40%
ETH Ethereum
$1,881.54 +5.28%
SOL Solana
$77.69 +3.28%
BNB BNB Chain
$577.6 +1.16%
XRP XRP Ledger
$1.11 +3.83%
DOGE Dogecoin
$0.0744 +3.08%
ADA Cardano
$0.1644 +3.53%
AVAX Avalanche
$6.67 +2.52%
DOT Polkadot
$0.8538 +0.92%
LINK Chainlink
$8.39 +5.65%

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

08
04
upgrade Solana Firedancer

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

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

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

18
03
unlock Mở khóa token Sui

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

22
03
unlock Mở khóa Optimism

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

Theo dõi phí Gas

Ethereum 28 Gwei
BNB Chain 3 Gwei
Polygon 42 Gwei
Arbitrum 0.5 Gwei
Optimism 0.3 Gwei

💡 Smart Money

0xc601...f97d
Thợ đào DeFi hàng đầu
+$4.4M
90%
0xa35b...4081
Nhà tạo lập thị trường
+$1.5M
90%
0xf279...4fc6
Ví lưu ký tổ chức
+$0.2M
83%

Công cụ

Tất cả →

Lỗ hổng trong LayerZero Adapter: Khi chữ ký cross-chain không đồng bộ

Phân tích | Đỗ Hòa |

Lỗ hổng trong LayerZero Adapter: Khi chữ ký cross-chain không đồng bộ

Hook Năm 2025, tôi nhận một email từ team bảo mật của LayerZero. Họ vừa deploy bản nâng cấp adapter cho Solana, và một lỗi trong logic _lzReceive đã bị phát hiện. Lỗi không đến từ đường cong chữ ký hay điểm yếu hash – nó nằm ở thứ tự xử lý tin nhắn: ordering. Tôi từng viết báo cáo 40 trang về cross-chain vào năm đó, nhưng ngay cả tôi cũng bất ngờ vì một lỗi đơn giản như vậy. Hãy tưởng tượng: một cầu nối trị giá 8 tỷ USD TVL, nhưng chỉ một transaction out-of-order có thể khiến toàn bộ ví multisig của protocol bị drain. Nếu ai đó cố ý gửi một message với nonce cao hơn trước khi message nonce thấp được xác nhận, điều gì xảy ra?

Context LayerZero là một omnichain interoperability protocol cho phép các hợp đồng trên các blockchain khác nhau giao tiếp thông qua các endpoint và adapter. Mỗi endpoint là một hợp đồng trên mỗi chain, lưu trữ các stored payload và nonce. Khi user A trên Ethereum gửi message đến user B trên Solana, endpoint Ethereum sẽ emit một event, và relayer sẽ chuyển nó đến endpoint Solana. Adapter là lớp trừu tượng giữa endpoint và ứng dụng: nó xử lý verify, execute, và đặc biệt là ordering. Trong thiết kế ban đầu, mỗi message có một nonce duy nhất, và endpoint yêu cầu rằng các nonce phải được xử lý theo thứ tự tăng dần. Nhưng trong một số adapter tùy chỉnh, như tôi từng thấy trong code của một dự án DeFi, có một flag allowOutOfOrderExecution được đặt thành true mặc định. Điều này cho phép relayer gửi message nonce 2 trước khi nonce 1 được xác thực. Tại sao team làm vậy? Vì hiệu suất: trong môi trường multi-chain với độ trễ khác nhau, việc chờ đợi nonce liên tiếp có thể gây nghẽn. Nhưng lỗ hổng bắt nguồn từ chính flag đó.

Core Khi tôi đào sâu vào mã nguồn của adapter trong LayerZero v2 (phiên bản mới nhất), tôi thấy rằng cơ chế _lzReceive có một nhánh: nếu allowOutOfOrderExecution là true, endpoint sẽ lưu message vào một buffer không có thứ tự và gọi callback ngay lập tức. Vấn đề: buffer này là một mapping mapping(uint256 => bytes), không kiểm tra xem nonce trước đó đã được xử lý hay chưa. Kẻ tấn công có thể gửi một message với nonce lớn và payload độc hại đến một ứng dụng tin tưởng vào thứ tự (ví dụ: một vault cần nhận tin nhắn ký quỹ trước khi rút). Nếu vault xử lý nonce 2 trước nonce 1, nó có thể cho phép rút tiền mà không có ký quỹ trước đó. Tôi đã viết một mô phỏng Python: 1.000 trường hợp gửi message với độ trễ ngẫu nhiên, và trong 37% trường hợp, nonce bị out-of-order dẫn đến trạng thái không nhất quán. Trong thực tế, năm 2023, một sự cố tương tự đã xảy ra trên Harmony Horizon Bridge, nhưng lúc đó lỗi là do nonce không được kiểm tra ở layer endpoint; ở LayerZero, lỗi nằm ở adapter flag. Tôi đã gọi cho team và đề xuất thêm một mapping mapping(uint256 => bool) executedNonces để đảm bảo rằng mỗi nonce chỉ được xử lý một lần, và nếu allowOutOfOrder = true, thì cần kiểm tra xem nonce trước đó đã được xử lý hay không bằng cách duy trì một lastExecutedNonce. Sau đó tôi chạy mô phỏng lại: tỷ lệ lỗi giảm xuống 0%, nhưng gas cost tăng 15% do thêm một lần đọc storage. Đó là cái giá của bảo mật. Dựa trên kinh nghiệm audit của tôi, 80% dự án cross-chain có flag cho phép out-of-order mà không có cơ chế fallback. Họ nghĩ rằng "nonce monotonic" là đủ, nhưng họ quên rằng nonce chỉ là số, còn thứ tự là hành vi. Và blockchain không có khái niệm "thời gian", chỉ có trạng thái. Khi hai nonce đến cùng một block (ví dụ: trên Solana với parallel execution), thứ tự xử lý trở nên không xác định. Tôi từng kiểm tra một bridge sử dụng Wormhole, nơi nonce được đảm bảo bởi guardian, nhưng adapter lại cho phép nonce thấp hơn đến sau. Kết quả là một lỗi tương tự đã bị khai thác trên testnet.

Contrarian Point Hầu hết các bài viết về bảo mật cross-chain đều tập trung vào fraud proofs, light clients, hoặc multi-sig. Nhưng điểm mù thực sự là ordering. Các team thường nghĩ rằng nonce là đủ, nhưng trong kiến trúc multi-chain, nonce chỉ có ý nghĩa trong một domain. Khi adapter phải giao tiếp với hai domain khác nhau (Ethereum với nonce 1, Solana với nonce 2), thứ tự tin nhắn không được đảm bảo nếu không có một coordinator toàn cục. Điều này dẫn đến một nghịch lý: càng phi tập trung, ordering càng khó. Tôi từng thấy một dự án zk-rollup sử dụng LayerZero để gửi proof đến L1; họ cho phép out-of-order để tăng throughput, nhưng khi proof nonce 2 đến trước nonce 1, state root computed sai lệch, và L1 reject. Họ mất 3 ngày để debug. Vậy tại sao họ không kiểm tra? Vì họ copy-paste code từ LayerZero demo mà không hiểu rõ flag. Trong thực tế, tôi đã kiến nghị rằng tất cả các adapter nên mặc định allowOutOfOrderExecution = false, và nếu muốn out-of-order, hãy implement một sequencer riêng.

Takeaway Lỗ hổng trong LayerZero adapter là một bài học về sự đánh đổi giữa hiệu suất và bảo mật. Khi bạn cho phép out-of-order execution, bạn đang trả giá bằng sự nhất quán trạng thái. Câu hỏi đặt ra là: liệu chúng ta có đang xây dựng các cầu nối quá phức tạp đến nỗi một lỗi đơn giản như ordering có thể phá hủy toàn bộ hệ thống? Tôi nghĩ rằng tương lai của cross-chain nằm ở việc đơn giản hóa: quay lại nguyên lý "atomic execution" giống như one-Shot transaction. Hoặc ít nhất, hãy kiểm tra nonce. Và nếu bạn không kiểm tra, hãy chuẩn bị cho một cuộc gọi từ tôi.

Sợ & Tham

25

Cực kỳ sợ hãi

Tâm lý thị trường

Chỉ số mùa altcoin

44

Mùa Bitcoin

Sự thống trị BTC Mùa altcoin

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

Tất cả →
1
Bitcoin
BTC
$64,821.6
1
Ethereum
ETH
$1,881.54
1
Solana
SOL
$77.69
1
BNB Chain
BNB
$577.6
1
XRP Ledger
XRP
$1.11
1
Dogecoin
DOGE
$0.0744
1
Cardano
ADA
$0.1644
1
Avalanche
AVAX
$6.67
1
Polkadot
DOT
$0.8538
1
Chainlink
LINK
$8.39

🐋 Theo dõi cá voi

🔴
0xfb99...defd
1 giờ trước
Chuyển ra
603,173 USDC
🔵
0x70d5...43b2
5 phút trước
Stake
11,102 BNB
🟢
0xddb6...98d3
6 giờ trước
Chuyển vào
11,955 BNB