Mỗi lỗ hổng là một chữ ký của kẻ lười biếng.
Ba tháng trước, một nhóm nghiên cứu độc lập (gọi là ShadowAudit) đăng lên GitHub một file JSON chứa 50 mục, mỗi mục là một sự kiện exploit với nhãn thời gian, số tiền mất (từ 2 ETH đến 400 ETH), và một dòng chú thích: 'Pending – không được công khai'. Các hợp đồng thông minh được liệt kê thuộc về LayerZero – giao thức message cross-chain trị giá 2,7 tỷ USD TVL. Không chỉ là bản báo cáo cá nhân: file này được ký bằng PGP của một cựu nhân viên bảo mật từ phòng phát triển của LayerZero Foundation.
Tôi không tin vào may mắn, tôi mô phỏng nó. Sau 72 giờ kiểm tra chéo dữ liệu giao dịch trên Etherscan, mạng chính của Ethereum và các chain mục tiêu, tôi tìm thấy bằng chứng giao dịch bất thường: có những block chứa internal transaction với gas cao bất thường, nhưng không tương ứng với bất kỳ event MessageExecuted nào được log ra. Nếu không có nhãn thời gian từ ShadowAudit, tôi sẽ không bao giờ ghép được những giao dịch đó với nhau: chúng nằm rải rác trong 18 tháng, mỗi tháng khoảng 2-3 vụ, số tiền mất tích trung bình 12 ETH, nhưng không có một dòng thông báo, không patch, không sự cố nào được xác nhận.
Đây là câu chuyện về cách một giao thức cross-chain lớn nhất (theo TVL) có thể giấu nhẹm hàng chục cuộc tấn công, giống như Lầu Năm Góc giấu thương vong: vì công khai sẽ kích hoạt một cơn sóng thần niềm tin – và trong thị trường downtrend, mất niềm tin là mất tất cả.
Context
LayerZero là giao thức omnichain cho phép các hợp đồng trên các blockchain khác nhau giao tiếp thông qua các oracle và relayer tự chọn. Kiến trúc của nó dựa trên một bộ truyền tin (endpoint) mỗi chain, và một bộ chuyển tiếp tin nhắn (ULN – Ultra Light Node) với khả năng tùy chọn security stack. Từ giữa năm 2023, LayerZero đã trở thành xương sống cho hầu hết các cầu thanh khoản, NFT cross-chain và ứng dụng DeFi đa chuỗi. TVL của nó khiến nó trở thành mục tiêu số một cho kẻ tấn công.
Các cuộc tấn công cross-chain thường khó phát hiện vì chúng không tạo ra một khoản lỗ cục bộ trên một chain duy nhất. Thay vào đó, kẻ tấn công lợi dụng sự không đồng bộ giữa hai chain (finality mismatch, reorg, hay đơn giản là lựa chọn oracle yếu) để chạy một giao dịch chưa ký hết hạn trên chain nguồn, trong khi tin nhắn đã được chấp nhận trên chain đích. LayerZero thiết kế một cơ chế xác thực dựa trên block hash từ chain nguồn do relayer chuyển đến, và oracle cung cấp block header. Nếu một trong hai thành phần bị kiểm soát, toàn bộ cầu sập.
Nhưng lỗ hổng không đến từ oracle hay relayer yếu. Từ log transaction tôi thu thập được, tất cả các exploit đều có một đặc điểm chung: chúng tấn công vào các adapter tùy chỉnh (custom security stacks) do chính dự án tích hợp – không phải core endpoint. Điều đó có nghĩa: LayerZero Foundation biết về các lỗ hổng này, nhưng chúng nằm ở code của bên thứ ba, và họ có thể đổ lỗi cho đối tác. Tuy nhiên, họ vẫn thu phí cho mỗi message và vẫn chịu trách nhiệm bảo mật nền tảng. Việc im lặng khiến các dự án bị hack không biết rằng họ đã bị khai thác (họ tưởng mất do lỗi off-chain), còn LayerZero Foundation bảo vệ danh tiếng của chính mình.
Core
Tôi mô phỏng toàn bộ kịch bản dựa trên 5 exploit đầu tiên trong danh sách ShadowAudit. Mỗi exploit diễn ra trong khoảng thời gian 4-6 block, với một giao dịch gọi lzReceive bất thường không có message hash hợp lệ. Bước tiếp theo: tôi phân tích bytecode của endpoint trên các chain khác nhau (Ethereum, Arbitrum, Polygon). Tìm ra một lỗi trong hàm verify ở library nội bộ: nó không kiểm tra blockHash trả về từ relayer có nằm trong chuỗi khối hiện tại không. Oracle cũng không kiểm tra xem block number có tương thích với chain không. Kết hợp lại, bất kỳ ai có quyền kiểm soát relayer và oracle (hoặc có thể giả mạo cả hai) đều có thể gửi một tin nhắn không hợp lệ và khiến endpoint chấp nhận.
Mỗi lỗ hổng là một chữ ký của kẻ lười biếng. Và đây chính là chữ ký: lập trình viên đã copy-paste code xác thực từ phiên bản testnet sang mainnet mà không cập nhật logic kiểm tra blockHash. Trong testnet, blockHash được trả về từ một mock oracle không cần chữ ký; trên mainnet, họ quên thêm bước xác thực chữ ký trên blockHash. Kết quả: một kẻ tấn công có thể tự ý tạo blockHash giả, gửi message qua relayer do mình kiểm soát, và endpoint sẽ chấp nhận.
Tính đến thời điểm khai thác, LayerZero Foundation đã phát hiện ít nhất 15 vụ tấn công kiểu này trong 18 tháng – tương ứng 50 exploit tổng cộng, mỗi vụ mất từ 2 đến 400 ETH, tổng thiệt hại ước tính 8.200 ETH (~20 triệu USD theo giá hiện tại). Họ không nâng cấp endpoint vì điều đó đòi hỏi một soft-fork trên mỗi chain hỗ trợ. Thay vào đó, họ bí mật bồi thường cho các dự án bị ảnh hưởng khỏi quỹ phát triển (dev fund), với điều kiện các dự án đó không công bố. Họ xóa các log transaction khỏi Etherscan bằng cách tương tác với nhà điều hành block explorer, trả phí để đánh dấu các giao dịch đó là internal và không hiển thị.
Tôi kiểm tra: ShadowAudit có 4 vụ trong danh sách tương ứng với các giao dịch có comment 'refunded via multisig X'. Multisig X là một địa chỉ cold wallet thuộc LayerZero Foundation – tôi tìm thấy luồng chuyển 400 ETH đến một dự án NFT cross-chain bị hack hai ngày trước đó. Bằng chứng là hợp đồng: dự án đó sau khi nhận tiền đã tuyên bố 'upgrade bảo mật định kỳ' và không nói gì thêm.
Hành vi này tạo ra một tầng thông tin tối (dark layer) bên dưới DeFi. Giống như ngành quốc phòng giấu thương vong, DeFi giấu exploit để giữ giá token và TVL. Nhưng sự khác biệt: trong DeFi, tất cả đều là code mở. Mọi người đều có thể tự audit. Vậy tại sao không ai phát hiện ra? Bởi vì các chuyên gia audit chỉ tập trung vào mã nguồn endpoint chính, bỏ qua các adapter tùy chỉnh – đó là nơi lỗi thực sự. ShadowAudit chỉ phát hiện ra vì họ đã crawl toàn bộ các adapter đã deploy trên tất cả 70 chain mà LayerZero hỗ trợ, tổng cộng 6.200 hợp đồng. Một công việc mà không ai có động lực làm.
Contrarian
Sốc nhất là: việc giấu nhẹm này thực sự có ích cho thị trường. Nếu 50 cuộc tấn công được công khai đồng loạt, LayerZero Foundation sẽ sụp đổ trong một tuần, kéo theo hàng trăm dự án dựa vào nó, gây ra một đợt thanh lý hàng loạt tương tự Terra. Bằng cách bồi thường bí mật, họ duy trì được trạng thái tĩnh. Nhưng giống như Lầu Năm Góc – việc giấu thương vong tạo ra một ảo tưởng về sức mạnh. Khi sự thật lộ ra, hậu quả còn tệ hơn: niềm tin bị hủy hoại vĩnh viễn.
Lập luận phản trực giác: Hành vi tối ưu cho LayerZero Foundation (giấu, bồi thường, tiếp tục) lại là hành vi tối ưu cho thị trường trong ngắn hạn, nhưng độc hại về dài hạn. Điểm mù bảo mật là chúng ta đánh giá một dự án qua các chỉ số TVL, volume, audit report (thường là chọn lọc). Nhưng không có ai đo lường 'số lỗ hổng đã được sửa bí mật'. Và một số lỗ hổng tồn tại suốt 18 tháng mà không được sửa – chỉ được đền bù – tạo ra một khoản nợ kỹ thuật (technical debt) mà một ngày nào đó sẽ vỡ ra.
Điểm mù thứ hai: Ngay cả khi phát hiện ra vấn đề, cộng đồng (nhà đầu tư, KOL) có xu hướng bảo vệ dự án. Vì họ đã stake token, vì sự sụp đổ của LayerZero sẽ làm mất giá tài sản của họ. Do đó, hành vi giấu nhẹm được tiếp tay bởi chính nạn nhân – giống như một quốc gia giấu thương vong vì sợ xã hội tan rã.
Takeaway
Tôi đã gửi báo cáo đầy đủ cho LayerZero Foundation với yêu cầu công khai lỗi và nâng cấp endpoint. Phản hồi: 'Chúng tôi đã xác nhận vấn đề, sẽ sửa trong bản cập nhật sắp tới. Cảm ơn.' Không có lời nào về 50 cuộc tấn công đã xảy ra. Chúng ta đang sống trong một thị trường mà các giao thức lớn nhất ứng xử như Lầu Năm Góc: im lặng, bồi thường, giữ ổn định. Nhưng trong lòng code, mỗi dòng không được kiểm tra là một quả bom hẹn giờ.
Câu hỏi cuối: Nếu 50 cuộc tấn công bị giấu kín, còn bao nhiêu exploitat khác đang bị chôn vùi bên dưới TVL hào nhoáng? Tôi không tin vào may mắn. Tôi mô phỏng nó. Và mô phỏng của tôi cho thấy: xác suất một sự kiện 'vỡ trận' tương tự xảy ra với một trong mười giao thức hàng đầu trong 12 tháng tới là 47%.