OpenZeppelin, empresa especializada en seguridad en redes blockchain, reveló una vulnerabilidad crítica en la integración de los estándares ERC-2771 y Multicall en Ethereum. El problema puso en riesgo a muchos usuarios y proyectos, y hasta permitió el robo de fondos en ethers (ETH) y en la stablecoin USD Coin (USDC).
La «integración problemática» de ERC-2771 y Multicall que describe OpenZeppelin en su comunicado afecta a una amplia gama de contratos inteligentes, incluyendo aquellos que respaldan a los tokens ERC-20 (que usan las stablecoins, por ejemplo) y ERC-721 (el de los tokens no fungibles o NFT).
Esta vulnerabilidad generaba un potencial ataque de «address spoofing», es decir, «engaño de dirección» o «parodia de dirección». Efectivamente, se registraron ataques que llevaron al robo de 87 ETH (aproximadamente USD 205.000, según el índice de precios de CriptoNoticias) y 17.394 USDC.
Cabe destacar que la vulnerabilidad se detectó el 20 de noviembre. Open Zeppelin había recibido una advertencia sobre la vulnerabilidad por parte del equipo de ThirdWeb, empresa que brinda soluciones tecnológicas para proyectos en la denominada web3. El tema se hizo público dos semanas más tarde para poder trabajar en una solución antes de anunciarlo, como suele pasar en estos casos.
El equipo de OpenZeppelin «validó rápidamente que el problema no es específico de las implementaciones contenidas en la biblioteca de contratos de OpenZeppelin», según informó la empresa. Asimismo, ThirdWeb reconoció dos casos de contratos inteligentes afectados y recomendó ciertas medidas de mitigación a sus clientes.
Cómo identificar el riesgo y prevenir ataques
Según detalla el comunicado, los contratos inteligentes de Ethereum que implementan tanto Multicall como ERC-2771 son vulnerables al «Arbitrary Address Spoofing». Esto permite a los atacantes cambiar la identidad del remitente, utilizando datos engañosos y aprovechando una función específica llamada delegatecall de Multicall. En resumen, podrían hacerse pasar por otra persona o entidad de manera fraudulenta.
Para la identificación de los contratos vulnerables, OpenZeppelin proporciona herramientas como Code Inspector. De igual modo, ThirdWeb ofrece una plataforma para consultar sobre la seguridad de contratos inteligentes implementados usando su biblioteca de contratos.
Algunas de las medidas de mitigación recomendadas consisten en desactivar los forwarders de confianza, pausar contratos si es posible, y alentar a los usuarios a revocar aprobaciones de permisos. Además, se sugiere la preparación de una actualización o la evaluación de opciones de tomar instantáneas para volver los contratos irrecuperables a un estado seguro previo, dice el texto.
Mientras tanto, OpenZeppelin lanzó una actualización para OpenZeppelin Contracts (versiones 4.x y 5.x) que sí habilita un uso seguro de Multicall con ERC-2771. La nueva versión de Multicall incorpora una longitud de sufijo de contexto para identificar y adaptarse a llamadas de forwarders confiables, de modo que consigue minimizar riesgos, explican.
En el contexto de Ethereum, un «forwarder» es un contrato que facilita transacciones entre usuarios y contratos inteligentes. Este contrato actúa como un intermediario, retransmitiendo o «reenviando» las transacciones desde el usuario al contrato inteligente y viceversa.
Los estándares afectados por la vulnerabilidad
El estándar ERC-2771 en Ethereum se refiere a un «requerimiento de comentario en Ethereum» (ERC, por sus siglas en inglés) que establece un estándar para transacciones de metatransacciones. En lugar de que la dirección del remitente en una transacción sea directamente la del usuario, el estándar ERC-2771 permite que un «forwarder» actúe como intermediario. El remitente real se verifica mediante una firma en los datos de la transacción.
Este estándar asegura que la información sobre el remitente original se transmita adecuadamente al contrato que se está llamando. Además, permite que un tercero pague el gas necesario en nombre del emisor original de la transacción. Así, mejora la eficiencia y la usabilidad de las transacciones en la red Ethereum.
Por otro lado, el estándar «Multicall» o ERC-6357, se refiere a un contrato inteligente que permite realizar múltiples llamadas a funciones en una única transacción. En lugar de enviar transacciones separadas para cada función que se desea ejecutar, Multicall agrupa estas llamadas en una sola transacción, lo que ahorra costos de gas.
En el contexto de la vulnerabilidad discutida, la integración problemática de Multicall con ERC-2771 en algunos contratos Ethereum ha creado una vulnerabilidad conocida como «Arbitrary Address Spoofing». Esta vulnerabilidad permite a los atacantes manipular la resolución del remitente de manera maliciosa, lo que puede resultar en el robo de fondos u otras actividades fraudulentas.