Incidentes Asociados
Ups. La primera Organización Autónoma Descentralizada de Ethereum, la DAO, ha perdido dinero, mucho. En concreto, ha perdido el equivalente a unos 60 millones de dólares. Esto no se debe a que sea una idea tonta y nadie se moleste con ella (aunque eso también podría ser cierto). No, esto fue un drenaje deliberado de fondos por parte de alguien que detectó una laguna en el "contrato inteligente" de la DAO y la explotó.
Es cierto que la pérdida está completamente en el "éter" de la criptomoneda nativa de Ethereum, por lo que se le puede perdonar por pensar que es dinero divertido y que realmente no importa. Pero para los inversores de DAO, la pérdida es real y es comprensible que estén molestos. Y Ethereum mismo ha sufrido un golpe de credibilidad.
Entonces, ¿qué pasó exactamente? Soy reacio a citar nada escrito por los desarrolladores de Ethereum, ya que tienden a usar un lenguaje muy técnico, pero esto del niño prodigio de Ethereum, Vitalik Buterin, mientras el ataque estaba en curso es razonablemente claro:
Se encontró y explotó un ataque en el DAO, y el atacante se encuentra actualmente en el proceso de drenar el éter contenido en el DAO en un DAO secundario. El ataque es una vulnerabilidad de llamada recursiva, en la que un atacante llama a la función "dividir" y luego llama a la función de división recursivamente dentro de la división, recopilando así éter muchas veces en una sola transacción.
Para los geeks entre ustedes, Phil Daian en Hacking, Distributed tiene una excelente disección de cómo funcionó exactamente. Para los mortales comunes, todo lo que necesita saber es que el atacante de DAO creó un DAO "niño", luego drenó los fondos de DAO en el niño.
Y aquí es donde todo se vuelve involuntariamente divertido. No hay absolutamente nada nuevo en drenar fondos corporativos hacia una nueva empresa. Los malversadores de todo el mundo han estado haciendo esto durante siglos. En el mundo real, es ilegal. Pero en el caso de la DAO, no lo es. El “contrato inteligente” de la DAO lo permite.
En el contrato inteligente de DAO, no hay absolutamente nada de malo en crear un DAO secundario. De hecho, se creó para fomentar la creación de DAO infantiles. Así es como el proyecto DAO pretendía conquistar el mundo. Entonces, la función "dividir" que permite la creación de niños es una característica, no un error.
Y, por supuesto, cualquier persona con un saldo de éter puede retirar sus fondos si así lo desea. Eso nuevamente no es un error, es una característica. El problema es la combinación de la función de división con el retiro de fondos, como observa Daian:
….a pesar de que retirarRecompensa por no era vulnerable por sí mismo, y aunque splitDAO no era vulnerable sin retirarRecompensaPor, la combinación resulta mortal. Esta es probablemente la razón por la que tantas personas diferentes pasaron por alto este exploit en la revisión tantas veces: los revisores tienden a revisar las funciones una a la vez y asumen que las llamadas a las subrutinas seguras funcionarán de manera segura y según lo previsto.
(En algún momento de las dos décadas desde que era programador de software, los codificadores se olvidaron de la programación defensiva y las pruebas de excepción. Sin embargo, estoy divagando).
Pero el punto es que el contrato inteligente de DAO, tal como está codificado actualmente, PERMITE esta combinación mortal. Y el contrato inteligente es el único contrato legal de la DAO. Así que la malversación es legal. Está escrito en el código.
Sin duda, el atacante aún no puede llegar al éter que ha drenado. El niño DAO está bloqueado durante 28 días. Entonces, la comunidad de Ethereum tiene un poco menos de un mes para decidir qué hacer.
Ahora, los desarrolladores de Ethereum son buenas personas. Y los inversores de DAO han perdido MUCHO dinero. Por lo tanto, algunos desarrolladores quieren revertir la transacción, restaurar el DAO al estado en el que se encontraba antes del ataque y eliminar el DAO secundario. “No dejemos que el atacante se salga con la suya con los fondos”, dijo Griff Green, uno de los desarrolladores.
Otros (incluido Buterin) quieren que se congelen los fondos. Se ha propuesto una "bifurcación suave" que extendería efectivamente el bloqueo de 28 días indefinidamente.
Pero el atacante no tiene nada de eso. Ha escrito una carta abierta a la comunidad de Ethereum afirmando que, dado que su acción estaba permitida por el código, y el código es la base legal de la DAO, tiene derecho legítimo al dinero:
Examiné detenidamente el código de The DAO y decidí participar después de encontrar la función en la que la división se recompensa con éter adicional. He hecho uso de esta función y he reclamado legítimamente 3 641 694 éter, y me gustaría agradecer a la DAO por esta recompensa. Tengo entendido que el código DAO contiene esta función para promover la descentralización y fomentar la creación de "DAO secundarios".
Y continúa amenazando con emprender acciones legales en el mundo real si se intenta revertir la transacción o congelar los fondos:
Estoy decepcionado por aquellos que caracterizan el uso de esta característica intencional como "robo". Estoy haciendo uso de esta función explícitamente codificada según los términos del contrato inteligente y mi bufete de abogados me ha informado que mi acción cumple totalmente con las leyes penales y de responsabilidad civil de los Estados Unidos... Me reservo todos los derechos para emprender cualquier acción legal contra cualquier cómplice de robo ilegítimo, congelamiento o incautación de mi legítimo