Euler Finance Incident Post-Mortem

Mar 15 2023
Este artigo destina-se a analisar o incidente da Euler Finance ocorrido em 13 de março aproximadamente às 08:50 UTC de maneira imparcial e identificar a causa raiz. Análise de vulnerabilidade A vulnerabilidade que foi explorada decorre de como a Euler Finance permite que as doações sejam realizadas sem uma verificação adequada da integridade da conta.
omniscia.io

Este artigo destina-se a analisar o incidente da Euler Finance ocorrido em 13 de março aproximadamente às 08:50 UTC de maneira imparcial e identificar a causa raiz.

Análise de Vulnerabilidade

A vulnerabilidade que foi explorada decorre de como a Euler Finance permite que as doações sejam realizadas sem uma verificação de integridade da conta adequada.

O código vulnerável foi introduzido no eIP-14 ¹, que introduziu várias alterações em todo o Ecossistema Euler. A falha está na primeira alteração realizada na ETokenimplementação ( EToken::donateToReservesfeature ²).

A lógica dentro do Liquidationmódulo tentará pagar a dívida total do infrator, no entanto, se a garantia que ele possui não satisfizer o rendimento de pagamento esperado, o sistema assume como padrão qualquer garantia que o usuário tenha ³.

A suposição desse bloco de código afirma que a garantia disponível de um mutuário será insuficiente apenas quando:

Isso pode acontecer quando o mutuário tem várias garantias e apreender tudo isso não trará o infrator de volta à solvência

Essa garantia de segurança não é sustentada pelo mecanismo de doação que permite ao usuário criar “dívida incobrável” na forma de alavancagem sem garantia ao doar suas ETokenunidades sem afetar seu DTokensaldo⁴.

Problema central

O protocolo Euler Finance permite que seus usuários criem alavancagem artificial cunhando e depositando ativos na mesma transação via EToken::mint. Esse mecanismo permite que tokens sejam cunhados que excedam a garantia mantida pelo próprio protocolo Euler Finance.

O mecanismo de doação introduzido pela Euler Finance no eIP-14 ¹ ( EToken::donateToReserves) permite que um usuário doe seu saldo para o reserveBalancetoken com o qual está negociando. A falha está em não realizar nenhum exame de saúde na conta que está realizando a doação.

Como uma doação fará com que a dívida de um usuário ( DToken) permaneça inalterada enquanto seu ETokensaldo de patrimônio ( ) diminui, uma liquidação de sua conta fará com que uma parte das DTokenunidades permaneça com o usuário, criando assim dívidas incobráveis.

A falha acima permite que o atacante crie uma posição superalavancada e liquide-a no mesmo bloco, fazendo-a artificialmente ir “submersa”.

Quando o violatorpróprio liquida, é aplicado um desconto percentual que fará com que ele liquidatorincorra em uma parte significativa das ETokenunidades com desconto, garantindo que o mesmo fique “acima d'água” e contraia apenas a dívida correspondente à garantia que irá adquirir .

O resultado final é um violatorcom uma quantidade significativa de “dívida inadimplente” ( DToken) e liquidatorcom uma garantia excessiva de sua dívida ( DToken> EToken) devido aos incentivos de liquidação baseados em porcentagem que o Protocolo de Euler possui ⁵. Conforme evidenciado na própria operação⁶, o desconto máximo de 20% foi aplicado durante a liquidação do ataque.

cenário de ataque

Para que o invasor pudesse se liquidar, ele precisava implantar pelo menos dois contratos para explorar a vulnerabilidade. A transação de ataque ⁶ enviada aproximadamente em 01/02/2023 06:29:18 UTC invoca um contrato que foi implantado em uma transação anterior⁷.

Este contrato executa as seguintes etapas durante a execução da transação de ataque:

a. Contrato Primário:

  • Adquira um empréstimo flash DAI de 30m da AAVE V2
  • Implante os dois contratos ( violator⁸& liquidator⁹) para o ataque
  • Transfira o saldo total do empréstimo de 30m DAI para oviolator
  • Deposite 20m DAI no DAI ETokenda Euler Finance, recebendo ~19,56m eDAItokens
  • Crie uma eDAIalavanca artificial de 200m, cunhando ~195,68m eDAIe 200m dDAIpara oviolator
  • Reembolsar 10m DAI na violatorposição do, fazendo com que seu dDAIsaldo vá para 190m
  • Crie mais 200m de alavancagem artificial eDAI, cunhando ~195,68m eDAIe 200m dDAIpara oviolator
  • Doe 100m eDAIpara a reserva doEToken
  • eDAI: ~310,93m
  • dDAI: 390m

Conforme dito anteriormente, o Liquidationmódulo liquidará até o saldo da garantia do usuário. O liquidatorpode, portanto, liquidar o violator, incorrendo em seu eDAIsaldo total de ~ 310,93m, mas apenas uma parte de seu dDAIsaldo, ainda mais exacerbado pelo desconto de liquidação da Euler Finance⁵.

Como o desconto máximo será aplicado a esta posição devido ao quão baixo é seu nível de saúde, o saldo liquidatorincorrerá em ~ 310,93m com uma taxa de conversão de tokens por . Em última análise, isso avaliará um saldo pós-taxa de ~ 259,31 milhões.eDAI1.25 eDAIdDAIdDAI

liquidatorContrato:

  • Liquidar a posição, adquirindo ~310,93m eDAItokens e ~259,31m dDAItokens
  • Retire toda a reserva de DAIfichas queimando as eDAIfichas correspondentes

Como tal, uma taxa de câmbio de aproximadamente 0,97 eDAIper DAIé utilizada para o resgate. Como o usuário já está “acima da água” devido ao desconto máximo de liquidação de 20% aplicado durante sua liquidação, ele pode “queimar” os ~38m eDAInecessários para liberar os ~38,9m DAIretidos pelo contrato.

Por fim, o invasor conseguiu reter os seguintes ativos após a execução da transação:

  • +~8,877,507 DAI=~8,779,854.423 USD

Podemos avaliar o impacto financeiro do DAIativo e calcular um lucro estimado de aproximadamente ~8,779,854.423 USD13/03/2023 12:42:00 UTC.

O ataque foi replicado para vários outros ativos. Como tal, o aviso de depósito aplica-se aos seguintes ETokenativos : DAI,WETH

Auditoria de segurança

A Omniscia realizou várias auditorias de segurança do protocolo Euler Finance. As mudanças em questão, porém, foram introduzidas no eIP-14 . Conforme evidenciado no próprio quadro de mensagens, a Omniscia realizou uma auditoria apenas do componente de integração do Chainlink que está disponível publicamente aqui .

O EToken::donateToReserverecurso que está no cerne dessa vulnerabilidade não estava no escopo de nenhuma auditoria realizada pela Omniscia. Dessa forma, o código que causa a vulnerabilidade nunca esteve no escopo de nenhuma auditoria realizada por nossa equipe.

A função donateToReserves foi auditada pela equipe Sherlock em julho de 2022. Euler Finance e Sherlock confirmaram que Euler tinha uma política de cobertura ativa com Sherlock no momento da exploração.

Conclusão

O ataque, em última análise, surgiu de um mecanismo de doação incorreto e não levou em conta a saúde da dívida do doador, permitindo-lhe criar uma DTokendívida não garantida que nunca será liquidada.

Fontes

  1. Proposta de Melhoria de Euler 14:https://forum.euler.finance/t/eip-14-contract-upgrades/305
  2. Proposta de Melhoria de Euler 14 Delta:https://euler-xyz.github.io/euler-contracts-upgrade-diffs/eip14/EToken.html
  3. Lógica padrão de garantia de Euler Liquidator:https://github.com/euler-xyz/euler-contracts/blob/fa9398728165676a5666939d8c34a7578d8e1919/contracts/modules/Liquidation.sol#L139-L151
  4. ETokenMecanismo de Doação defeituoso de Euler :https://github.com/euler-xyz/euler-contracts/blob/fa9398728165676a5666939d8c34a7578d8e1919/contracts/modules/EToken.sol#L356-L386
  5. Desconto de liquidação da Euler:https://docs.euler.finance/euler-protocol/eulers-default-parameters#maximum-liquidation-discount
  6. Link de Transação de Ataque Etherscan:https://etherscan.io/tx/0xc310a0affe2169d1f6feec1c63dbc7f7c62a887fa48795d327d4d2da2d6b111d
  7. Endereço Etherscan do Contrato Primário:https://etherscan.io/address/0xebc29199c817dc47ba12e3f86102564d640cbf99
  8. Endereço Etherscan do Violador do Contrato:https://etherscan.io/address/0x583c21631c48d442b5c0e605d624f54a0b366c72
  9. Endereço Etherscan do contrato do liquidante:https://etherscan.io/address/0xa0b3ee897f233f385e5d61086c32685257d4f12b
  10. BaseLogicCálculo da taxa de câmbio de Euler :https://github.com/euler-xyz/euler-contracts/blob/fa9398728165676a5666939d8c34a7578d8e1919/contracts/BaseLogic.sol#L292-L296

Fundada no início de 2021 por veteranos de segurança cibernética de blockchain, a omniscia.io é pioneira em segurança Web3, utilizando anos de experiência, desenvolvendo ferramentas proprietárias e uma abordagem testada e comprovada para proteger contratos inteligentes e protocolos descentralizados complexos - incluindo o gosta de Aave, YFI, lien, 1inch, fetch, composto, synthetix e muitos outros.

Nossos clientes, parceiros e patrocinadores incluem os principais players do ecossistema, como L'Oréal, Polygon, AvaLabs, Morpho, Euler, CLabs, Olympus DAO, Fetch.ai, LimitBreak e muitos outros.

Certifique-se de seguir nossas mídias sociais e assinar nossa newsletter para mais atualizações:

Twitter / LinkedIn / Newsletter