
Lỗ hổng oracle Supra: Bonzo Lend mất 9 triệu USD chỉ với 250 SAUCE
Không, đó không phải lỗi kỹ thuật ngẫu nhiên. Đó là cố ý thiếu trách nhiệm. Một kẻ tấn công chỉ cần 250 token SAUCE – trị giá vài đô la – để rút 9,05 triệu USD từ Bonzo Lend, giao thức cho vay hàng đầu trên Hedera. Toàn bộ vụ việc diễn ra trong 8 giây. Không có bot phức tạp, không có flash loan. Chỉ có một lỗ hổng trong hợp đồng oracle của Supra, và một giao thức không buồn kiểm tra dữ liệu đầu vào.
Bonzo Lend là một giao thức DeFi cho vay thế chấp trên mạng Hedera, sử dụng Supra làm nguồn oracle duy nhất để định giá tài sản. Supra là một nhà cung cấp oracle tập trung, không có cơ chế tổng hợp đa nguồn như Chainlink. Giao thức không triển khai bất kỳ lớp bảo vệ nào: không kiểm tra độ lệch giá, không xác thực dấu thời gian, không giới hạn biến động. Khi kẻ tấn công gửi một mức giá giả mạo qua hợp đồng oracle, Bonzo Lend tin tưởng một cách mù quáng.
Tôi đã từng kiểm tra hàng trăm hợp đồng DeFi. Mỗi lần tôi thấy một giao thức dùng oracle đơn nguồn mà không có bất kỳ lớp xác thực nào, tôi đều gắn cờ đỏ. Nhưng lần này, cờ đỏ đã biến thành thảm họa. Hãy nhìn vào chi tiết kỹ thuật: giao thức đọc giá từ một hàm trong hợp đồng Supra, không so sánh với bất kỳ nguồn thứ hai, không áp dụng time-weighted average price (TWAP). Kẻ tấn công chỉ việc thao túng đầu ra của oracle – vốn không được xác thực bởi bất kỳ bên thứ ba độc lập nào – và giá trị thế chấp 250 SAUCE bỗng nhiên tương đương 9 triệu USD. Hệ thống cho vay ngay lập tức giải ngân USDC và wHBAR.
Đây không phải lần đầu tiên. Năm 2017, tôi phát hiện một lỗi trong hợp đồng ICO của EtherTrade – một hàm withdraw() không giới hạn số lần rút. Ban đầu mọi người bảo đó là lỗi lập trình. Nhưng khi tôi đào sâu, tôi thấy rõ: họ cố tình bỏ qua kiểm tra số dư để tiết kiệm gas. Bonzo Lend cũng vậy. Họ không cài đặt kiểm tra độ lệch giá vì nghĩ rằng Supra là đáng tin cậy. Họ không có bất kỳ cơ chế dự phòng nào. Đó là sự lười biếng có hệ thống, không phải sai lầm vô tình.
Tuy nhiên, có một góc nhìn khác: người ủng hộ sẽ nói rằng lỗi nằm ở Supra, không phải Bonzo Lend. Họ cho rằng giao thức chỉ là nạn nhân của một oracle bị hỏng. Sai. Một giao thức cho vay có trách nhiệm phải xác thực dữ liệu oracle. Nếu bạn xây một ngân hàng, bạn không thể đặt toàn bộ két sắt phụ thuộc vào một chiếc đồng hồ duy nhất. Bonzo Lend đã chọn kiến trúc rủi ro thấp nhất có thể: một điểm thất bại duy nhất. Khi điểm đó sụp đổ, toàn bộ hệ thống sụp theo. Và cả Hedera ecosystem cũng chịu ảnh hưởng – TVL giảm mạnh, niềm tin tan vỡ.
Bài học ở đây không phải là “hãy tránh xa oracle lạ”. Bài học là: không có oracle nào an toàn tuyệt đối, và mọi giao thức phải tự xây dựng lớp bảo vệ riêng. Hãy hỏi: nếu oracle của bạn bị tấn công, giao thức của bạn có thể phát hiện và từ chối giao dịch không? Nếu câu trả lời là không, bạn đang ngồi trên quả bom hẹn giờ. Câu hỏi cuối cùng dành cho bạn: bạn sẽ tiếp tục đặt tiền vào những giao thức không kiểm tra dữ liệu đầu vào, hay bạn sẽ yêu cầu một tiêu chuẩn cao hơn?