Este artículo es una publicación de la comunidad. El autor es Minzhi He, auditor de CertiK.

Las opiniones expresadas en este artículo son las del colaborador/autor y no reflejan necesariamente las opiniones de Binance Academy.

Resumen

Los puentes blockchain son importantes para lograr la interoperabilidad en el campo blockchain. Por tanto, la seguridad del puente es muy importante. Algunas vulnerabilidades de seguridad comunes de los puentes incluyen una validación débil dentro y fuera de la cadena, manejo inadecuado de tokens nativos y configuración incorrecta. Se recomienda probar el puente contra todos los posibles vectores de ataque para garantizar una lógica de verificación razonable.

Introducción

Bridge blockchain es un protocolo que conecta dos blockchains para permitir la interacción entre ellas. Si tienes bitcoins pero quieres participar en actividades DeFi en la red Ethereum, los puentes blockchain te permiten hacerlo sin vender bitcoins.

Los puentes blockchain son esenciales para lograr la interoperabilidad en el campo blockchain. Este puente funciona mediante varias validaciones dentro y fuera de la cadena, por lo que tiene varias vulnerabilidades de seguridad.

¿Por qué es importante la seguridad del puente?

Los puentes suelen almacenar tokens que los usuarios quieren transferir de una cadena a otra. Los puentes a menudo se implementan como contratos inteligentes y almacenan grandes cantidades de tokens a medida que se acumulan las transferencias entre cadenas, lo que los convierte en objetivos tentadores para los piratas informáticos.

Además, los puentes blockchain tienen una gran brecha de ataque porque involucran muchos componentes. Por lo tanto, los delincuentes están muy motivados para apuntar a aplicaciones entre cadenas para drenar grandes cantidades de fondos.

Los ataques a puentes han causado pérdidas de más de 1.300 millones de dólares en 2022, lo que supone el 36% de las pérdidas totales de ese año según estimaciones de CertiK.

Vulnerabilidades de seguridad comunes de los puentes

Para mejorar la seguridad de los puentes, es importante comprender las vulnerabilidades de seguridad comunes de los puentes y probarlos antes del lanzamiento. Estas vulnerabilidades se pueden clasificar en cuatro áreas.

Validación débil en cadena

Para puentes simples, especialmente aquellos diseñados para DApps específicas, la validación en cadena es mínima. El puente se basa en un backend centralizado para ejecutar operaciones básicas como acuñación, quema y transferencia de tokens, mientras que toda la verificación se realiza fuera de la cadena.

Por el contrario, otros tipos de puentes utilizan contratos inteligentes para validar mensajes y realizar verificación en cadena. En esta situación, cuando un usuario deposita fondos en una cadena, el contrato inteligente generará un mensaje firmado y devolverá la firma en la transacción. Esta firma sirve como prueba de depósito y se utiliza para verificar las solicitudes de los usuarios en otras cadenas. Este proceso debería evitar varios ataques a la seguridad, incluidos ataques de repetición y registros de depósitos falsos.

Sin embargo, si existe una vulnerabilidad durante el proceso de validación en cadena, un atacante podría causar daños graves. Por ejemplo, si un puente utiliza un árbol Merkle para validar registros de transacciones, un atacante podría generar pruebas falsas. Esto significa que pueden omitir la validación de prueba y acuñar nuevos tokens en su cuenta si el proceso de validación es vulnerable.

Algunos puentes implementan el concepto de "token envuelto". Por ejemplo, cuando un usuario transfiere DAI de Ethereum a BNB Chain, su DAI se toma del contrato de Ethereum y se emite una cantidad equivalente de DAI envuelto a BNB Chain.

Sin embargo, si estas transacciones no se validan adecuadamente, un atacante puede implementar un contrato malicioso para enrutar tokens envueltos desde el puente a la dirección incorrecta manipulando su funcionalidad.

El atacante también requiere que la víctima acepte el contrato puente para poder transferir tokens utilizando la función "transferFrom" para drenar activos del contrato puente.

Desafortunadamente, esto empeora ya que la mayoría de los puentes requieren una aprobación ilimitada de tokens por parte de los usuarios de DApp. Esta es una práctica común que reduce las tarifas del gas, pero introduce un riesgo adicional al permitir que los contratos inteligentes accedan a tokens desde una cantidad ilimitada de billeteras de usuarios. Los atacantes pueden aprovechar la falta de validación y la aprobación excesiva para transferir tokens de otros usuarios a ellos mismos.

Validación débil fuera de la cadena

En algunos sistemas puente, los servidores backend fuera de la cadena desempeñan un papel importante en la verificación de la validez de los mensajes enviados desde la cadena de bloques. En este caso, nos centramos en verificar las transacciones de depósito.

La forma en que funciona un puente blockchain con validación fuera de la cadena es la siguiente:

  1. Los usuarios interactúan con la DApp para depositar tokens en contratos inteligentes en la cadena de origen.

  2. Luego, la DApp envía el hash de la transacción de depósito al servidor backend a través de una API.

  3. Los hashes de transacciones requieren cierta validación por parte del servidor. Si se considera válido, el firmante firma el mensaje y luego envía la firma a la interfaz de usuario a través de la API.

  4. Después de recibir la firma, la DApp la verifica y luego permite al usuario retirar tokens de la cadena de destino.

El servidor backend debe garantizar que la transacción de depósito procesada realmente haya ocurrido y no haya sido falsificada. Este servidor backend determina si los usuarios pueden retirar tokens en la cadena de destino, lo que lo convierte en un objetivo de alto valor para los atacantes.

El servidor backend debe validar la estructura del evento resultante de la transacción así como la dirección del contrato que generó el evento. Si se ignora la dirección del contrato, un atacante puede implementar un contrato malicioso para falsificar un evento de depósito utilizando la misma estructura que un evento de depósito legítimo.

Si no verifica la dirección que generó el evento, el servidor backend puede asumir que este contrato es válido y firmar el mensaje. Luego, el atacante puede enviar el hash de la transacción al backend, evitando así la verificación y permitiéndole retirar tokens de la cadena de destino.

Manejo inadecuado de tokens nativos

Bridge adopta una variedad de enfoques para manejar tokens nativos y tokens de utilidad. Por ejemplo, en la red Ethereum, el token nativo es ETH y la mayoría de los tokens de utilidad siguen el estándar ERC-20.

Cuando un usuario pretende transferir su ETH a otra cadena, primero debe depositarlo en el contrato puente. Para lograr esto, los usuarios simplemente adjuntan ETH a una transacción y luego se puede recuperar la cantidad de ETH leyendo el campo "msg.value" de la transacción.

Depositar tokens ERC-20 es muy diferente a depositar ETH. Para depositar tokens ERC-20, los usuarios primero deben permitir que el contrato puente utilice sus tokens. Una vez que acepta y deposita los tokens en el contrato puente, el contrato quemará los tokens del usuario usando la función "burnFrom()" o transferirá los tokens del usuario al contrato usando la función "transferFrom()".

Un método para diferenciarlos es utilizar declaraciones if-else dentro de la misma función. Otro enfoque es crear dos funciones separadas para manejar cada escenario. Intentar depositar ETH utilizando la función de depósito ERC-20 puede resultar en la pérdida de fondos.

Al manejar una solicitud de depósito ERC-20, los usuarios normalmente proporcionan una dirección de token como entrada para la función de depósito. Esta acción plantea riesgos importantes, ya que pueden producirse llamadas externas no confiables durante las transacciones. Implementar una lista blanca que solo incluya tokens respaldados por puentes es una práctica común para minimizar el riesgo. Sólo se permiten direcciones incluidas en la lista blanca como argumentos. Esto evita llamadas externas, porque el equipo del proyecto ya está filtrando direcciones token.

Sin embargo, también surgen problemas cuando el puente maneja transferencias entre cadenas de tokens nativos, porque los tokens nativos no tienen direcciones. La dirección cero (0x000...0) representa el token original. Esto puede ser problemático, porque pasar una dirección nula a una función puede omitir la verificación de la lista blanca incluso si se implementa incorrectamente.

Cuando el contrato puente llama a "transferFrom" para transferir activos del usuario al contrato, la llamada externa a la dirección cero devuelve falso porque no se implementa ninguna función "transferFrom" en la dirección cero. Sin embargo, aún pueden ocurrir transacciones si el contrato no puede manejar el valor resultante correctamente. Esto crea una oportunidad para que los atacantes ejecuten transacciones sin transferir tokens al contrato.

Error de configuración

En la mayoría de los puentes blockchain, una posición privilegiada es responsable de incluir tokens y direcciones en listas blancas o negras, asignar o cambiar firmantes y otras configuraciones importantes. Es fundamental garantizar que todas las configuraciones sean precisas, ya que incluso los errores aparentemente triviales pueden provocar pérdidas importantes.

De hecho, en un incidente, un atacante logró eludir la verificación del registro de transferencia debido a un error de configuración. El equipo del proyecto implementó una actualización del protocolo varios días antes del hack que incluía cambiar una variable. La variable se utiliza para representar el valor predeterminado de los mensajes confiables. Este cambio hace que todos los mensajes se consideren probados automáticamente, lo que permite a los atacantes enviar mensajes a voluntad y evitar el proceso de verificación.

Cómo mejorar la seguridad del puente

Las cuatro vulnerabilidades comunes de los puentes descritas anteriormente demuestran los desafíos que implica garantizar la seguridad en un ecosistema blockchain interconectado. Hay consideraciones importantes con respecto a abordar cada una de estas vulnerabilidades. No existe una pauta única que se aplique a todo.

Por ejemplo, es difícil proporcionar pautas generales para garantizar un proceso de verificación sin errores, ya que cada puente tiene requisitos de verificación únicos. El enfoque más eficaz para evitar eludir la verificación es probar minuciosamente el puente contra todos los posibles vectores de ataque y garantizar que la lógica de verificación tenga sentido.

En resumen, es importante realizar pruebas rigurosas para detectar posibles ataques y prestar especial atención a las vulnerabilidades de seguridad comunes en los puentes.

Clausura

Debido a su alto valor, los puentes entre cadenas han sido durante mucho tiempo un objetivo para los atacantes. Los constructores pueden fortalecer la seguridad de los puentes realizando pruebas exhaustivas antes de su implementación y realizando auditorías de terceros para reducir el riesgo de costosos ataques que han afectado a los puentes en los últimos años. Los puentes son esenciales en un mundo de múltiples cadenas, pero la seguridad debe ser una preocupación principal al diseñar y construir una infraestructura Web3 eficaz.

Otras lecturas

¿Qué es Bridge Blockchain?

¿Qué es la interoperabilidad entre cadenas?

Tres puentes criptográficos populares y cómo funcionan

¿Qué son los tokens envueltos?

Descargo de responsabilidad y advertencia de riesgo: este contenido se le presenta "tal cual" para información general y fines educativos únicamente, sin representación ni garantía de ningún tipo. Este contenido no debe interpretarse como asesoramiento financiero, legal u otro tipo de asesoramiento profesional ni pretende recomendar la compra de ningún producto o servicio en particular. Debe buscar asesoramiento de asesores profesionales adecuados. Si el artículo es una contribución de un colaborador externo, tenga en cuenta que las opiniones expresadas son las del colaborador externo y no reflejan necesariamente las opiniones de Binance Academy. Lea nuestro descargo de responsabilidad completo aquí para obtener más detalles. Los precios de los activos digitales pueden ser volátiles. El valor de su inversión puede aumentar o disminuir. Es posible que no recupere el importe invertido. Usted es totalmente responsable de sus decisiones de inversión. Binance Academy no es responsable de las pérdidas que pueda experimentar. Este material no debe considerarse asesoramiento financiero, legal ni profesional de otro tipo. Para obtener más información, lea nuestros Términos de uso y Advertencia de riesgos.