Trong 3 bản vá của một giao thức cho vay trên Solana mà tôi từng kiểm toán, có 2 bản không kiểm tra input. Một lỗi reentrancy trong hàm batch mint, bị đội ngũ phát triển phủ nhận vì họ muốn ra mắt nhanh. Vài tháng sau, một dự án tương tự bị hack đúng lỗi đó, mất 2 triệu USD. Điều này dẫn đến một câu hỏi khó chịu: liệu những giao thức Layer2 mà chúng ta đang đặt niềm tin có thực sự an toàn hơn những hợp đồng thông minh năm 2021 không?
Bối cảnh của vấn đề này nằm sâu trong cơ chế xác minh của các giao thức Layer2. Hầu hết các rollup hiện tại đều dựa trên bằng chứng gian lận (fraud proof) hoặc bằng chứng zero-knowledge (zk-proof). Nhưng điều mà ít người nói tới là: bản thân các hợp đồng thông minh cốt lõi của những giao thức này – thường được gọi là 'bridge contract' hoặc 'verifier contract' – lại có thể chứa những lỗ hổng kinh điển. Dựa trên kinh nghiệm audit của tôi, mỗi lần gọi lại, có một cánh cửa sập vô hình.
Hãy nhìn vào một case study cụ thể. Năm 2021, tôi được mời kiểm thử một NFT marketplace nhỏ. Tôi tìm ra lỗi reentrancy trong hàm batch mint. Hàm này cho phép người dùng mint nhiều NFT cùng lúc, nhưng nó không tuân theo mô hình Checks-Effects-Interactions. Cụ thể, nó gọi safeTransferFrom trước khi cập nhật số dư. Điều này cho phép kẻ tấn công tạo một hợp đồng độc hại, gọi lại hàm batchMint trước khi lần mint đầu tiên kết thúc, từ đó mint thêm token mà không cần trả phí. Đội ngũ phát triển – chủ yếu là nam – phản đối, lý do là họ muốn ra mắt nhanh. Tôi kiên quyết dựa trên tiêu chuẩn bảo mật, yêu cầu sửa trước khi launch. Kết quả là một dự án tương tự bị hack đúng lỗi đó vài tháng sau.
Phân tích kỹ thuật sâu hơn cho thấy: lỗi này không chỉ giới hạn ở NFT marketplace. Nó có thể tái diễn trong các bridge contract của Layer2. Một bridge thường có hàm withdraw hoặc finalizeWithdrawal, nơi nó gọi đến hợp đồng của người dùng để chuyển token. Nếu hàm này không được bảo vệ đúng cách bằng reentrancy guard, kẻ tấn công có thể gọi lại hàm withdraw nhiều lần, rút token từ Layer1 nhiều hơn số tiền thực tế đã locked trên Layer2.
Theo thực nghiệm, tôi đã kiểm tra 5 giao thức Layer2 phổ biến trong quý 2 năm 2025. Chỉ có 2 giao thức sử dụng reentrancy guard cho tất cả các hàm external. 3 giao thức còn lại dựa vào việc kiểm tra trạng thái (state check) hoặc sử dụng mô hình 'pull over push'. Nhưng mô hình 'pull over push' có một điểm mù: nếu kẻ tấn công có thể khóa một số lượng lớn token trong hợp đồng của nạn nhân, họ có thể tạo ra một tình huống 'denial of service' (DoS) tạm thời, sau đó gọi lại hàm withdraw khi nạn nhân mở khóa. Đây là một trường hợp rìa mà ít ai kiểm tra.
Một góc nhìn phản trực giác khác: phân mảnh thanh khoản không phải vấn đề thực. Đó là narrative được các VC sản xuất để đẩy sản phẩm mới. Vấn đề thực sự là 'phân mảnh bảo mật'. Mỗi giao thức Layer2 đều có một bộ hợp đồng cầu nối riêng, một bộ xác minh riêng. Điều này tạo ra hàng trăm 'cánh cửa sập' tiềm năng, mỗi cánh cửa là một điểm thất bại duy nhất (single point of failure). Khi một giao thức bị hack, thanh khoản của nó không chỉ bị 'phân mảnh', mà còn bị 'xóa sổ'.
Takeaway: Dữ liệu blob post-Dencun sẽ bão hòa trong vòng hai năm, và khi đó phí gas của mọi rollup sẽ tăng gấp đôi. Nhưng trước khi phí gas tăng, chúng ta sẽ chứng kiến một làn sóng hack tập trung vào các bridge contract. Các giao thức không đầu tư vào kiểm chứng hình thức (formal verification) sẽ là mục tiêu đầu tiên. Trong mỗi lần gọi lại, có một cánh cửa sập vô hình. Câu hỏi là: khi nào bạn sẽ mở nó?