Análisis del incidente de ataque de reentrada de OrionProtocol
El 2 de febrero de 2023, OrionProtocol sufrió un ataque de reentrada en Ethereum y Binance Smart Chain, lo que resultó en pérdidas de aproximadamente 2,9 millones de dólares. Los atacantes aprovecharon una vulnerabilidad del contrato, robando 2,844,766 USDT en la cadena de Ethereum y 191,606 BUSD en la cadena inteligente de Binance.
Proceso de ataque
El atacante primero creó un contrato de Token personalizado y realizó las operaciones de transferencia y autorización correspondientes. Luego, el atacante pidió un préstamo a través del método swap de un DEX y llamó al método ExchangeWithAtomic.swapThroughOrionPool para realizar el intercambio de tokens. La ruta de intercambio incluía la dirección del contrato de Token creado por el atacante.
Durante el proceso de intercambio, debido a la existencia de un mecanismo de callback en el contrato del Token del atacante, el atacante pudo seguir llamando al método ExchangeWithAtomic.depositAsset a través de Token.Transfer, lo que permitió llevar a cabo un ataque de reentrada. Esto resultó en la acumulación repetida del monto depositado, y finalmente el atacante completó la obtención de ganancias a través de la operación de retiro.
Flujo de fondos
Los fondos iniciales del atacante provienen de la cuenta de la cartera caliente de una plataforma de intercambio. De los 1,651 ETH obtenidos, 657.5 todavía permanecen en la dirección de la billetera del atacante, mientras que el resto ha sido transferido a través de un servicio de mezcla.
Análisis de vulnerabilidades
El problema central de la vulnerabilidad se encuentra en la función doSwapThroughOrionPool. Esta función llama a la función _doSwapTokens, que actualiza la variable curBalance después de la operación de transferencia. El atacante aprovechó la funcionalidad de callback añadida en la función transfer del Token personalizado, llamando nuevamente a la función depositAsset antes de que curBalance se actualizara, lo que provocó una actualización incorrecta de curBalance. Finalmente, después de reembolsar el préstamo relámpago, el atacante extrajo fondos adicionales a través de la función withdraw.
Sugerencias de prevención
Para prevenir ataques similares, se recomienda que el equipo del proyecto preste atención a los siguientes puntos al diseñar el contrato:
Considerar las posibles eventualidades que pueden surgir de múltiples tokens y múltiples rutas de intercambio.
Seguir el patrón de codificación "Checks-Effects-Interactions", es decir, primero realizar la verificación de condiciones, luego actualizar las variables de estado y finalmente ejecutar las llamadas externas.
Utilizar un candado de reentrada antes y después de operaciones clave para prevenir ataques de reentrada.
Realizar una verificación de seguridad del contrato Token para llamadas externas.
Realizar auditorías de código y pruebas de seguridad de forma regular para detectar y reparar vulnerabilidades potenciales a tiempo.
Al adoptar estas medidas, el proyecto puede mejorar significativamente la seguridad y estabilidad del contrato, minimizando el riesgo de sufrir ataques.
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.
17 me gusta
Recompensa
17
7
Compartir
Comentar
0/400
AirdropHunterXiao
· hace5h
El proyecto de Cadena de bloques ha sido aprovechado una vez más.
Ver originalesResponder0
MemecoinResearcher
· hace5h
ngmi... parece que la maldición de la reentrancia ataca de nuevo fr fr
Ver originalesResponder0
NightAirdropper
· hace5h
Todo el tiempo siendo atacado, es muy triste.
Ver originalesResponder0
rugpull_survivor
· hace5h
tomar a la gente por tonta una vez más y habrá otra vez
OrionProtocol sufrió un ataque de reentrada de 2.9 millones de dólares. Análisis del proceso del ataque y recomendaciones para la prevención.
Análisis del incidente de ataque de reentrada de OrionProtocol
El 2 de febrero de 2023, OrionProtocol sufrió un ataque de reentrada en Ethereum y Binance Smart Chain, lo que resultó en pérdidas de aproximadamente 2,9 millones de dólares. Los atacantes aprovecharon una vulnerabilidad del contrato, robando 2,844,766 USDT en la cadena de Ethereum y 191,606 BUSD en la cadena inteligente de Binance.
Proceso de ataque
El atacante primero creó un contrato de Token personalizado y realizó las operaciones de transferencia y autorización correspondientes. Luego, el atacante pidió un préstamo a través del método swap de un DEX y llamó al método ExchangeWithAtomic.swapThroughOrionPool para realizar el intercambio de tokens. La ruta de intercambio incluía la dirección del contrato de Token creado por el atacante.
Durante el proceso de intercambio, debido a la existencia de un mecanismo de callback en el contrato del Token del atacante, el atacante pudo seguir llamando al método ExchangeWithAtomic.depositAsset a través de Token.Transfer, lo que permitió llevar a cabo un ataque de reentrada. Esto resultó en la acumulación repetida del monto depositado, y finalmente el atacante completó la obtención de ganancias a través de la operación de retiro.
Flujo de fondos
Los fondos iniciales del atacante provienen de la cuenta de la cartera caliente de una plataforma de intercambio. De los 1,651 ETH obtenidos, 657.5 todavía permanecen en la dirección de la billetera del atacante, mientras que el resto ha sido transferido a través de un servicio de mezcla.
Análisis de vulnerabilidades
El problema central de la vulnerabilidad se encuentra en la función doSwapThroughOrionPool. Esta función llama a la función _doSwapTokens, que actualiza la variable curBalance después de la operación de transferencia. El atacante aprovechó la funcionalidad de callback añadida en la función transfer del Token personalizado, llamando nuevamente a la función depositAsset antes de que curBalance se actualizara, lo que provocó una actualización incorrecta de curBalance. Finalmente, después de reembolsar el préstamo relámpago, el atacante extrajo fondos adicionales a través de la función withdraw.
Sugerencias de prevención
Para prevenir ataques similares, se recomienda que el equipo del proyecto preste atención a los siguientes puntos al diseñar el contrato:
Al adoptar estas medidas, el proyecto puede mejorar significativamente la seguridad y estabilidad del contrato, minimizando el riesgo de sufrir ataques.