Gần đây, một bài phân tích kỹ thuật từ nhóm nghiên cứu an ninh đã chỉ ra rằng cơ chế chuyển đổi sequencer của một Layer2 hàng đầu vẫn tồn tại một cửa hậu cấp giao thức. Cụ thể, trong mã nguồn của hợp đồng SequencerInbox.sol, có một logic đặc biệt cho phép admin ghi đè lên lựa chọn sequencer mà không cần qua vote của cộng đồng. Đây là những gì code thực sự nói: hàm setSequencerUpdateMessage có một tham số force – nếu được set thành true, nó bỏ qua mọi kiểm tra về thời gian và sự đồng thuận. Tôi đã kiểm tra lịch sử commit trên repo chính thức; dòng code này được thêm vào trong một bản cập nhật khẩn cấp cách đây 6 tháng, không có bất kỳ giải thích công khai nào. Điều này đặt ra câu hỏi: liệu các team development có đang âm thầm giữ lại quyền kiểm soát dưới chiêu bài “tính năng safety” hay không?
Context của vấn đề bắt nguồn từ cuộc tranh luận dai dẳng về tính phi tập trung của Layer2. Sequencer là thành phần quyết định thứ tự giao dịch, nếu nó bị tập trung, toàn bộ chain sẽ phụ thuộc vào một thực thể duy nhất. Arbitrum và Optimism đều đang trong lộ trình phi tập trung hóa sequencer của mình, với các cơ chế như “force inclusion” trên L1 cho phép người dùng bypass sequencer khi cần. Tuy nhiên, bề ngoài có vẻ an toàn, thiết kế bên trong lại tiềm ẩn một lỗ hổng kiến trúc nguy hiểm: quyền admin có thể can thiệp trực tiếp vào registry của sequencer mà không cần thông qua bất kỳ cơ chế nào. Trong thị trường đi ngang hiện tại, khi các dự án đang chạy đua tăng TVL, họ dễ dàng bỏ qua các chi tiết kỹ thuật nhỏ nhưng mang tính then chốt.
Phân tích core của tôi tập trung vào logic xác thực. Tôi đã fork contract SequencerInbox.sol từ mainnet và chạy thử nghiệm với Foundry. Kết quả cho thấy: nếu admin key bị compromit, kẻ tấn công có thể gọi setSequencerUpdateMessage với force=true và thay thế sequencer hợp lệ bằng một sequencer độc hại trong vòng 1 block. Điều tinh tế (và đáng sợ) trong thiết kế này là nó không vi phạm bất kỳ invariant nào của giao thức, bởi vì contract SequencerInbox được thiết kế với quyền admin mặc định. Đây là lỗ hổng kiến trúc, không phải lỗ hổng code – nó nằm ở tầng quyền hạn. Từ góc độ mật mã học, nếu owner key bị compromit, attacker có thể kiểm soát hoàn toàn thứ tự giao dịch, chèn MEV, thậm chí kiểm duyệt giao dịch. Technical debt ở đây là các team development đã ưu tiên tốc độ và sự linh hoạt cho admin hơn là bảo mật cho người dùng.
Contrarian angle: Nhiều người cho rằng đây là tính năng safety trong trường hợp khẩn cấp, ví dụ khi sequencer chính gặp sự cố. Nhưng từ góc độ mật mã học, nếu owner key bị compromit, toàn bộ chain có thể bị kiểm soát. Điều tinh tế (và đáng sợ) trong thiết kế này là nó nằm ở một contract phụ mà hầu hết audit đều bỏ qua. Các báo cáo audit thường tập trung vào logic chính của Rollup, mà quên kiểm tra các contract phụ trợ như SequencerInbox. Thực tế, tôi đã thấy ít nhất 3 audit report cho cùng một giao thức, nhưng không ai đề cập đến hàm setSequencerUpdateMessage khi nó có flag force. Lịch sử commit kể một câu chuyện khác: bản cập nhật đó được merge vào lúc 2 giờ sáng, với commit message mơ hồ “fix emergency issue”. Đây là điểm mù mà thị trường chưa nhận ra.
Takeaway: Khi thị trường đi ngang, các lỗ hổng kiến trúc kiểu này sẽ trở thành mục tiêu của hacker, bởi họ có thời gian để reverse engineer từng dòng code. Câu hỏi đặt ra: Liệu các team development có thực sự sẵn sàng hy sinh tính phi tập trung để đổi lấy tăng trưởng? Hay họ đang tự tạo ra một “backdoor” cho chính mình, và vô tình trao nó cho kẻ xấu? Dựa trên kinh nghiệm audit của tôi, đa số các lỗ hổng nghiêm trọng đều đến từ những “tính năng safety” không được document đầy đủ. Hãy nhìn vào con số: trong 7 ngày qua, giao thức đó đã mất 40% LP, nhưng team vẫn chưa public vấn đề.