-
La falla de seguridad de Optimism hubiese permitido a un atacante tener acceso a tokens ilimitados.
-
Jay Freeman se considera a sí mismo un investigador de seguridad de sombrero gris.
Algunos errores son más valiosos que otros. Esta es quizá la primera lección que podemos aprender del caso de Jay Freeman, un programador que descubrió un bug en una aplicación de contratos inteligentes de segunda capa de Ethereum y recibió una recompensa de USD 2.000.042.
Quizá se trata de la recompensa más grande que jamás se ha pagado por encontrar un error de programación, al menos entre las que se han hecho públicas.
Freeman, quien también es conocido como saurik por su trabajo en Cydia, una aplicación que funciona como una alternativa de la App Store para dispositivos iOS, publicó el día de ayer un detallado recuento sobre cómo encontró un error de programación en el código de Optimism Rollup.
La falla de programación hubiese permitido a un atacante «tener acceso a una cantidad ilimitada de tokens» OETH. De manera que el hallazgo y su informe evitan que Optimism, una red de segunda capa que ofrece transacciones baratas para el mercado de Ethereum, haya podido sufrir un hackeo de grandes proporciones económicas, si no se hubiese reconocido y arreglado a tiempo.
De acuerdo con la detallada descripción de Freeman, la vulnerabilidad se encontraba en la máquina virtual que ejecutaba los contratos inteligentes de Optimism.
Para tener una idea de cómo funciona Optimism y lo que representa esta vulnerabilidad, en necesario comprender que el procedimiento que utiliza Optimism para ejecutar transacciones a través de su red, requiere que el valor trasferido se redima o se transfiera periódicamente a un contrato inteligente en Ethereum.
Esto se realiza a través de un «puente» que permite bloquear ETH en un contrato inteligente para crear los tokens OETH en la cadena de bloques de Optimism (que son literalmente pagarés de deuda o IOU, las siglas en inglés de «yo te debo»), de manera que el dinero se hace efectivo, por decirlo en términos simples, cada vez que es necesario hacer un balance de fondos del lado de Ethereum.
La vulnerabilidad de Optimism no era tan optimista
En palabras de Jay Freeman, «con la habilidad de imprimir a escondidas IOU (los tokens de Optimism OETH) sobre el otro lado del puente, todavía puedes intentar (lentamente) retirar dinero de las reservas, pero ahora parecerá una transferencia legítima, lo que hace más fácil actuar sin ser notado».
Esta capacidad de crear tokens de manera ilimitada, especula Freeman, hubiese podido dar a un atacante el poder de ir a cada exchange que se ejecuta en la segunda capa de Ethereum y comprar cantidades ilimitadas de otros tokens. Además, con ese alcance, el atacante podría «manipular aún más los oráculos de precio y aprovechar otros ataques» antes de que alguien se dé cuenta de que todo ese dinero es falso, agrega.
La vulnerabilidad de Optimism expuesta
Según Jay Freeman, su interés en Optimism comenzó en 2020, cuando pensó que las soluciones de esta compañía podrían servir para desarrollar su propio trabajo en Orchid, una red que habilita una VPN descentralizada a través de la cual sus usuarios pueden comprar ancho de banda de un grupo de proveedores globales. Orchid usa un token ERC 20 y Freeman necesitaba un mecanismo para habilitar micropagos a través de varias blockchains.
En concreto, lo que observó Freeman, quien se describe a sí mismo como un investigador de seguridad de sombrero gris, fue que cuando un contrato alcanza el script o instrucción SELFDESTRUCT (autodestrucción) designa un beneficiario para «recibir los fondos que aún posee».
La implementación de este código de operación en la máquina virtual de Ethereum, que utiliza el cliente go-ethereum, agrega saldo al beneficiario y luego hace un llamado para que se ejecute otra instrucción , denominada StateDB.Suicide, que borra el saldo de la cuenta y lo deja en 0. Sin embargo, esto realmente se pospone hasta que toda la transacción finaliza.
En algún punto, script StateDB.Suicide sigue modificando directamente el campo de saldo del contrato, pero está vez en la máquina virtual de Optimism, sin hacer los llamados a los demás scripts que deberían cambiar el status del contrato ya finalizado.
Sin embargo, esto no ocurría como se había planeado, porque cuando un contrato se «autodestruía» su saldo se entregaba al beneficiario y también se conservaba. Si un contrato tenía 10 ETH, se creaban otros 10 ETH de “bits delgados” y se entregaban al beneficiario.
En Twitter, Freeman publicó un tuit donde señalaba que un repositorio de GitHub, de una bifurcación de Optimism, todavía no había implementado el parche, incluso después de la divulgación de los hallazgos del error.
Un investigador de seguridad de sombrero gris
Lo más sorprendente de todo esto es que Freeman intentó comprobar si alguien había usado esta vulnerabilidad a través de una simulación con la mima máquina virtual de Optimism, revisando cada vez que se utilizó la instrucción para autodestruir un contrato con saldo (que admite que no es un procedimiento muy común).
Halló entonces que en tres meses solo un usuario lo intentó, justamente el día de nochebuena de 2021. En esas transacciones, que pueden verse en el explorador de bloques de Optimism alojado en EtherScan, se registró cómo se crearon y destruyeron tres contratos. Las dos primeras veces por parte del beneficiario de los contratos inteligentes de Ethereum y la tercera vez por parte del usuario de Optimism.
Cuando Freeman rastreó a este usuario, convencido de que esta persona se había dado cuenta de la vulnerabilidad, descubrió que era de hecho un empleado de EtherScan. Esto, «simplemente prueba que, a veces, incluso las personas que miran directamente un error no siempre ven las implicaciones indirectas de seguridad«, razona. Agrega que él mismo no ha tenido tiempo de verificar si el error no fue utilizado en alguna de las dos bifurcaciones de Optimism, conocidas como Boba y Metis.
La velocidad vs la seguridad
Jay Freeman también se dedica a dar conferencias, y reflexiona constantemente sobre ética en programación o la ética de hackear, sobre todo cuando considera los problemas de hardware limitado y la lucha contra la gestión de los derechos digitales. «Las compensaciones morales se han vuelto algo claras para mí con los años», argumenta.
Advierte que en su experiencia como investigador de seguridad «trabajar con criptomonedas se siente mucho más turbio», más aún cuando la destrucción como ética se esconde detrás de slogans como «el código es ley».
Lo aterrador de trabajar con criptomonedas, piensa Freeman, es que muchos consideran que hay que «jugar rápido» sin importar las consecuencias económicas, y que aquellos que «pasan demasiado tiempo protegiendo la privacidad de los usuarios antes de lanzar nuevas funciones, están en desventaja».
La perseverancia, y el grado de detalle de la investigación y observación de este investigador de seguridad, puede considerarse la segunda lección de esta historia.