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.