Tối qua, tôi mở trình duyệt, vào Etherscan, tra hợp đồng của dự án Layer-2 vừa gọi vốn 500 triệu USD trong vòng Series B. Một con số khổng lồ, ngay cả trong thị trường tăng. Nhưng tôi không quan tâm đến số tiền. Tôi quan tâm đến một dòng code trong hợp đồng bridge: if (msg.sender == address(sequencer)) { ... }.
Đây là một giả định chết người: sequencer không bao giờ bị compromise. Trong bull market, mọi người chỉ nhìn vào TVL, vào marketing, vào đội ngũ sáng lập từ MIT. Họ quên rằng lỗ hổng không nằm ở code, mà ở giả định.
Tôi là Bùi Khoa, 44 tuổi, Core Protocol Developer tại Geneva. Tôi đã kiểm toán hàng trăm hợp đồng từ ICO năm 2017 đến DeFi Summer 2020. Mỗi lần cầm một dự án mới, tôi bắt đầu bằng câu hỏi: "Giả định nào ở đây có thể sai?"
Hãy bắt đầu với cấu trúc của bridge Layer-2 này. Nó sử dụng một optimistic rollup với sequencer tập trung. Điểm mấu chốt: sequencer gửi batch lên mainnet, và hợp đồng bridge tin tưởng tuyệt đối vào chữ ký của sequencer. Nếu sequencer bị hack, kẻ tấn công có thể rút toàn bộ TVL.
Nhưng đó là chuyện ai cũng biết. Phân tích sâu hơn: trong hàm finalizeWithdrawal, có một vòng lặp duyệt qua danh sách các withdrawal request. Vòng lặp này không giới hạn số lượng phần tử. Nếu sequencer gửi một batch chứa hàng triệu request giả, gas sẽ explode, và bridge sẽ bị stuck. Đây là lỗi reentranry tầm thường? Không, đây là lỗi giả định về kích thước dữ liệu đầu vào.
Tôi nhìn vào mã nguồn của dự án: họ đã audit bởi ba công ty lớn. Các báo cáo audit đều sạch sẽ. Nhưng Code không sai, nhưng logic có thể chết. Các auditor kiểm tra từng dòng code riêng lẻ, nhưng họ bỏ qua tương tác giữa các module. Ví dụ: sequencer có thể gọi forceInclude để thêm một giao dịch bất kỳ vào batch. Kết hợp với vòng lặp không giới hạn, đây là công thức cho một cuộc tấn công từ chối dịch vụ (DoS) trên chính bridge.
Tôi đã thấy điều này trước đây. Năm 2020, tôi kiểm toán Uniswap v2 và phát hiện một lỗi tương tự trong pool phí không chuẩn. Lúc đó, tôi nhận được $50,000 và trở thành contributor. Nhưng lần này, dự án huy động 500 triệu USD. Số tiền lớn hơn, nhưng tư duy vẫn vậy.
Bây giờ, hãy nhìn từ góc nhìn thị trường tăng: bull market che giấu mọi lỗi kỹ thuật. Khi TVL tăng vọt, mọi người đổ xô vào farm token, không ai kiểm tra xem bridge có an toàn không. Tôi không nói rằng dự án này sẽ sập. Tôi nói rằng nếu có một cuộc tấn công, nó sẽ xảy ra vào lúc thị trường đang euphoria nhất.
Tôi đã viết một bài phân tích 20 trang về data availability sampling của Celestia vào năm 2022, khi thị trường gấu. Lúc đó, mọi người đọc để hiểu. Bây giờ, họ chỉ muốn alpha. Nhưng tôi vẫn viết. Lỗ hổng không nằm ở code, mà ở giả định. Giả định rằng sequencer không thể bị hack. Giả định rằng vòng lặp sẽ không explode. Giả định rằng audit ba lần là đủ.
Tôi đề xuất một giải pháp: thay vì tin tưởng sequencer, hãy thêm một cơ chế xác thực ngẫu nhiên từ các validator trong mạng L2. Mỗi batch phải được ký bởi ít nhất 2/3 số validator. Điều này làm chậm quá trình một chút, nhưng tăng tính bảo mật. Dự án có thể không thích vì nó ảnh hưởng đến hiệu suất. Nhưng tôi không quan tâm đến hiệu suất, tôi quan tâm đến tính đúng đắn.
Tương lai? Tôi thấy một làn sóng các dự án L2 sẽ đối mặt với các cuộc tấn công tinh vi hơn. Khi bull market kết thúc, những ai sống sót là những người có protocol được thiết kế để chịu đựng các giả định sai. Còn lại, chỉ là những con số 0 trong smart contract.
Kết luận của tôi không phải là "đừng đầu tư", mà là "hãy đọc code trước khi đầu tư". Và nếu bạn không đọc được code, hãy tìm người đọc. Bởi vì trong thế giới này, lỗ hổng không nằm ở code, mà ở giả định. Và giả định của bạn về thị trường cũng có thể sai.