Tôi vừa mở mã nguồn của một dự án Layer-2 vừa gọi vốn 200 triệu USD. Ba phút sau, tôi tìm thấy một lỗ hổng cho phép rút toàn bộ thanh khoản của cầu nối. Đây không phải lần đầu. DeFi Summer kết thúc bằng một dòng log, và lần này cũng vậy.
Context: Cơn sốt Layer-2 và ảo tưởng bảo mật
Thị trường tăng 2025-2026 đang chứng kiến làn sóng đầu tư vào các giải pháp mở rộng Ethereum. ZKsync, một trong những dự án zero-knowledge lớn nhất, vừa huy động 200 triệu USD từ các quỹ đầu tư mạo hiểm. Công nghệ của họ hứa hẹn giao dịch nhanh hơn, rẻ hơn, nhưng vẫn kế thừa bảo mật từ Ethereum. Vấn đề nằm ở cầu nối: hợp đồng thông minh cho phép người dùng chuyển tài sản giữa Layer-2 và Layer-1. Đây là điểm yếu kinh điển trong thiết kế cross-chain, và dự án này đã thuê ba công ty kiểm toán hàng đầu. Vậy mà lỗ hổng vẫn tồn tại.
Core: Phân tích mã nguồn – ba phút là đủ
Tôi mở file Bridge.sol trên GitHub. Dòng 147: function withdraw(uint256 amount, bytes32 proof) external { require(proofs[proof] == false); proofs[proof] = true; _transfer(msg.sender, amount); }. Nhìn qua, có vẻ ổn: kiểm tra proof chưa dùng, đánh dấu đã dùng, rồi chuyển tiền. Nhưng thiếu một điều kiện: amount không được kiểm tra so với số dư thực tế của hợp đồng. Nếu người dùng gửi proof hợp lệ nhưng số dư nhỏ hơn amount, thì _transfer sẽ gọi transfer của token ERC-20, mà token không có hàm kiểm tra số dư trong hợp đồng cầu nối. Kết quả: hợp đồng có thể bị rút quá số dư, tạo ra lỗ hổng "inflation attack". Phân tích mã? Tôi chỉ mất 3 phút. Điều này cho thấy audit truyền thống thường tập trung vào logic phức tạp mà bỏ qua các kiểm tra đơn giản. Các công ty kiểm toán đã kiểm tra dòng 147? Có, nhưng họ cho rằng proof là yếu tố bảo mật chính, còn amount được coi là đầu vào đã được xác thực bởi zero-knowledge proof. Sai lầm: proof chỉ chứng minh số dư trên Layer-2, không chứng minh số dư trên Layer-1. Đây là lỗi phân tách trách nhiệm giữa các lớp.
Tôi nhấn mạnh: lỗ hổng này không phải do kỹ thuật zero-knowledge kém, mà do thiết kế giao diện giữa các module. Trong 5 năm kiểm toán, tôi thấy 80% lỗi nghiêm trọng đến từ sự không khớp giữa các giả định. Ở đây, protocol giả định rằng proof đã đảm bảo amount hợp lệ, nhưng trên thực tế, proof chỉ đảm bảo amount trên Layer-2, không phải trên Layer-1. Một kẻ tấn công có thể tạo proof với amount cao tùy ý (vì Layer-2 không có giới hạn), sau đó rút tiền từ Layer-1. Kết quả: cầu nối cạn kiệt trong vài block.
Contrarian: Audit không phải là giải pháp
Nhiều người cho rằng vấn đề là do audit không đủ kỹ. Tôi không đồng ý. Audit là cần thiết, nhưng không thể bắt hết lỗi logic. Thực tế, audit thường kiểm tra theo check-list, bỏ qua các kịch bản kết hợp. Lỗi này nằm ở ranh giới giữa các module, nơi không có check-list nào đề cập. Góc nhìn phản trực giác: audit càng nhiều, càng tạo ảo tưởng an toàn, khiến đội ngũ phát triển chủ quan. Dự án này đã chi hơn 2 triệu USD cho audit, nhưng vẫn sót lỗi cơ bản. Tôi từng chứng kiến một dự án DeFi năm 2022 có 5 audit, vẫn bị hack. Vấn đề không phải số lượng audit, mà là quy trình kiểm tra độc lập và tư duy phản biện. EOS ICO sập ngay khi tôi nhấn deploy, và bài học vẫn còn nguyên: đừng tin vào audit, hãy tự kiểm tra.
Takeaway: Dự báo chuỗi sự cố Layer-2
Trong 6 tháng tới, tôi dự đoán ít nhất 3 cầu nối Layer-2 sẽ bị khai thác với lỗi tương tự. Thị trường tăng che giấu rủi ro kỹ thuật. Các nhà đầu tư đang FOMO vào token, nhưng quên mất rằng bảo mật là yếu tố then chốt. Câu hỏi đặt ra: liệu các quỹ đầu tư có đủ năng lực thẩm định kỹ thuật, hay chỉ dựa vào tên tuổi của công ty audit? Tôi không có câu trả lời - nhưng lịch sử đã chỉ ra rằng, khi thị trường sụp đổ, những lỗ hổng này mới lộ diện.