El 18 de julio de 2023, hora de Beijing, Ocean BNO sufrió un ataque de préstamo repentino y el atacante obtuvo una ganancia de alrededor de 500,000 dólares estadounidenses.
SharkTeam realizó un análisis técnico de este incidente por primera vez y resumió las precauciones de seguridad, con la esperanza de que los proyectos de seguimiento puedan aprender de él y construir conjuntamente una línea de defensa de seguridad para la industria de la cadena de bloques.
(1) El atacante (0xa6566574) tomó prestados 286 449 BNO a través del préstamo flash pancakeSwap.
(2) Luego llame a la función stakeNft del contrato atacado (0xdCA50344) para prometer dos nft.
(3) Luego llame a la función de compromiso del contrato atacado (0xdCA50344) para prometer 277856 monedas BNO.
(4) Llame a la función de retiro de emergencia del contrato atacado (0xdCA50344) para extraer todos los BNO
(5) Luego llame a la función unstakeNft del contrato atacado (0xdCA50344), recupere los dos nft comprometidos y reciba tokens BNO adicionales.
(6) Repita el proceso anterior para obtener continuamente tokens BNO adicionales
(7) Después de pagar el préstamo flash, intercambie todos los tokens BNO por 50,5 W BUSD y salga del mercado con una ganancia.
Segundo, análisis de vulnerabilidades
La causa raíz de este ataque es: hay un problema con el mecanismo de cálculo de la recompensa y la lógica de interacción de la función de retiro de emergencia en el contrato atacado (0xdCA50344), lo que hace que el usuario obtenga un token de recompensa adicional después de retirar el principal.
El contrato proporciona la función EmergencyWithdraw para el retiro de emergencia de tokens, y borra la deuda total de la deuda total de la hipoteca y la deuda de recompensa del atacante, pero no borra la variable nftAddition del atacante, y la variable nftAddition también se calcula a través de la variable allstake.
En la función unstakeNft, la recompensa actual del usuario aún se calculará y, si la variable nftAddition no se restablece a cero, la función PendienteFit aún devolverá un valor de recompensa BNO adicional, lo que hará que el atacante obtenga tokens BNO adicionales.
Tercero, recomendaciones de seguridad
En respuesta a este ataque, debemos seguir las siguientes precauciones durante el proceso de desarrollo:
(1) Al calcular las recompensas, verifique si el usuario ha retirado el principal.
(2) Antes de que el proyecto entre en línea, es necesario buscar asistencia técnica de un equipo de auditoría profesional externo.
Ver originales
This page may contain third-party content, which is provided for information purposes only (not representations/warranties) and should not be considered as an endorsement of its views by Gate, nor as financial or professional advice. See Disclaimer for details.
Análisis principal del evento de ataque BNO
El 18 de julio de 2023, hora de Beijing, Ocean BNO sufrió un ataque de préstamo repentino y el atacante obtuvo una ganancia de alrededor de 500,000 dólares estadounidenses.
SharkTeam realizó un análisis técnico de este incidente por primera vez y resumió las precauciones de seguridad, con la esperanza de que los proyectos de seguimiento puedan aprender de él y construir conjuntamente una línea de defensa de seguridad para la industria de la cadena de bloques.
1. Análisis de eventos
Dirección del atacante:
0xa6566574edc60d7b2adbacedb71d5142cf2677fb
Contrato de ataque:
0xd138b9a58d3e5f4be1cd5ec90b66310e241c13cd
Contrato atacado:
0xdCA503449899d5649D32175a255A8835A03E4006
Transacciones de ataque:
0x33fed54de490797b99b2fc7a159e43af57e9e6bdefc2c2d052dc814cfe0096b9
Proceso de ataque:
(1) El atacante (0xa6566574) tomó prestados 286 449 BNO a través del préstamo flash pancakeSwap.
(2) Luego llame a la función stakeNft del contrato atacado (0xdCA50344) para prometer dos nft.
(3) Luego llame a la función de compromiso del contrato atacado (0xdCA50344) para prometer 277856 monedas BNO.
(4) Llame a la función de retiro de emergencia del contrato atacado (0xdCA50344) para extraer todos los BNO
(5) Luego llame a la función unstakeNft del contrato atacado (0xdCA50344), recupere los dos nft comprometidos y reciba tokens BNO adicionales.
(6) Repita el proceso anterior para obtener continuamente tokens BNO adicionales
(7) Después de pagar el préstamo flash, intercambie todos los tokens BNO por 50,5 W BUSD y salga del mercado con una ganancia.
Segundo, análisis de vulnerabilidades
La causa raíz de este ataque es: hay un problema con el mecanismo de cálculo de la recompensa y la lógica de interacción de la función de retiro de emergencia en el contrato atacado (0xdCA50344), lo que hace que el usuario obtenga un token de recompensa adicional después de retirar el principal.
El contrato proporciona la función EmergencyWithdraw para el retiro de emergencia de tokens, y borra la deuda total de la deuda total de la hipoteca y la deuda de recompensa del atacante, pero no borra la variable nftAddition del atacante, y la variable nftAddition también se calcula a través de la variable allstake.
En la función unstakeNft, la recompensa actual del usuario aún se calculará y, si la variable nftAddition no se restablece a cero, la función PendienteFit aún devolverá un valor de recompensa BNO adicional, lo que hará que el atacante obtenga tokens BNO adicionales.
Tercero, recomendaciones de seguridad
En respuesta a este ataque, debemos seguir las siguientes precauciones durante el proceso de desarrollo:
(1) Al calcular las recompensas, verifique si el usuario ha retirado el principal.
(2) Antes de que el proyecto entre en línea, es necesario buscar asistencia técnica de un equipo de auditoría profesional externo.