Audit xong rồi? Hãy đợi vài block.
250 SAUCE token – giá trị chưa tới 10 USD. Với số tài sản thế chấp đó, một địa chỉ đã vay thành công 9 triệu USD từ Bonzo Lend, giao thức DeFi hàng đầu trên Hedera. Trong 8 giây, pool thanh khoản cạn kiệt. Không có flash loan, không có re-entrancy. Chỉ một lỗ hổng xác thực duy nhất nơi oracle Supra.
Tôi đã audit hơn 50 dự án DeFi trong 5 năm qua. Lần nào cũng vậy: khi tôi thấy một giao thức phụ thuộc vào một oracle duy nhất mà không có bất kỳ lớp kiểm tra giá nào, tôi biết đó là bom nổ chậm. Hôm nay quả bom đã nổ trên Hedera.
Context: Bonzo Lend là ai?
Bonzo Lend là giao thức cho vay trên Hedera, tương tự Aave hay Compound nhưng dành riêng cho hệ sinh thái HBAR. Người dùng gửi tài sản (wHBAR, USDC, SAUCE…) để kiếm lãi, hoặc thế chấp để vay token khác. Giao thức sử dụng Supra làm oracle duy nhất để lấy giá thị trường. Supra là một oracle cross-chain tương đối mới, hứa hẹn tốc độ cao và chi phí thấp.
Vấn đề: khi một oracle có quyền quyết định giá trị tài sản thế chấp, nếu oracle bị thao túng, toàn bộ logic vay mượn sụp đổ. Đây là điều cơ bản nhất trong thiết kế hệ thống tài chính phi tập trung. Vậy mà Bonzo Lend đã bỏ qua.
Core: Phân tích kỹ thuật line-by-line
Hãy nhìn vào dòng code này (mã giả dựa trên mô tả sự kiện):
function getPrice(address token) external view returns (uint256) {
(uint256 price, uint256 timestamp) = ISupraOracle(oracle).getPrice(token);
require(timestamp > block.timestamp - 1 hours, "stale price");
return price;
}
Đoạn code trên kiểm tra timestamp, nhưng không kiểm tra độ lệch giá so với block trước. Điều gì xảy ra nếu kẻ tấn công có thể gửi một giá giả mạo tới oracle contract? Nếu oracle contract không yêu cầu chữ ký từ nhiều validator, hoặc không có cơ chế đồng thuận, một giao dịch duy nhất có thể đẩy giá SAUCE lên 1000x.
Trong vụ Bonzo Lend, kẻ tấn công đã khai thác chính xác điểm này. Họ gửi một price update giả mạo tới Supra contract (có lẽ thông qua một lỗ hổng trong logic xác thực của Supra). Ngay lập tức, giá SAUCE trên oracle tăng vọt. Với 250 SAUCE (vài USD) làm tài sản thế chấp, giá trị thế chấp ảo trở thành hàng triệu USD. Kẻ tấn công vay toàn bộ USDC và wHBAR có sẵn trong pool. Toàn bộ quá trình diễn ra trong 8 giây. Cấu trúc này có phù hợp mục tiêu không? Không. Bonzo Lend mục tiêu là cho vay an toàn, nhưng lại thiếu lớp bảo vệ cơ bản nhất: price deviation check.
So sánh với Chainlink: Chainlink sử dụng mạng lưới node phân tán, mỗi node gửi giá trị riêng, hợp đồng tổng hợp bằng median. Nếu một node gửi giá bất thường, nó bị loại bỏ. Ngoài ra, Chainlink có cơ chế deviation threshold: nếu giá thay đổi quá nhanh so với phiên trước, nó không được chấp nhận. Bonzo Lend không có gì cả.
Tôi đã từng audit một giao thức tương tự trên Ethereum vào năm 2021. Họ dùng một oracle tập trung duy nhất từ một bên thứ ba. Tôi báo cáo lỗ hỏng ngay lập tức. Họ bảo "nhưng oracle đó đã được kiểm toán bởi công ty A". Tôi trả lời: "Kiểm toán không kiểm tra được logic kinh doanh của bạn". 6 tháng sau, họ bị tấn công tương tự. Bonzo Lend cũng vậy – họ dựa vào niềm tin mù quáng vào Supra. DeFi bảo mật: không có điểm kết thúc.
Contrarian: Đổ lỗi cho Bonzo Lend là đúng, nhưng chưa đủ
Hầu hết các bài viết hiện tại đều chỉ trích Bonzo Lend vì thiếu chốt chặn. Đúng. Nhưng tôi muốn đặt câu hỏi ngược: Tại sao Supra oracle cho phép một giao dịch duy nhất thay đổi giá mà không có xác thực từ bên thứ ba? Supra quảng cáo là "oracle phi tập trung", nhưng thực tế, ai có quyền gửi price update? Nếu đó là một multisig hay một EOA duy nhất, thì đó là tập trung. Lỗ hổng xảy ra ở cấp độ oracle contract, không phải ở Bonzo Lend contract. Bonzo Lend chỉ là nạn nhân của một hạ tầng không an toàn.
Tuy nhiên, với tư cách auditor, tôi không thể bỏ qua trách nhiệm của Bonzo Lend. Khi bạn xây nhà trên nền đất yếu, bạn phải gia cố móng. Giao thức DeFi có trách nhiệm kiểm tra dữ liệu đầu vào, không phải tin tưởng mù quáng. Họ có thể dễ dàng thêm một dòng kiểm tra: require(newPrice < lastPrice * 110 / 100, 'price jump'); – một dòng code đã ngăn chặn vụ tấn công. Nhưng họ không làm.
Takeaway: Dự báo lỗ hổng
Sự kiện này sẽ không phải là cuối cùng. Với thị trường tăng, hàng trăm dự án DeFi mới sẽ xuất hiện, vội vã ra mắt mà không có audit bảo mật sâu. Tôi dự đoán trong 6 tháng tới, ít nhất 3 vụ tấn công tương tự sẽ xảy ra trên các chain nhỏ, nơi các giao thức phụ thuộc vào oracle kém uy tín. Hedera có thể sẽ mất đi một phần TVL đáng kể, nhưng nếu Bonzo Lend và Supra nhanh chóng khắc phục, họ có thể lấy lại lòng tin. Câu hỏi đặt ra: Lần tới, ai sẽ là nạn nhân? Và liệu bạn có còn tiền trong pool không?
Audit xong rồi? Hãy đợi vài block.