-
La vulnerabilidad se presentaría por una mejora al costo de gas de los contratos inteligentes.
-
El error permitiría a un atacante manipular los contratos para robar ethers.
El día de ayer, los desarrolladores de Ethereum decidieron posponer una vez más la bifurcación Constantinople, al descubrir que una de sus propuestas generaba una vulnerabilidad a nivel de los contratos inteligentes, error que permitiría llevar a cabo ataques de reentrada (reentrancy attack).
El bug fue descubierto por ChainSecurity, agencia que explicó que una propuesta introducida en Constantinople para la disminución del costo de gas en las operaciones de almacenamiento es lo que causaría la nueva vulnerabilidad en los contratos inteligentes.
La propuesta, conocida como EIP 1283, se basa en un cambio en la medición neta del gas en las operaciones de SSTORE de los contratos inteligentes. Esta actualización permite nuevos usos de almacenamiento de contrato y reduce los costos excesivos de gas en la red de Ethereum, optimizando la interacción con los contratos inteligentes.
MyCrypto afirmó, a través de su cuenta de Twitter, que el código de la propuesta no tenía ningún error, por lo cual pasó la inspección técnica de los desarrolladores y la auditoría de Geth y Parity. No obstante, la vulnerabilidad podía ocurrir al interactuar con los contratos inteligentes, específicamente en los comandos address.transfer(…) y address.send(…).
We’re seeing a lot of misinformation related to the Constantinople delay. e.g. “Why wasn’t this detected sooner?” and/or “blah blah blah everyone sucks dump ETH”. Let’s dive into the nature of the bug. 🐛
— MyCrypto.eth 🦊💙 (@MyCrypto) January 15, 2019
Según ChainSecurity, si se activa el nuevo código para la propuesta EIP 1283, algunos contratos inteligentes pueden quedar expuestos a ataques de reentrada. Es decir, un atacante puede ejecutar una función determinada indefinidamente en un contrato para robar ethers de monederos ajenos.
ChainSecurity afirma que no han encontrado ningún contrato que pueda presentar la vulnerabilidad, pero que aumentarán el alcance del análisis para evaluar contratos más complejos. Además, publicaron una lista con características que permitirían este ataque.
La vulnerabilidad se produce debido a que la propuesta disminuye considerablemente el costo de gas para la ejecución de los contratos. Sin la activación de Constantinople, la operación que posibilita el ataque cuesta 5000 gas, una comisión que excedía el estipendio de 2300. Sin embargo, con el cambio introducido en la bifurcación, esta operación solo costaría 200 gas.
ChainSecurity simuló un ataque de reentrada a un contrato de pago compartido —un método de pago para recibir fondos conjuntamente—, poniendo como ejemplo un atacante que generaba con dos direcciones de su propiedad un contrato para transferir dinero.
La primera dirección habilita el contrato y deposita un fondo a transferir, usando la función updateSplit para asegurar que la próxima transacción sea más barata. Luego de esto, el atacante configura la operación para que la primera dirección reciba todos los fondos. Después de ejecutar, el atacante actualiza el split configurando la segunda dirección como la receptora de los criptoactivos; el contrato sigue ejecutando y el dinero es transferido a la segunda dirección.
En este circuito sin salida el atacante no estaría enviando dinero propio, sino robando ether de otras personas que también utilizan el contrato de pago compartido.
Para evitar que esta vulnerabilidad sea explotada, los desarrolladores de Ethereum decidieron posponer la activación de Constantinople y retirar la propuesta EIP 1283 de esta bifurcación. La nueva fecha de implementación se decidirá este viernes.
Imagen destacada de Aleksey / stock.adobe.com