Selamat datang di Sorotan Kerentanan Sherlock! Setiap minggu, kami akan menyoroti kerentanan berdampak yang ditemukan oleh peneliti kami selama audit Sherlock. Minggu ini kami memiliki penarikan yang berlebihan karena kesalahan konfigurasi. Itu ditemukan oleh @bin2chen, @TheCHADuke, iglyx, @tapired, @xiaoming9090, dan @0xleastwood dalam kontes @NotionalFinance V3.
Jika currentBalance adalah 999.900 USDC dan withdrawAmountExternal adalah 1.000.000 USDC, maka saldo tidak mencukupi dalam kontrak, dan dana tambahan perlu ditarik dari pasar uang (misalnya, Compound).
Karena kontrak sudah memiliki 999.900 USDC, hanya 100 USDC tambahan yang perlu ditarik dari pasar uang untuk memenuhi permintaan penarikan sebesar 1.000.000 USDC
Namun, alih-alih menarik 100 USDC dari pasar uang, Notional menarik 1.000.000 USDC dari pasar sesuai fungsi oracle.getRedemptionCalldata(withdrawAmountExternal). Akibatnya, kelebihan 999.900 USDC ditarik dari pasar uang.
Apa dampaknya? Hal ini menyebabkan jumlah aset yang berlebihan menganggur di Notional dan tidak menghasilkan pengembalian atau minat apa pun di pasar uang, yang menyebabkan hilangnya hasil yang signifikan bagi pengguna karena mereka akan menerima suku bunga yang lebih rendah dari yang diharapkan dan mengalami kerugian peluang.
Penyerang berpotensi menyalahgunakan ini untuk menarik dana yang diinvestasikan Notional di pasar uang, yang menyebabkan kesedihan dan hilangnya pengembalian/bunga yang mengejutkan untuk protokol.
Perbaikannya: Pada dasarnya, sebelum perbaikan, kode tersebut mengatakan kepada oracle: "Persiapkan langkah-langkah untuk menarik semua yang diinginkan pengguna dari pasar uang." Ketika seharusnya dikatakan, "Tarik saja apa yang kita lewatkan dari pasar uang."
Setelah perbaikan, untuk contoh sebelumnya, 999.900 USDC yang sudah dipegang oleh kontrak tetap tidak tersentuh dan terus menghasilkan hasil, meningkatkan efisiensi, dan mempertahankan pengembalian untuk semua pengguna.
Kerentanan ini berasal dari cacat logika halus dalam cara menghitung dan melewati jumlah penarikan. Dengan mengabaikan saldo kontrak yang ada, sistem tidak perlu menarik dana berlebihan dari pasar uang, yang menyebabkan inefisiensi modal dan kehilangan hasil. Kami bangga telah membantu mengamankan Notional melalui penemuan ini. Ketika benar-benar perlu aman, Sherlock adalah pilihan yang tepat.
2,83K