Sự thật thường chôn vùi dưới lớp vỏ meme và hype.
Khi tôi nhìn vào pool thanh khoản của dự án “SecureL2” – một Layer 2 rollup tuyên bố “phi tập trung hóa sequencer” – điều đầu tiên tôi thấy không phải là dòng TVL $120M, mà là một dòng code trong contract bridge cho phép admin rút ETH mà không cần chữ ký multisig. Đó là tháng 5/2025, giữa mùa giảm giá, khi thị trường đang khát khao một câu chuyện “an toàn” để bám víu.
Context: Chu kỳ thổi phồng “Decentralized Sequencing” Từ 2023 đến 2025, hơn 20 dự án Layer 2 đã công bố lộ trình “decentralized sequencing”. Thực tế? Hầu hết vẫn vận hành một node sequencer duy nhất do đội ngũ kiểm soát. “SecureL2” không phải ngoại lệ. Họ gọi đó là “giai đoạn 1 – tập trung có kiểm soát”, nhưng whitepaper lại hứa hẹn “phi tập trung hoàn toàn trong quý 3”. Trong quá trình audit của tôi (kéo dài 6 tuần), tôi phát hiện 3 lỗ hổng nghiêm trọng, tất cả đều xoay quanh cùng một vấn đề: sequencer là điểm thất bại đơn lẻ, và code đã được thiết kế để che giấu điều đó.

Core: 3 lỗ hổng phơi bày sự thật Lỗ hổng #1 – Hàm forceWithdraw không có rate limit Trong contract L2Bridge.sol, hàm forceWithdraw(address user, uint256 amount) cho phép admin gọi trực tiếp để rút bất kỳ số lượng ETH nào từ pool thanh khoản trên L1. Điều kiện duy nhất: một chữ ký EOA từ địa chỉ owner. Team dự án giải thích đây là “cơ chế khẩn cấp”. Nhưng không có giới hạn số lần gọi, không có cooldown, không có multisig. Trong thực tế, một admin rogue có thể rút toàn bộ TVL chỉ trong một block. Tôi đã tính toán xác suất rủi ro: với giả định 30% admin key bị lộ (dựa trên thống kê lịch sử), tổn thất kỳ vọng = $120M × 30% = $36M. Đây không phải lỗi kỹ thuật, mà là lỗi thiết kế có chủ đích.

Lỗ hổng #2 – Sequencer ghi dữ liệu sai lệch Contract Sequencer.sol lưu trữ lastValidStateRoot do sequencer gửi lên L1. Nhưng không có cơ chế challenge period cho state root. Điều này có nghĩa: nếu sequencer gửi một state root sai (ví dụ: thay đổi balance của một user), không ai có thể phản đối trong vòng 7 ngày (thời gian mà dự án tuyên bố là “fraud proof window”). Trên thực tế, window đó không tồn tại trong code. Sequencer có thể thoải mái gian lận mà không bị phát hiện. Đây là lý do tại sao tôi gọi “decentralized sequencing” là PowerPoint suốt 2 năm.
Lỗ hổng #3 – Oracle giá sử dụng nguồn duy nhất Đối với các giao dịch swap L2→L1, dự án sử dụng một oracle giá từ Uniswap V3 pool trên L1. Nhưng oracle này được cập nhật bởi chính sequencer. Nghĩa là: sequencer có thể thao túng giá trước khi gửi lên L1, tạo ra cơ hội arbitrage không công bằng. Tôi phát hiện rằng trong 3 tháng testnet, đã có 47 giao dịch giá bất thường với chênh lệch >5%, nhưng không được báo cáo. Dự án gọi đó là “lỗi do bot”.
Contrarian: Phần phe bò đúng Tôi phải thừa nhận: không phải mọi thứ đều xấu. SecureL2 có một trong những UX tốt nhất tôi từng thấy – thời gian xác nhận giao dịch dưới 1 giây, phí gas gần như bằng 0. Đội ngũ có trình độ kỹ thuật cao (từng làm tại một Big Tech). Nhưng chính xác vì vậy, việc họ “quên” thêm multisig cho hàm forceWithdraw không thể là vô tình. Đây là sự lựa chọn có ý thức: giữ quyền kiểm soát tối đa cho đến khi đạt được “decentralized” (mà có thể không bao giờ đạt). Nếu bạn là người dùng chỉ muốn một nền tảng nhanh, rẻ, và chấp nhận rằng team có thể rug – thì SecureL2 là lựa chọn tuyệt vời.
Takeaway: Trách nhiệm thuộc về ai? Khi tôi gửi báo cáo audit cho team, họ phản hồi: “Chúng tôi sẽ thêm multisig trong bản vá 2.0”. Bản vá chưa có lịch trình cụ thể. Thị trường giảm đang khiến mọi người mù quáng tìm kiếm lợi nhuận, nhưng sự an toàn thực sự không đến từ lời hứa. Có bao nhiêu người dùng sẽ kiểm tra contract trước khi deposit? Câu trả lời: gần như bằng 0. Và đó chính xác là lý do tại sao tôi vẫn có việc làm.
