Chào mừng bạn đến với Spotlight Lỗ hổng của Sherlock! Mỗi tuần, chúng tôi sẽ làm nổi bật một lỗ hổng quan trọng mà các nhà nghiên cứu của chúng tôi phát hiện trong một cuộc kiểm toán Sherlock. Tuần này, chúng tôi có một trường hợp rút tiền quá mức do cấu hình sai. Nó đã được phát hiện bởi @bin2chen, @TheCHADuke, iglyx, @tapired, @xiaoming9090, và @0xleastwood trong cuộc thi @NotionalFinance V3.
Nếu currentBalance là 999,900 USDC và withdrawAmountExternal là 1,000,000 USDC, thì số dư trong hợp đồng không đủ, và cần phải rút thêm tiền từ thị trường tiền tệ (ví dụ: Compound).
Vì hợp đồng đã có 999,900 USDC, chỉ cần rút thêm 100 USDC từ thị trường tiền tệ để thực hiện yêu cầu rút 1,000,000 USDC.
Tuy nhiên, thay vì rút 100 USDC từ thị trường tiền tệ, Notional rút 1.000.000 USDC từ thị trường theo hàm oracle.getRedemptionCalldata(withdrawAmountExternal). Kết quả là, một số lượng thừa 999.900 USDC đang được rút ra từ thị trường tiền tệ.
Tác động là gì? Điều này đã dẫn đến một lượng tài sản quá mức không hoạt động trong Notional và không tạo ra bất kỳ lợi nhuận hay lãi suất nào trên thị trường tiền tệ, điều này đã dẫn đến việc người dùng chịu tổn thất đáng kể về lợi suất khi họ nhận được lãi suất thấp hơn mong đợi và phải chịu tổn thất cơ hội.
Các kẻ tấn công có thể lợi dụng điều này để rút tiền mà Notional đã đầu tư vào thị trường tiền tệ, dẫn đến việc gây rối và tổn thất đáng kể về lợi nhuận/lãi suất cho giao thức.
Giải pháp: Về cơ bản, trước khi sửa lỗi, mã đã nói với oracle: "Chuẩn bị các bước để rút mọi thứ mà người dùng muốn từ thị trường tiền tệ." Khi nó lẽ ra phải nói, "Chỉ rút những gì chúng ta còn thiếu từ thị trường tiền tệ."
Sau khi sửa lỗi, đối với ví dụ trước đó, 999,900 USDC đã được hợp đồng nắm giữ sẽ không bị ảnh hưởng và tiếp tục kiếm lợi suất, cải thiện hiệu quả và bảo tồn lợi nhuận cho tất cả người dùng.
Lỗ hổng này xuất phát từ một lỗi logic tinh vi trong cách tính toán và truyền các khoản rút tiền. Bằng cách bỏ qua số dư hiện có của hợp đồng, hệ thống đã không cần thiết rút quá nhiều tiền từ thị trường tiền tệ, dẫn đến sự kém hiệu quả về vốn và mất mát lợi suất. Chúng tôi tự hào đã giúp bảo mật Notional thông qua phát hiện này. Khi cần phải bảo mật tuyệt đối, Sherlock là sự lựa chọn đúng đắn.
2,84K