Cái bug hôm qua, bài học hôm nay. #DeFi
Tuần trước, lập trình viên chính của giao thức Onyx – một nền tảng lending đang trong top 20 TVL trên Ethereum – đã đăng một dòng tweet gây chấn động: 'Tôi xin nhận toàn bộ trách nhiệm về hai lần audit thất bại liên tiếp trong tháng 5 và tháng 6. Không phải lỗi của team, không phải lỗi của công cụ. Là do tôi đã không kiểm tra kỹ logic tính lãi.' Câu nói đó khiến token ONYX giảm 12% trong 24 giờ, nhưng đồng thời mở ra một cuộc thảo luận sâu về cách chúng ta vận hành an toàn trong DeFi.
Context Onyx là một giao thức cho vay phi tập trung với hơn 2 tỷ USD TVL, nổi tiếng với thuật toán lãi suất biến động dựa trên cung cầu. Hai lần audit gần đây – một lần bởi đội ngũ nội bộ, một lần bởi công ty bảo mật hàng đầu ChainGuard – đều phát hiện ra lỗi logic trong hàm tính phí: một lỗi cho phép kẻ tấn công rút tài sản thế chấp mà không trả nợ, và một lỗi khác làm sai lệch tỷ lệ thanh lý khi thị trường biến động mạnh. May mắn là cả hai lỗi đều được vá trước khi bị khai thác, nhưng danh tiếng của Onyx bị ảnh hưởng nặng nề. Lập trình viên chính – người đã xây dựng phần lớn mã nguồn core – lên tiếng nhận lỗi, tương tự như cách tuyển thủ Oner của T1 nhận trách nhiệm về thất bại tại MSI và EWC.
Core Dựa trên kinh nghiệm audit của tôi, lỗi đầu tiên là một classic reentrancy qua callback ERC-777, mặc dù team đã có sẵn bộ đếm reentrancy. Vấn đề là bộ đếm không được đặt ở vị trí chính xác trong hàm withdraw. Lỗi thứ hai tinh vi hơn: một overflow trong phép tính lãi suất khi khối lượng vốn vay tăng đột biến. Cả hai đều do áp lực thời gian – Onyx đang chạy đua để ra mắt bản nâng cấp V2 trước mùa hè, và lập trình viên chính đã làm việc 16 giờ mỗi ngày trong suốt 6 tuần. Số liệu từ smart contract cho thấy có hơn 400 dòng code bị thay đổi trong 3 ngày cuối trước deadline, điều này giải thích tại sao các lỗi cơ bản lại lọt qua.
Phân tích on-chain: token ONYX phục hồi sau khi lập trình viên tweet, cho thấy cộng đồng đánh giá cao sự minh bạch. Tuy nhiên, dữ liệu giao dịch cho thấy lượng thanh khoản rút khỏi pool stablecoin của Onyx tăng 40% trong tuần đó. Điều này phản ánh một sự thật: lòng tin dễ mất nhưng khó lấy lại, ngay cả khi có lời xin lỗi chân thành.
Contrarian Góc nhìn phản trực giác: lỗi không phải do thiếu kỹ năng, mà do chu kỳ audit dày đặc. Onyx đã trải qua 3 audit trong 6 tháng (nội bộ, ChainGuard, và một audit độc lập khác). Mỗi audit đều tạo ra sửa đổi, và mỗi sửa đổi lại mở ra vector tấn công mới. Điểm mù bảo mật ở đây không nằm trong code, mà nằm trong lịch trình: không có khoảng nghỉ giữa các vòng audit để dev hồi phục và kiểm tra chéo. Thị trường tăng đang khiến mọi người FOMO vào tốc độ, và quên mất rằng code an toàn cần sự tỉnh táo. Yếu tố con người – sự kiệt sức (burnout) – là lỗ hổng lớn nhất không thể vá bằng smart contract.
Takeaway Liệu chúng ta có nên thiết kế lại quy trình audit để bao gồm 'nghỉ bắt buộc' giữa các vòng? Hay chấp nhận rằng mỗi lần tăng tốc là một lần đánh cược với số tiền của người dùng? Dữ liệu cho thấy các dự án có thời gian audit dãn cách ít nhất 2 tuần giữa các vòng có tỷ lệ lỗi nghiêm trọng thấp hơn 60% so với các dự án audit dồn dập. Đã đến lúc ngành DeFi cần một tiêu chuẩn mới: bảo vệ sức khỏe của chính những người viết code.