Một dự án Layer 2 vừa huy động 150 triệu USD, TVL chạm mốc 2 tỷ, và đội ngũ marketing đang tung ra các chiến dịch airdrop rầm rộ. Nhưng tôi vừa audit contract của họ, và phát hiện một lỗi verify zk proof có thể khiến attacker rút toàn bộ TVL chỉ trong một block. Lỗi này tồn tại 3 tháng, không ai thấy vì ai cũng mải chạy theo airdrop.
Rug pull: học phí đắt, nhưng nhớ lâu.
Bối cảnh thị trường hiện tại – bull run 2025 – đang che giấu mọi lỗi kỹ thuật dưới lớp sơn màu xanh của TVL tăng trưởng. Từ 2018, khi tôi mất 3 ETH vào ICO DataChain, tôi học được một bài: không bao giờ tin vào whitepaper mà không kiểm tra code. Và bây giờ, với sự phức tạp của zk-rollups, bài học đó còn đắt giá hơn.

Hãy nhìn vào cấu trúc thị trường. Các dự án Layer 2 mới đang cạnh tranh khốc liệt về TVL, nhưng ít ai hỏi: code của họ có an toàn không? MiCA mang lại sự rõ ràng bề ngoài cho châu Âu, nhưng yêu cầu dự trữ stablecoin và chi phí tuân thủ CASP sẽ giết chết các dự án nhỏ. Trong khi đó, cầu cross-chain vẫn bị hack tổng cộng hơn 2,5 tỷ USD, nhưng ngành vẫn phụ thuộc vào chúng – một nghịch lý bảo mật căn bản.

Bot chạy, tôi ngủ. Yield vẫn vào.
Phân tích dòng lệnh là cốt lõi để hiểu vấn đề. Tôi sẽ lấy ví dụ từ lỗi tôi tìm thấy trên zkSync Era năm 2025. Một dApp sử dụng zk proof để verify deposit và withdraw. Họ dùng thư viện SnarkJS, nhưng quên kiểm tra public inputs trong proof. Cụ thể, trong hàm verifyProof, họ không validate rằng public input root khớp với state root hiện tại. Kẻ tấn công có thể tạo một proof hợp lệ với một root cũ, cho phép rút tiền từ một trạng thái không tồn tại.
Đây là code snippet tôi đã gửi lên Immunefi:
