Em 18 de outubro de 2023 19:48:59 horário de Pequim, o pool de empréstimos da Hope.money foi atacado com base em empréstimos relâmpagos.
A Hope.money construiu um serviço financeiro descentralizado full-stack, incluindo a plataforma de empréstimos HopeLend, a exchange descentralizada HopeSwap, a $HOPE de stablecoin e a $LT de tokens de governança.
O protocolo envolvido no ataque é o HopeLend, uma plataforma de empréstimo descentralizada que permite aos usuários fornecer liquidez ao protocolo ou fazer garantias excessivas para obter renda.
Início e fim do evento
Na implementação de código do HopeLend, havia uma vulnerabilidade explorável no pool de empréstimos, devido ao problema errado de divisão inteira ao destruir certificados de depósito, resultando no ponto decimal sendo truncado, alcançando a destruição de menos certificados do que o esperado e obtendo os mesmos tokens de valor esperado.
O atacante explorou essa falha para esvaziar vários pools de empréstimos de fundos no Hope.money.
O pool de empréstimos hEthWbtc foi implantado há 73 dias, mas não havia fundos nele, então os hackers injetaram grandes quantidades de dinheiro no pool de empréstimos para aumentar drasticamente a taxa de desconto, esvaziando rapidamente todos os outros pools de empréstimos em uma transação em bloco.
Mais dramaticamente, o hacker explorado não recebeu os fundos para a exploração, e sua transação de ataque foi descoberta pelo ladrão, que imitou seu ataque e roubou com sucesso todos os fundos do produto do ataque (527 ETH), e eventualmente 50% dos fundos do produto do ataque (263 ETH) foram usados pelos ladrões para subornar os mineiros que embalaram o bloco (carga útil).
O hacker inicial que descobriu a vulnerabilidade criou um contrato de ataque no bloco 18377039, e fez uma chamada para atacar o contrato no bloco 18377042, momento em que o snatcher monitorou a transação no pool de memória e simulou seu contrato de ataque, como a entrada do contrato de roubo, e explorou-o no mesmo bloco 18377042, e a transação do hacker inicial no bloco 18377042 falhou porque foi classificada atrás do snatcher.
! [CertiK: Análise do Ataque de Empréstimos à Plataforma de Empréstimos Descentralizada HopeLend] (https://img-cdn.gateio.im/webp-social/moments-7f230462a9-420dceb701-dd1a6f-69ad2a.webp)
Para onde vai o dinheiro
Uma hora depois de o ladrão receber os rendimentos, os fundos são transferidos para: 0x9a9122Ef3C4B33cAe7902EDFCD5F5a486792Bc3A
! [CertiK: Análise do Ataque de Empréstimos à Plataforma de Empréstimos Descentralizada HopeLend] (https://img-cdn.gateio.im/webp-social/moments-7f230462a9-2bec7812fd-dd1a6f-69ad2a.webp)
Em 20 de outubro às 13:30:23, a equipe oficial suspeita entrou em contato com o endereço, permitindo que os corredores deixassem 26 ETH (10% de lucro) como recompensa, e obtivessem uma resposta dos corredores.
! [CertiK: Análise do Ataque de Empréstimos à Plataforma de Empréstimos Descentralizada HopeLend] (https://img-cdn.gateio.im/webp-social/moments-7f230462a9-b3c8715e62-dd1a6f-69ad2a.webp)
Os fundos finais foram transferidos para o cofre multisig da GnosisSafe após uma hora de comunicação.
! [CertiK: Análise do Ataque de Empréstimos à Plataforma de Empréstimos Descentralizada HopeLend] (https://img-cdn.gateio.im/webp-social/moments-7f230462a9-a7c1f91d1a-dd1a6f-69ad2a.webp)
Abaixo mostraremos as vulnerabilidades reais e os detalhes da exploração dos hackers.
Pré-informação
*O protocolo de empréstimo da HopeLend implementa forks da Aave, de modo que a lógica de negócios principal relacionada a vulnerabilidades é referenciada no white paper da Aave.
0x00 Depósitos e Empréstimos
Aave é um DeFi puro, o negócio de empréstimo é realizado através de pools de liquidez, os usuários esperam receber a renda de empréstimos quando os depósitos Aave fornecem liquidez.
Os rendimentos dos empréstimos não são totalmente distribuídos aos utilizadores, uma pequena parte dos rendimentos de juros será incluída na reserva de risco, esta parte é uma proporção menor, a maior parte dos rendimentos dos empréstimos será distribuída ao utilizador que fornece liquidez.
Ao fazer empréstimos de depósitos na Aave, a Aave converte o número de depósitos em diferentes momentos na parcela do número de depósitos no ponto de tempo inicial do pool de liquidez através de desconto, de modo que a soma do capital e dos juros correspondentes aos ativos subjacentes de cada número de ações pode ser calculada diretamente com o valor * índice, o que facilita muito o cálculo e a compreensão.
Pode ser entendido como um processo semelhante à compra de fundos, o valor líquido inicial do fundo é 1, o usuário investe 100 yuan para obter 100 ações, assumindo que após um período de ganho, o valor líquido se torna 1,03, neste momento o usuário investe 100 yuan novamente, a ação obtida é 97, e a participação total do usuário é 197.
Isso é, na verdade, descontar o ativo de acordo com o índice. Isto deve-se ao facto de o capital efetivo e a soma dos juros do utilizador serem multiplicados pelo índice corrente pelo saldo. Quando o segundo depósito, a soma correta de capital e juros do usuário deve ser 100 * 1,03 + 100 = 203, se não descontado, o segundo usuário deposita 100 depois que a soma de capital e juros se torna ( 100 + 100) * 1,03 = 206, está errado, se descontado, a soma de capital e juros torna-se (100 + 100 / 1,03) * 1,03 = 103 + 100 = 203, 203 O resultado está correto.
Processo de ataque
0x25126...... 403907(pool hETHWBTC)
0x5a63e...... 844e74 (Contrato de Ataque - Levantamento)
Assaltante:
1. Empreste os fundos de empréstimo flash inicial e prometa-os
O atacante primeiro pega emprestado 2300 WBTC da Aave Lightning, aposta 2000 depósitos WBTC para a HopeLend, e os fundos serão transferidos para o contrato hEthWbtc da HopeLende (0x251 ... 907), e também adquirir os 2000 hETHWBTC correspondentes.
! [CertiK: Análise do Ataque de Empréstimos à Plataforma de Empréstimos Descentralizada HopeLend] (https://img-cdn.gateio.im/webp-social/moments-7f230462a9-39c44b60e7-dd1a6f-69ad2a.webp)
2. Manipulação da taxa de desconto inicial (liquidityIndex) com pools de empréstimos vazios
Peça emprestado 2000 WBTC à HopeLend para um empréstimo relâmpago.
! [CertiK: Análise do Ataque de Empréstimos à Plataforma de Empréstimos Descentralizada HopeLend] (https://img-cdn.gateio.im/webp-social/moments-7f230462a9-493bd5cd96-dd1a6f-69ad2a.webp)
O valor atual é 1 hETHWBTC = 1 WBTC.
De acordo com a operação normal de acesso ao ETHWBTC para trocar de volta ao WBTC, isso não afetará a relação de troca (apenas quando os juros forem ganhos afetarão a relação de troca, 1 hETHWBTC obterá mais WBTC).
Neste ponto, os hackers começaram a manipular a taxa de desconto através de uma série de operações complexas:
• O hacker transferiu diretamente os fundos do WBTC de 2000 para o contrato hEthWbtc da HopeLen (0x 251 ... 907), este passo é não pagar o empréstimo.
• O hacker então retira, a grande maioria do WBTC (1999.999 ... ), portanto, a etapa anterior requer a reversão para o WBTC para reabastecer os ativos no pool.
• Por fim, o hacker mantém apenas a menor unidade (1 e-8) de hEthWbtc, o que não pode ser completamente mencionado aqui, pois é necessário deixar um pouco, como cálculo do liquidityIndex, ele será baseado na adição plus existente, se for compensado, resultando no liquidityIndex se tornando 0, você não pode tornar a proporção no pool desequilibrada.
• Destrua a maior parte do wBTC trocado por hEthWbtc na etapa anterior, adicione o wBTC restante do empréstimo flash anterior e devolva o empréstimo flash emprestado ao pool HopeLend, pagando um total de 2001.8 WBTC (incluindo juros 1.8 wBTC).
• O processo acima destrói a maior parte do hEthWbtc, deixando apenas 1 menor unidade (1 e-8) de hEthWbtc na conta do hacker, de modo que a quantidade total de hETHWBTC é reduzida, e há 2001.8 wBTC no pool de empréstimos, quando o índice de liquidez atinge impressionantes 126.000.000. Isto envolve o conhecimento de que o interesse dos utilizadores de depósitos provém fundamentalmente do crescimento da liquidez no pool, e o pool de empréstimos ajustará dinamicamente as taxas de juro de empréstimos e depósitos de acordo com a taxa de depósito e a taxa de utilização.
! [CertiK: Análise do Ataque de Empréstimos à Plataforma de Empréstimos Descentralizada HopeLend] (https://img-cdn.gateio.im/webp-social/moments-7f230462a9-e386610ea7-dd1a6f-69ad2a.webp)
Aqui, quando o pool recebe liquidez adicional dos juros do empréstimo flash (1,8 WBTC), setenta por cento (126, 000, 000) é incluído no liquidityIndex (liquidityIndex), que é usado para calcular o valor descontado por unidade de depósito (hEthWbt).
! [CertiK: Análise do Ataque de Empréstimos à Plataforma de Empréstimos Descentralizada HopeLend] (https://img-cdn.gateio.im/webp-social/moments-7f230462a9-56409cd0fd-dd1a6f-69ad2a.webp)
! [CertiK: Análise do Ataque de Empréstimos à Plataforma de Empréstimos Descentralizada HopeLend] (https://img-cdn.gateio.im/webp-social/moments-7f230462a9-96bcc3e14e-dd1a6f-69ad2a.webp)
! [CertiK: Análise do Ataque de Empréstimos à Plataforma de Empréstimos Descentralizada HopeLend] (https://img-cdn.gateio.im/webp-social/moments-7f230462a9-9a75762f1e-dd1a6f-69ad2a.webp)
Como o pool estava vazio antes do hack, totalLiquidity é apenas 1 após o reembolso, o valor é 126000000 e o índice de liquidez inicial é 1, resultando em um resultado de 126000001.
! [CertiK: Análise do Ataque de Empréstimos à Plataforma de Empréstimos Descentralizada HopeLend] (https://img-cdn.gateio.im/webp-social/moments-7f230462a9-c54ae6461b-dd1a6f-69ad2a.webp)
3. Continuar a amplificar a taxa de desconto
Os hackers passaram a pedir emprestado 2.000 WBTCs da HopeLend para empréstimos flash e devolveram mais 1,8 WBTCs de cada vez, permitindo que cada LiquidityIndex acumulasse 126.000.000.
Os hackers repetiram o processo 60 vezes e, eventualmente, o índice de liquidez atingiu 7.560.000, 001, e o valor descontado de 1 menor unidade de hEthWBTC detida pelo atacante poderia chegar a 75,6 WBTC (cerca de US$ 2,14 milhões).
Isso permite que hackers manipulem hEthWBTC, distorcendo seu valor.
! [CertiK: Análise do Ataque de Empréstimos à Plataforma de Empréstimos Descentralizada HopeLend] (https://img-cdn.gateio.im/webp-social/moments-7f230462a9-7a6cfad314-dd1a6f-69ad2a.webp)
4. Esvaziamento de outros conjuntos de empréstimos onde existem fundos para formar lucros
Os atacantes então apostaram 1 menor unidade de hEthWBTC e emprestaram uma grande quantidade de ativos dos outros cinco pools de tokens da HopeLond.
Inclui:
175.4 - WETH
145, 522.220985 - USDT
123, 406.134999 - USDC
844, 282.284002229528476039 - ESPERANÇA
220, 617.821736563540747967 - stHOPE
! [CertiK: Análise do Ataque de Empréstimos à Plataforma de Empréstimos Descentralizada HopeLend] (https://img-cdn.gateio.im/webp-social/moments-7f230462a9-8aa289f7db-dd1a6f-69ad2a.webp)
Esses tokens foram trocados por WBTC e WETH através do Uniswap como receitas, e depois de deduzir várias taxas, o hacker finalmente obteve um lucro de cerca de 263 WETH (excluindo os 263,9 WETH que subornaram a carga útil).
Por que os hackers podem pedir grandes quantias de dinheiro emprestado de outros pools:
Ao contrair ou levantar depósitos, o contrato de empréstimo verificará a condição dos ativos garantidos pelo utilizador para garantir que o empréstimo não excede a garantia.
Uma vez que a taxa de desconto foi manipulada por hackers e a taxa de desconto é calculada no valor da garantia no multiplicador de renda normalizado, o valor da garantia de uma unidade de hEthWBTC em suas mãos é tão alto quanto 75,6 WBTC.
! [CertiK: Análise do Ataque de Empréstimos à Plataforma de Empréstimos Descentralizada HopeLend] (https://img-cdn.gateio.im/webp-social/moments-7f230462a9-e21db310ea-dd1a6f-69ad2a.webp)
! [CertiK: Análise do Ataque de Empréstimos à Plataforma de Empréstimos Descentralizada HopeLend] (https://img-cdn.gateio.im/webp-social/moments-7f230462a9-9c0111bcf6-dd1a6f-69ad2a.webp)
Toda vez que pegavam dinheiro emprestado de outros pools, o hacker passava facilmente pela verificação de ativos de garantia.
! [CertiK: Análise do Ataque de Empréstimos à Plataforma de Empréstimos Descentralizada HopeLend] (https://img-cdn.gateio.im/webp-social/moments-7f230462a9-362c84f0ae-dd1a6f-69ad2a.webp)
Neste ponto, os atacantes investiram um total de 2000+ 1.8* 60 WBTCs no HopeLend para manipular liquidityIndex, deixando apenas 1 unidade de hEtthWBTC.
5. Explorar pontos críticos de vulnerabilidade (erros de divisão inteira) para sacar dinheiro
Para tirar o investimento anterior wBTC, os atacantes implantaram outro contrato de ataque: 0x 5 a 63 e... 844 e 74 e chame o método withdrawAllBtc() lá
! [CertiK: Análise do Ataque de Empréstimos à Plataforma de Empréstimos Descentralizada HopeLend] (https://img-cdn.gateio.im/webp-social/moments-7f230462a9-821db2a3ae-dd1a6f-69ad2a.webp)
O processo de vulnerabilidade é o seguinte:
(1) Primeiro depósito 151.20000002 wBTC, de acordo com o índice de liquidez atual (1 menor unidade hEthWBTC=75.6 wBTC), o atacante recebe 2 menores unidades de hEthWBTC.
(2) Retire (retire) 113,4 wBTC, calcule inversamente sua ação hEthWBTC correspondente e queime hEthWBTC.
(3) 113.4 wBTC precisa destruir 1.9999999998 menores unidades de hEthWBTC, mas devido à precisão da função div, apenas uma menor unidade de hEthWBTC é destruída, então se torna uma vulnerabilidade explorável, e os hackers ainda podem manter 1 menor unidade de hEthWBTC.
Vulnerabilidades críticas
! [CertiK: Análise do Ataque de Empréstimos à Plataforma de Empréstimos Descentralizada HopeLend] (https://img-cdn.gateio.im/webp-social/moments-7f230462a9-7ff70593aa-dd1a6f-69ad2a.webp)
O método de gravação do hEthWBTC chama rayDiv de divisão de alta precisão.
! [CertiK: Análise do Ataque de Empréstimos à Plataforma de Empréstimos Descentralizada HopeLend] (https://img-cdn.gateio.im/webp-social/moments-7f230462a9-8ab92bd200-dd1a6f-69ad2a.webp)
Aqui:
a= 11340000000 (WBTC destinado a ser removido)
b=7560000001000000000000000009655610336(taxa de desconto)
Embora (a* 1e27+b/2)/b = 1,9999999998, o método div integrado do Solidity trunca e retorna 1, o que equivale a 11340000000 / 7560000001 casas decimais são truncadas após a divisão.
0x5a63 (Attack Contract - Cash out) continua a depositar 75.60000001 WBTC exatamente para obter mais 1 unidade mínima hEthWBTC, continuando assim a deter 2 unidades mínimas hEthWBTC.
Neste loop, 113.400000000 wBTC é retirado e 75.60000001 wBTC depositado, cada atacante pode obter 37.8 wBTC do nada.
Após 58 ciclos, os atacantes retiraram todo o wBTC investido antecipadamente e devolveram sem problemas o empréstimo flash de Aave.
Conclusão
Como o pool de empréstimos hEthWBTC não é inicializado, o invasor pode facilmente manipular o liquidityIndex para aumentá-lo ao máximo, e a taxa de retirada é muito amplificada como um divisor, tornando mais fácil retirar o investimento anterior em um bloco devido ao erro de truncamento da divisão inteira.
Num conjunto de empréstimos que funcione bem, não é fácil aumentar significativamente a taxa de desconto devido a um pequeno aumento dos juros dos empréstimos devido à liquidez existente no conjunto.
Ver original
Esta página pode conter conteúdos de terceiros, que são fornecidos apenas para fins informativos (sem representações/garantias) e não devem ser considerados como uma aprovação dos seus pontos de vista pela Gate, nem como aconselhamento financeiro ou profissional. Consulte a Declaração de exoneração de responsabilidade para obter mais informações.
CertiK: Análise de ataques de empréstimos na plataforma de empréstimos descentralizada HopeLend
Em 18 de outubro de 2023 19:48:59 horário de Pequim, o pool de empréstimos da Hope.money foi atacado com base em empréstimos relâmpagos.
A Hope.money construiu um serviço financeiro descentralizado full-stack, incluindo a plataforma de empréstimos HopeLend, a exchange descentralizada HopeSwap, a $HOPE de stablecoin e a $LT de tokens de governança.
O protocolo envolvido no ataque é o HopeLend, uma plataforma de empréstimo descentralizada que permite aos usuários fornecer liquidez ao protocolo ou fazer garantias excessivas para obter renda.
Início e fim do evento
Na implementação de código do HopeLend, havia uma vulnerabilidade explorável no pool de empréstimos, devido ao problema errado de divisão inteira ao destruir certificados de depósito, resultando no ponto decimal sendo truncado, alcançando a destruição de menos certificados do que o esperado e obtendo os mesmos tokens de valor esperado.
O atacante explorou essa falha para esvaziar vários pools de empréstimos de fundos no Hope.money.
O pool de empréstimos hEthWbtc foi implantado há 73 dias, mas não havia fundos nele, então os hackers injetaram grandes quantidades de dinheiro no pool de empréstimos para aumentar drasticamente a taxa de desconto, esvaziando rapidamente todos os outros pools de empréstimos em uma transação em bloco.
Mais dramaticamente, o hacker explorado não recebeu os fundos para a exploração, e sua transação de ataque foi descoberta pelo ladrão, que imitou seu ataque e roubou com sucesso todos os fundos do produto do ataque (527 ETH), e eventualmente 50% dos fundos do produto do ataque (263 ETH) foram usados pelos ladrões para subornar os mineiros que embalaram o bloco (carga útil).
O hacker inicial que descobriu a vulnerabilidade criou um contrato de ataque no bloco 18377039, e fez uma chamada para atacar o contrato no bloco 18377042, momento em que o snatcher monitorou a transação no pool de memória e simulou seu contrato de ataque, como a entrada do contrato de roubo, e explorou-o no mesmo bloco 18377042, e a transação do hacker inicial no bloco 18377042 falhou porque foi classificada atrás do snatcher.
! [CertiK: Análise do Ataque de Empréstimos à Plataforma de Empréstimos Descentralizada HopeLend] (https://img-cdn.gateio.im/webp-social/moments-7f230462a9-420dceb701-dd1a6f-69ad2a.webp)
Para onde vai o dinheiro
Uma hora depois de o ladrão receber os rendimentos, os fundos são transferidos para: 0x9a9122Ef3C4B33cAe7902EDFCD5F5a486792Bc3A
! [CertiK: Análise do Ataque de Empréstimos à Plataforma de Empréstimos Descentralizada HopeLend] (https://img-cdn.gateio.im/webp-social/moments-7f230462a9-2bec7812fd-dd1a6f-69ad2a.webp)
Em 20 de outubro às 13:30:23, a equipe oficial suspeita entrou em contato com o endereço, permitindo que os corredores deixassem 26 ETH (10% de lucro) como recompensa, e obtivessem uma resposta dos corredores.
! [CertiK: Análise do Ataque de Empréstimos à Plataforma de Empréstimos Descentralizada HopeLend] (https://img-cdn.gateio.im/webp-social/moments-7f230462a9-b3c8715e62-dd1a6f-69ad2a.webp)
Os fundos finais foram transferidos para o cofre multisig da GnosisSafe após uma hora de comunicação.
! [CertiK: Análise do Ataque de Empréstimos à Plataforma de Empréstimos Descentralizada HopeLend] (https://img-cdn.gateio.im/webp-social/moments-7f230462a9-a7c1f91d1a-dd1a6f-69ad2a.webp)
Abaixo mostraremos as vulnerabilidades reais e os detalhes da exploração dos hackers.
Pré-informação
*O protocolo de empréstimo da HopeLend implementa forks da Aave, de modo que a lógica de negócios principal relacionada a vulnerabilidades é referenciada no white paper da Aave.
0x00 Depósitos e Empréstimos
Aave é um DeFi puro, o negócio de empréstimo é realizado através de pools de liquidez, os usuários esperam receber a renda de empréstimos quando os depósitos Aave fornecem liquidez.
Os rendimentos dos empréstimos não são totalmente distribuídos aos utilizadores, uma pequena parte dos rendimentos de juros será incluída na reserva de risco, esta parte é uma proporção menor, a maior parte dos rendimentos dos empréstimos será distribuída ao utilizador que fornece liquidez.
Ao fazer empréstimos de depósitos na Aave, a Aave converte o número de depósitos em diferentes momentos na parcela do número de depósitos no ponto de tempo inicial do pool de liquidez através de desconto, de modo que a soma do capital e dos juros correspondentes aos ativos subjacentes de cada número de ações pode ser calculada diretamente com o valor * índice, o que facilita muito o cálculo e a compreensão.
Pode ser entendido como um processo semelhante à compra de fundos, o valor líquido inicial do fundo é 1, o usuário investe 100 yuan para obter 100 ações, assumindo que após um período de ganho, o valor líquido se torna 1,03, neste momento o usuário investe 100 yuan novamente, a ação obtida é 97, e a participação total do usuário é 197.
Isso é, na verdade, descontar o ativo de acordo com o índice. Isto deve-se ao facto de o capital efetivo e a soma dos juros do utilizador serem multiplicados pelo índice corrente pelo saldo. Quando o segundo depósito, a soma correta de capital e juros do usuário deve ser 100 * 1,03 + 100 = 203, se não descontado, o segundo usuário deposita 100 depois que a soma de capital e juros se torna ( 100 + 100) * 1,03 = 206, está errado, se descontado, a soma de capital e juros torna-se (100 + 100 / 1,03) * 1,03 = 103 + 100 = 203, 203 O resultado está correto.
Processo de ataque
0x25126...... 403907(pool hETHWBTC)
0x5a63e...... 844e74 (Contrato de Ataque - Levantamento)
Assaltante:
1. Empreste os fundos de empréstimo flash inicial e prometa-os
O atacante primeiro pega emprestado 2300 WBTC da Aave Lightning, aposta 2000 depósitos WBTC para a HopeLend, e os fundos serão transferidos para o contrato hEthWbtc da HopeLende (0x251 ... 907), e também adquirir os 2000 hETHWBTC correspondentes.
! [CertiK: Análise do Ataque de Empréstimos à Plataforma de Empréstimos Descentralizada HopeLend] (https://img-cdn.gateio.im/webp-social/moments-7f230462a9-39c44b60e7-dd1a6f-69ad2a.webp)
2. Manipulação da taxa de desconto inicial (liquidityIndex) com pools de empréstimos vazios
Peça emprestado 2000 WBTC à HopeLend para um empréstimo relâmpago.
! [CertiK: Análise do Ataque de Empréstimos à Plataforma de Empréstimos Descentralizada HopeLend] (https://img-cdn.gateio.im/webp-social/moments-7f230462a9-493bd5cd96-dd1a6f-69ad2a.webp)
O valor atual é 1 hETHWBTC = 1 WBTC.
De acordo com a operação normal de acesso ao ETHWBTC para trocar de volta ao WBTC, isso não afetará a relação de troca (apenas quando os juros forem ganhos afetarão a relação de troca, 1 hETHWBTC obterá mais WBTC).
Neste ponto, os hackers começaram a manipular a taxa de desconto através de uma série de operações complexas:
• O hacker transferiu diretamente os fundos do WBTC de 2000 para o contrato hEthWbtc da HopeLen (0x 251 ... 907), este passo é não pagar o empréstimo.
• O hacker então retira, a grande maioria do WBTC (1999.999 ... ), portanto, a etapa anterior requer a reversão para o WBTC para reabastecer os ativos no pool.
• Por fim, o hacker mantém apenas a menor unidade (1 e-8) de hEthWbtc, o que não pode ser completamente mencionado aqui, pois é necessário deixar um pouco, como cálculo do liquidityIndex, ele será baseado na adição plus existente, se for compensado, resultando no liquidityIndex se tornando 0, você não pode tornar a proporção no pool desequilibrada.
• Destrua a maior parte do wBTC trocado por hEthWbtc na etapa anterior, adicione o wBTC restante do empréstimo flash anterior e devolva o empréstimo flash emprestado ao pool HopeLend, pagando um total de 2001.8 WBTC (incluindo juros 1.8 wBTC).
• O processo acima destrói a maior parte do hEthWbtc, deixando apenas 1 menor unidade (1 e-8) de hEthWbtc na conta do hacker, de modo que a quantidade total de hETHWBTC é reduzida, e há 2001.8 wBTC no pool de empréstimos, quando o índice de liquidez atinge impressionantes 126.000.000. Isto envolve o conhecimento de que o interesse dos utilizadores de depósitos provém fundamentalmente do crescimento da liquidez no pool, e o pool de empréstimos ajustará dinamicamente as taxas de juro de empréstimos e depósitos de acordo com a taxa de depósito e a taxa de utilização.
! [CertiK: Análise do Ataque de Empréstimos à Plataforma de Empréstimos Descentralizada HopeLend] (https://img-cdn.gateio.im/webp-social/moments-7f230462a9-e386610ea7-dd1a6f-69ad2a.webp)
Aqui, quando o pool recebe liquidez adicional dos juros do empréstimo flash (1,8 WBTC), setenta por cento (126, 000, 000) é incluído no liquidityIndex (liquidityIndex), que é usado para calcular o valor descontado por unidade de depósito (hEthWbt).
! [CertiK: Análise do Ataque de Empréstimos à Plataforma de Empréstimos Descentralizada HopeLend] (https://img-cdn.gateio.im/webp-social/moments-7f230462a9-56409cd0fd-dd1a6f-69ad2a.webp)
! [CertiK: Análise do Ataque de Empréstimos à Plataforma de Empréstimos Descentralizada HopeLend] (https://img-cdn.gateio.im/webp-social/moments-7f230462a9-96bcc3e14e-dd1a6f-69ad2a.webp)
! [CertiK: Análise do Ataque de Empréstimos à Plataforma de Empréstimos Descentralizada HopeLend] (https://img-cdn.gateio.im/webp-social/moments-7f230462a9-9a75762f1e-dd1a6f-69ad2a.webp)
Como o pool estava vazio antes do hack, totalLiquidity é apenas 1 após o reembolso, o valor é 126000000 e o índice de liquidez inicial é 1, resultando em um resultado de 126000001.
! [CertiK: Análise do Ataque de Empréstimos à Plataforma de Empréstimos Descentralizada HopeLend] (https://img-cdn.gateio.im/webp-social/moments-7f230462a9-c54ae6461b-dd1a6f-69ad2a.webp)
3. Continuar a amplificar a taxa de desconto
Os hackers passaram a pedir emprestado 2.000 WBTCs da HopeLend para empréstimos flash e devolveram mais 1,8 WBTCs de cada vez, permitindo que cada LiquidityIndex acumulasse 126.000.000.
Os hackers repetiram o processo 60 vezes e, eventualmente, o índice de liquidez atingiu 7.560.000, 001, e o valor descontado de 1 menor unidade de hEthWBTC detida pelo atacante poderia chegar a 75,6 WBTC (cerca de US$ 2,14 milhões).
Isso permite que hackers manipulem hEthWBTC, distorcendo seu valor.
! [CertiK: Análise do Ataque de Empréstimos à Plataforma de Empréstimos Descentralizada HopeLend] (https://img-cdn.gateio.im/webp-social/moments-7f230462a9-7a6cfad314-dd1a6f-69ad2a.webp)
4. Esvaziamento de outros conjuntos de empréstimos onde existem fundos para formar lucros
Os atacantes então apostaram 1 menor unidade de hEthWBTC e emprestaram uma grande quantidade de ativos dos outros cinco pools de tokens da HopeLond.
Inclui:
! [CertiK: Análise do Ataque de Empréstimos à Plataforma de Empréstimos Descentralizada HopeLend] (https://img-cdn.gateio.im/webp-social/moments-7f230462a9-8aa289f7db-dd1a6f-69ad2a.webp)
Esses tokens foram trocados por WBTC e WETH através do Uniswap como receitas, e depois de deduzir várias taxas, o hacker finalmente obteve um lucro de cerca de 263 WETH (excluindo os 263,9 WETH que subornaram a carga útil).
Por que os hackers podem pedir grandes quantias de dinheiro emprestado de outros pools:
Ao contrair ou levantar depósitos, o contrato de empréstimo verificará a condição dos ativos garantidos pelo utilizador para garantir que o empréstimo não excede a garantia.
Uma vez que a taxa de desconto foi manipulada por hackers e a taxa de desconto é calculada no valor da garantia no multiplicador de renda normalizado, o valor da garantia de uma unidade de hEthWBTC em suas mãos é tão alto quanto 75,6 WBTC.
! [CertiK: Análise do Ataque de Empréstimos à Plataforma de Empréstimos Descentralizada HopeLend] (https://img-cdn.gateio.im/webp-social/moments-7f230462a9-e21db310ea-dd1a6f-69ad2a.webp)
! [CertiK: Análise do Ataque de Empréstimos à Plataforma de Empréstimos Descentralizada HopeLend] (https://img-cdn.gateio.im/webp-social/moments-7f230462a9-9c0111bcf6-dd1a6f-69ad2a.webp)
Toda vez que pegavam dinheiro emprestado de outros pools, o hacker passava facilmente pela verificação de ativos de garantia.
! [CertiK: Análise do Ataque de Empréstimos à Plataforma de Empréstimos Descentralizada HopeLend] (https://img-cdn.gateio.im/webp-social/moments-7f230462a9-362c84f0ae-dd1a6f-69ad2a.webp)
Neste ponto, os atacantes investiram um total de 2000+ 1.8* 60 WBTCs no HopeLend para manipular liquidityIndex, deixando apenas 1 unidade de hEtthWBTC.
5. Explorar pontos críticos de vulnerabilidade (erros de divisão inteira) para sacar dinheiro
Para tirar o investimento anterior wBTC, os atacantes implantaram outro contrato de ataque: 0x 5 a 63 e... 844 e 74 e chame o método withdrawAllBtc() lá
! [CertiK: Análise do Ataque de Empréstimos à Plataforma de Empréstimos Descentralizada HopeLend] (https://img-cdn.gateio.im/webp-social/moments-7f230462a9-821db2a3ae-dd1a6f-69ad2a.webp)
O processo de vulnerabilidade é o seguinte:
(1) Primeiro depósito 151.20000002 wBTC, de acordo com o índice de liquidez atual (1 menor unidade hEthWBTC=75.6 wBTC), o atacante recebe 2 menores unidades de hEthWBTC.
(2) Retire (retire) 113,4 wBTC, calcule inversamente sua ação hEthWBTC correspondente e queime hEthWBTC.
(3) 113.4 wBTC precisa destruir 1.9999999998 menores unidades de hEthWBTC, mas devido à precisão da função div, apenas uma menor unidade de hEthWBTC é destruída, então se torna uma vulnerabilidade explorável, e os hackers ainda podem manter 1 menor unidade de hEthWBTC.
Vulnerabilidades críticas
! [CertiK: Análise do Ataque de Empréstimos à Plataforma de Empréstimos Descentralizada HopeLend] (https://img-cdn.gateio.im/webp-social/moments-7f230462a9-7ff70593aa-dd1a6f-69ad2a.webp)
O método de gravação do hEthWBTC chama rayDiv de divisão de alta precisão.
! [CertiK: Análise do Ataque de Empréstimos à Plataforma de Empréstimos Descentralizada HopeLend] (https://img-cdn.gateio.im/webp-social/moments-7f230462a9-8ab92bd200-dd1a6f-69ad2a.webp)
Aqui:
a= 11340000000 (WBTC destinado a ser removido)
b=7560000001000000000000000009655610336(taxa de desconto)
Embora (a* 1e27+b/2)/b = 1,9999999998, o método div integrado do Solidity trunca e retorna 1, o que equivale a 11340000000 / 7560000001 casas decimais são truncadas após a divisão.
0x5a63 (Attack Contract - Cash out) continua a depositar 75.60000001 WBTC exatamente para obter mais 1 unidade mínima hEthWBTC, continuando assim a deter 2 unidades mínimas hEthWBTC.
Neste loop, 113.400000000 wBTC é retirado e 75.60000001 wBTC depositado, cada atacante pode obter 37.8 wBTC do nada.
Após 58 ciclos, os atacantes retiraram todo o wBTC investido antecipadamente e devolveram sem problemas o empréstimo flash de Aave.
Conclusão
Como o pool de empréstimos hEthWBTC não é inicializado, o invasor pode facilmente manipular o liquidityIndex para aumentá-lo ao máximo, e a taxa de retirada é muito amplificada como um divisor, tornando mais fácil retirar o investimento anterior em um bloco devido ao erro de truncamento da divisão inteira.
Num conjunto de empréstimos que funcione bem, não é fácil aumentar significativamente a taxa de desconto devido a um pequeno aumento dos juros dos empréstimos devido à liquidez existente no conjunto.