Witamy w Sherlock's Vulnerability Spotlight! Co tydzień będziemy podkreślać istotną lukę, którą nasi badacze odkryli podczas audytu Sherlocka. W tym tygodniu mamy do czynienia z nadmiernym wypłacaniem środków z powodu błędnej konfiguracji. Zostało to odkryte przez @bin2chen, @TheCHADuke, iglyx, @tapired, @xiaoming9090 i @0xleastwood w konkursie @NotionalFinance V3.
Jeśli currentBalance wynosi 999,900 USDC, a withdrawAmountExternal to 1,000,000 USDC, to w kontrakcie brakuje wystarczających środków, a dodatkowe fundusze muszą zostać wypłacone z rynku pieniężnego (np. Compound).
Ponieważ kontrakt ma już 999 900 USDC, tylko dodatkowe 100 USDC musi zostać wypłacone z rynku pieniężnego, aby zrealizować prośbę o wypłatę w wysokości 1 000 000 USDC.
Jednak zamiast wypłacać 100 USDC z rynku pieniężnego, Notional wypłaca 1 000 000 USDC z rynku zgodnie z funkcją oracle.getRedemptionCalldata(withdrawAmountExternal). W rezultacie z rynku pieniężnego wypłacane jest nadmiarowe 999 900 USDC.
Jaki jest wpływ? Doprowadziło to do nadmiernej ilości aktywów bezczynnych w Notional, które nie generowały żadnych zysków ani odsetek na rynku pieniężnym, co spowodowało znaczną utratę zysku dla użytkowników, ponieważ otrzymywali niższą stopę procentową niż oczekiwano i ponosili straty z tytułu utraconych możliwości.
Napastnicy mogą potencjalnie wykorzystać to do wyciągnięcia funduszy, które Notional zainwestował w rynek pieniężny, co prowadzi do griefingu i ogromnych strat w zwrotach/odsetkach dla protokołu.
Rozwiązanie: Zasadniczo, przed poprawką, kod mówił do orakula: "Przygotuj kroki do wypłaty wszystkiego, co użytkownik chce z rynku pieniężnego." Kiedy powinien był powiedzieć: "Wyciągnij tylko to, czego nam brakuje z rynku pieniężnego."
Po naprawie, w przypadku wcześniejszego przykładu, 999 900 USDC już posiadanych przez kontrakt pozostaje nietkniętych i nadal generuje zyski, poprawiając efektywność i zachowując zwroty dla wszystkich użytkowników.
Ta podatność wynikała z subtelnej wady logicznej w sposobie obliczania i przekazywania kwot wypłat. Ignorując istniejący bilans kontraktu, system niepotrzebnie pobierał nadmierne środki z rynku pieniężnego, co prowadziło do nieefektywności kapitałowej i utraty zysków. Jesteśmy dumni, że mogliśmy pomóc zabezpieczyć Notional dzięki temu odkryciu. Kiedy bezpieczeństwo jest absolutnie konieczne, Sherlock to właściwy wybór.
2,84K