Euler Finance Incident Post-Mortem
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 o
violator
- Deposite 20m DAI no DAI
ETokenda Euler Finance, recebendo ~19,56meDAItokens - Crie uma
eDAIalavanca artificial de 200m, cunhando ~195,68meDAIe 200mdDAIpara oviolator - Reembolsar 10m DAI na
violatorposição do, fazendo com que seudDAIsaldo vá para 190m - Crie mais 200m de alavancagem artificial
eDAI, cunhando ~195,68meDAIe 200mdDAIpara oviolator - Doe 100m
eDAIpara a reserva doEToken
eDAI: ~310,93mdDAI: 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,31mdDAItokens - Retire toda a reserva de
DAIfichas queimando aseDAIfichas 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
- Proposta de Melhoria de Euler 14:https://forum.euler.finance/t/eip-14-contract-upgrades/305
- Proposta de Melhoria de Euler 14 Delta:https://euler-xyz.github.io/euler-contracts-upgrade-diffs/eip14/EToken.html
- Lógica padrão de garantia de Euler
Liquidator:https://github.com/euler-xyz/euler-contracts/blob/fa9398728165676a5666939d8c34a7578d8e1919/contracts/modules/Liquidation.sol#L139-L151 ETokenMecanismo de Doação defeituoso de Euler :https://github.com/euler-xyz/euler-contracts/blob/fa9398728165676a5666939d8c34a7578d8e1919/contracts/modules/EToken.sol#L356-L386- Desconto de liquidação da Euler:https://docs.euler.finance/euler-protocol/eulers-default-parameters#maximum-liquidation-discount
- Link de Transação de Ataque Etherscan:https://etherscan.io/tx/0xc310a0affe2169d1f6feec1c63dbc7f7c62a887fa48795d327d4d2da2d6b111d
- Endereço Etherscan do Contrato Primário:https://etherscan.io/address/0xebc29199c817dc47ba12e3f86102564d640cbf99
- Endereço Etherscan do Violador do Contrato:https://etherscan.io/address/0x583c21631c48d442b5c0e605d624f54a0b366c72
- Endereço Etherscan do contrato do liquidante:https://etherscan.io/address/0xa0b3ee897f233f385e5d61086c32685257d4f12b
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





































![O que é uma lista vinculada, afinal? [Parte 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)