Velkommen til Sherlock's Vulnerability Spotlight! Hver uke vil vi fremheve en virkningsfull sårbarhet våre forskere avdekket under en Sherlock-revisjon. Denne uken har vi et overdreven uttak via feilkonfigurasjon. Den ble funnet av @bin2chen, @TheCHADuke, iglyx, @tapired, @xiaoming9090 og @0xleastwood i @NotionalFinance V3-konkurransen.
Hvis currentBalance er 999 900 USDC og withdrawAmountExternal er 1 000 000 USDC, er det utilstrekkelig saldo i kontrakten, og ytterligere midler må tas ut fra pengemarkedet (f.eks.
Siden kontrakten allerede har 999 900 USDC, må bare ytterligere 100 USDC trekkes ut av pengemarkedet for å oppfylle uttaksforespørselen på 1 000 000 USDC
Imidlertid, i stedet for å ta ut 100 USDC fra pengemarkedet, trekker Notional 1 000 000 USDC fra markedet i henhold til oracle.getRedemptionCalldata(withdrawAmountExternal)-funksjonen. Som et resultat blir et overskudd på 999 900 USDC trukket tilbake fra pengemarkedet.
Hva er virkningen? Dette førte til at en overdreven mengde eiendeler gikk på tomgang i Notional og ikke genererte noen avkastning eller interesse i pengemarkedet, noe som førte til betydelig tap av avkastning for brukerne da de ville motta en lavere rente enn forventet og pådra seg tap av muligheter.
Angripere kan potensielt misbruke dette til å trekke midlene som Notional investerte i pengemarkedet, noe som fører til sorg og svimlende tap av avkastning/renter for protokollen.
Løsningen: I hovedsak, før løsningen, sa koden til orakelet: "Forbered trinn for å trekke ut alt brukeren ønsker fra pengemarkedet." Når den burde ha sagt: «Bare trekk det vi mangler fra pengemarkedet.»
Etter reparasjonen, for det tidligere eksemplet, forblir de 999 900 USDC som allerede holdes av kontrakten urørt og fortsetter å tjene avkastning, forbedre effektiviteten og bevare avkastningen for alle brukere.
Denne sårbarheten stammet fra en subtil logisk feil i hvordan uttaksbeløp ble beregnet og sendt. Ved å overse kontraktens eksisterende balanse, trakk systemet unødvendig for store midler fra pengemarkedet, noe som førte til kapitalineffektivitet og avkastningstap. Vi er stolte over å ha bidratt til å sikre Notional gjennom dette funnet. Når det absolutt må være sikkert, er Sherlock det riktige valget.
2,83K