La plataforma de contratos inteligentes de Ethereum pareciera estar viviendo uno de los momentos mรกs inestables desde su lanzamiento el pasado aรฑo. Tras dejar atrรกs los efectos causados por el hackeo a The DAO, siendo la apariciรณn de Ethereum Classic el mรกs notorio, llegรณ a enfrentarse a pesados ataques de denegaciรณn de servicio hacia su plataforma que causaron muchos inconvenientes en la comunidad de usuarios. Ahora, una vulnerabilidad que pone en peligro los contratos inteligentes ha sido detectada y colocรณ en alerta al equipo de desarrolladores.
Un ‘bug’ relacionado con las variables de almacenamiento que manejan los contratos inteligentes, fue detectado por el usuario Catageekย y reportado en el repositorio de cรณdigo de Ethereum en la comunidad de GitHub. La vulnerabilidad se presenta en variables de pequeรฑo tamaรฑo que son agrupadas en lotes de 256 bits y que, de ser desbordadas en su tamaรฑo, pueden llegar a sobrescribir a otras variables causando modificaciรณn en ciertos tipos de contratos inteligentes.
Debido a la facilidad de que un atacante pueda modificar el tamaรฑo de una primera variable para desbordar el valor de la siguiente y posteriormente lograr un efecto en cadena y asรญ corromper el contrato, los usuarios estรกn expuestos a que se modifiquen sus smart contracts y asรญ estar expuestos al mal funcionamiento de รฉstos y hasta la posible extracciรณn de fondos.
En la publicaciรณn realizada en el blog oficial del equipo de Ethereum, se detalla que los contratos que podrรญan estar afectados son aquellos que contienen dos o mรกs variables de estado contiguas donde la suma de sus tamaรฑos es menor que 256 bits y la primera variable de estado no es un entero con signo y no de tipo bytesNN. Entre este tipo de contratos mรกs pequeรฑos de 256 bits se incluyen los Bool, enums, uint8, …, uint248, int8, …, int248, direcciรณn y otros mรกs.
La vulnerabilidad fue reportada el 31 de noviembre en el repositorio de cรณdigo de Ethereum en GitHub, posteriormente se determinรณ que la reparaciรณn del bug requiere la actualizaciรณn de los contratos inteligentes a las versiones superiores del lenguaje de programaciรณn Solidity: es decir, desde la versiรณn 0.4.4 en adelante.
La acciรณn sugerida por el equipo de desarrolladores de Ethereum, es re-compilar los contratos que aรบn no se han implementado utilizando al menos Solidity versiรณn 0.4.4 (no la versiรณn de pre-lanzamiento o la nightly version). Asimismo, tambiรฉn se recomienda desactivar, eliminar fondos o actualizar los contratos ya implementados.
Acorde al portal Coindesk, el desarrollador de Ethereum, Christian Reitwiessner, ofreciรณ recomendaciones personales:
Mi recomendaciรณn para estos contratos serรญa mantenerlos de corta duraciรณn, de modo que los potenciales efectos negativos sean pequeรฑos o hacer un anรกlisis formal adecuado del bytecode del contrato. En la actualidad estamos desarrollando herramientas para ayudar a hacer eso.
Christian Reitwiessner
Entre estos contratos inteligentes que se encuentran en riesgo, hasta ahora se desconoce cuรกl serรญa el porcentaje que representan en la totalidad de la blockchain de Ethereum.ย Reitwiessner tambiรฉn dijo a CoinDesk que habรญa realizado un anรกlisis ยซsemiautomรกticoยป de cada programa en Ethereum que era listado por el popular explorador de bloques Etherscan, y que encontrรณ que de 12.000 contratos, sรณlo cuatro eran explotables por la presencia de este bug. No obstante vale seรฑalar que no todos los contratos de la blockchain se muestran en Etherscan, ya que hay mรกs de 200.000 contratos en total, por lo que es difรญcil decir lo seguros que estรกn los fondos en los contratos restantes.
Otros usuarios en la red han llegado a mencionar que esto podrรญa ser tan solo una pequeรฑa seรฑal de que los contratos inteligentes de Ethereum tendrรญan una serie de fallas mรกs daรฑinas que hasta ahora no han sido detectadas. Esta รบltima opiniรณn basada en anteriores crรญticas a Solidity y su capacidad de ser un lenguaje robusto para la elaboraciรณn de smart contracts.
A pesar de todo esto, la reparaciรณn de esta falla en cuestiรณn es bastante fรกcil puesto que solo requiere una actualizaciรณn del lenguaje de programaciรณn Solidity, creado especรญficamente para diseรฑar contratos inteligentes, a una versiรณn superior que resuelve tal vulnerabilidad en el cรณdigo.