Välkommen till Sherlock's Vulnerability Spotlight! Varje vecka kommer vi att lyfta fram en effektfull sårbarhet som våra forskare upptäckte under en Sherlock-granskning. Den här veckan har vi ett överdrivet uttag via felkonfiguration. Den hittades av @bin2chen, @TheCHADuke, iglyx, @tapired, @xiaoming9090 och @0xleastwood i @NotionalFinance V3-tävlingen.
Om currentBalance är 999 900 USDC och withdrawAmountExternal är 1 000 000 USDC, finns det otillräckligt saldo i kontraktet och ytterligare medel måste tas ut från penningmarknaden (t.ex. Compound).
Eftersom kontraktet redan har 999 900 USDC behöver endast ytterligare 100 USDC tas ut från penningmarknaden för att uppfylla begäran om uttag på 1 000 000 USDC
Men istället för att ta ut 100 USDC från penningmarknaden, tar Noional ut 1 000 000 USDC från marknaden enligt funktionen oracle.getRedemptionCalldata(withdrawAmountExternal). Som ett resultat tas ett överskott på 999 900 USDC ut från penningmarknaden.
Vad är effekten? Detta ledde till en alltför stor mängd tillgångar som gick på tomgång i Nominellt och inte genererade någon avkastning eller ränta på penningmarknaden, vilket ledde till en betydande förlust av avkastning för användarna eftersom de skulle få en lägre ränta än väntat och drabbas av möjlighetsförluster.
Angripare kan potentiellt missbruka detta för att dra tillbaka de medel som Noional investerat på penningmarknaden, vilket leder till sorg och häpnadsväckande förlust av avkastning/ränta för protokollet.
Lösningen: I huvudsak, före korrigeringen, sa koden till oraklet: "Förbered steg för att ta ut allt som användaren vill ha från penningmarknaden." När det borde ha sagt: "Ta bara bort det vi saknar från penningmarknaden."
Efter korrigeringen, för det tidigare exemplet, förblir de 999 900 USDC som redan innehas av kontraktet orörda och fortsätter att tjäna avkastning, förbättra effektiviteten och bevara avkastningen för alla användare.
Denna sårbarhet härrörde från ett subtilt logiskt fel i hur uttagsbelopp beräknades och godkändes. Genom att förbise kontraktets befintliga saldo drog systemet i onödan ut för stora mängder pengar från penningmarknaden, vilket ledde till kapitalineffektivitet och avkastningsförluster. Vi är stolta över att ha hjälpt till att säkra Notional genom denna upptäckt. När det absolut måste vara säkert är Sherlock det rätta valet.
2,85K