Tópicos populares
#
Bonk Eco continues to show strength amid $USELESS rally
#
Pump.fun to raise $1B token sale, traders speculating on airdrop
#
Boop.Fun leading the way with a new launchpad on Solana.
Bem-vindo ao Spotlight de Vulnerabilidades do Sherlock! A cada semana, destacaremos uma vulnerabilidade impactante que nossos pesquisadores descobriram durante uma auditoria do Sherlock.
Esta semana temos uma retirada excessiva devido a uma má configuração.
Foi encontrada por @bin2chen, @TheCHADuke, iglyx, @tapired, @xiaoming9090 e @0xleastwood no concurso @NotionalFinance V3.

Se o currentBalance for 999,900 USDC e o withdrawAmountExternal for 1,000,000 USDC, então não há saldo suficiente no contrato, e fundos adicionais precisam ser retirados do mercado monetário (por exemplo, Compound).

Uma vez que o contrato já possui 999.900 USDC, apenas mais 100 USDC precisam ser retirados do mercado monetário para atender ao pedido de retirada de 1.000.000 USDC.
No entanto, em vez de retirar 100 USDC do mercado monetário, a Notional retira 1.000.000 USDC do mercado de acordo com a função oracle.getRedemptionCalldata(withdrawAmountExternal). Como resultado, um excesso de 999.900 USDC está a ser retirado do mercado monetário.
Qual é o impacto?
Isto levou a uma quantidade excessiva de ativos parados na Notional e a não gerar quaisquer retornos ou juros no mercado monetário, o que resultou numa perda significativa de rendimento para os utilizadores, uma vez que receberiam uma taxa de juro inferior à esperada e incorreriam em perda de oportunidade.
Os atacantes poderiam potencialmente abusar disso para retirar os fundos que a Notional investiu no mercado monetário, levando a danos e a uma perda impressionante de retornos/juros para o protocolo.
A Solução:
Essencialmente, antes da solução, o código estava a dizer ao oráculo: "Prepare os passos para retirar tudo o que o utilizador deseja do mercado monetário."
Quando deveria ter dito: "Apenas retire o que nos falta do mercado monetário."

Após a correção, para o exemplo anterior, os 999.900 USDC já detidos pelo contrato permanecem intocados e continuam a gerar rendimento, melhorando a eficiência e preservando os retornos para todos os utilizadores.
Esta vulnerabilidade resultou de uma falha lógica subtil na forma como os montantes de levantamento eram calculados e transmitidos. Ao ignorar o saldo existente do contrato, o sistema retirou desnecessariamente fundos excessivos do mercado monetário, levando a ineficiências de capital e perda de rendimento.
Estamos orgulhosos de ter ajudado a garantir a Notional através desta descoberta. Quando é absolutamente necessário ser seguro, Sherlock é a escolha certa.
2,84K
Top
Classificação
Favoritos