Como robar 200 WETH copiando

Como robar 200 WETH copiando

Después de producirse el Merge, los mineros se salieron con la suya, crearon Ethereum proof of work (ETHW). Uno de lo cambios que han hecho es el de cambiar el Chain ID (identificador de la cadena)

¿Por qué debían cambiar el Chain ID?

A la hora de realizar una transacción en una blockchain que es compatible con la ethereum virtual machine (Binance smart chain, ethereum, avalanche…)

Necesitas especificar qué cadena quieres utilizar

Para poder hacer esto, antes debes añadir la red

Uno de los parámetros que debes rellenar es el «chain Id»

Cada blockchain de este tipo, tiene su propio identificador

Por ejemplo, el de Ethereum es el número 1

Entonces, al clonar la blockchain de Ethereum para crear la de ethereum proof of work

Estarías manteniendo el mismo Chain Id

Es decir, cuando realices una transacción, estarías dando la orden de ejecutarla en las dos blockchains

Esto es un problema. Por este motivo, quien gestiona $ETHW, modificó el «Chain Id» al número 10001

Esto ya causó problemas en un primer momento. Ya que este mismo identificador. Corresponde a la blockchain «Smart Bitcoin Cash Testnet»

Como robar 200 WETH copiando

Bueno, en realidad, el Chain Id no solo era 10001, también era 1. ¿Y esto por que?

Te recuerdo que EthereumPow $ETHW es un clon de Ethereum $ETH, por lo que todos los bloques minados hasta la clonación, se mantienen igual.

Pero estos bloques, contienen transacciones con otro Chain ID

Este Chain Id es el 1

Por lo que $ETHW, en realidad utiliza lo que se conoce como Chain Id dinámico

Para los bloques antes del merge el Chain Id es 1, para los bloques después del merge el Chain Id es 10001

¿Dónde está el problema?

El 16 de septiembre, la cartera 0x82faed2da812d2e5cced3c12b3baeb1a522dc677 envió 200 $WETH (270 mil dólares) al bridge Omni

En concreto, al Smart contract que gestiona el puente entre Gnosis Chain y Ethereum

Luego, repitió la transacción en la cadena de $ETHW

El resultado de esto:

Fueron 200 $Weth transferidos a su cartera en la red de ethereum proof of work, En resumen, realizó una transacción en la blockchain de Ethereum para luego poder repetirla en la blockchain de Ethereum Proof of work

De esta forma pudo robar 200 $WETH que no le correspondían

¿Cómo pudo repetir la transacción si no comparten el Chain Id?

El Smart contract de Omni, parece que tiene el código desactualizado.

Cuando alguien realiza una transacción, normalmente el contrato verifica el Chain Id para no meter la pata

Pero en este caso, el contrato tiene una función que lo que hace es «recordar» el Chain Id que ha utilizado hasta ahora

Es decir, no lo verifica para cada transacción

Esto provocó que a pesar de cambiar el Chain id, el atacante pudo replicar la transacción para llevarse los 200 $Weth

Peeeero, no todo es tan malo

El atacante ha robado 200 $Weth de la red proof of work

Eso son poco más de 1000 dólares

Si fueran de la red Proof of stake, serían más de 250 mil dólares

Dentro de lo malo

El atacante no se ha llevado mucho

Por cierto, la wallet que utilicé en un principio de ejemplo, era la del atacante

0x82faed2da812d2e5cced3c12b3baeb1a522dc677

Por aquí te dejo el enlace a las transacciones en ambas redes

En Ethereum Proof of stake: https://etherscan.io/tx/0x97bffc0dc8d94a7fdb756419da1d426f8713d193a7878a4a47e6098ce82fc57e

En Ethereum Proof of Work:

ETHW Block 0x9c07…861fb4 Height Block Time Fee | OKLink Blockchain Explorer

www.oklink.com

En realidad, esto no es un ataque de repetición «puro»

Ya que las transacciones NO son exactamente las mismas. El robo ha podido hacerse por un error del smart contract. Si somos más precisos, hablamos de un exploit aprovechando un error en la verificación del Chain ID. Además de cambiar el Chain id, existen otros métodos para protegerse de un ataque de repetición, incluso existen técnicas para protegerte a ti mismo de este tipo de ataques y que nadie te robe.

Salir de la versión móvil