Este artículo es un envío de la comunidad. El autor es Minzhi He, auditor de CertiK.

Las opiniones de este artículo pertenecen al colaborador/autor y no reflejan necesariamente las de Binance Academy.

TL;DR

Los puentes blockchain son fundamentales para lograr la interoperabilidad en el espacio blockchain. Por tanto, la seguridad del puente es de suma importancia. Algunas vulnerabilidades comunes de seguridad del puente incluyen validación débil dentro y fuera de la cadena, manejo inadecuado de tokens nativos y configuraciones incorrectas. Se recomienda probar el puente contra todos los posibles vectores de ataque para garantizar una lógica de verificación sólida.

Introducción

Un puente blockchain es un protocolo que conecta dos blockchains para permitir interacciones entre ellas. Si posee bitcoins pero desea participar en la actividad DeFi en la red Ethereum, un puente blockchain le permite hacerlo sin vender sus bitcoins.

Los puentes blockchain son fundamentales para lograr la interoperabilidad dentro del espacio blockchain. Funcionan utilizando varias validaciones dentro y fuera de la cadena y, por lo tanto, tienen diferentes vulnerabilidades de seguridad.

¿Por qué es fundamental la seguridad del puente?

Un puente suele contener el token que un usuario desea transferir de una cadena a otra. A menudo implementados como contratos inteligentes, los puentes contienen una cantidad significativa de tokens a medida que se acumulan las transferencias entre cadenas, lo que los convierte en objetivos lucrativos para los piratas informáticos.

Además, los puentes blockchain tienen una gran superficie de ataque ya que involucran muchos componentes. Teniendo esto en cuenta, los actores maliciosos están muy motivados para apuntar a aplicaciones entre cadenas para drenar grandes sumas de fondos.

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

Vulnerabilidades comunes de seguridad de puentes

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

Validación débil en cadena

Para puentes simples, especialmente aquellos diseñados para DApps específicas, la validación en cadena se mantiene al mínimo. Estos puentes dependen de un backend centralizado para ejecutar operaciones básicas como acuñación, quema y transferencias de tokens, mientras que todas las verificaciones se realizan fuera de la cadena.

Por el contrario, otros tipos de puentes utilizan contratos inteligentes para validar mensajes y realizar verificaciones en cadena. En este escenario, cuando un usuario deposita fondos en una cadena, el contrato inteligente genera un mensaje firmado y devuelve la firma en la transacción. Esta firma sirve como prueba del depósito y se utiliza para verificar la solicitud de retiro del usuario en la otra cadena. Este proceso debería poder prevenir varios ataques a la seguridad, incluidos ataques de repetición y registros de depósitos falsificados.

Sin embargo, si hay una vulnerabilidad durante el proceso de validación en cadena, el atacante puede causar daños graves. Por ejemplo, si un puente utiliza el árbol Merkle para validar el registro de la transacción, un atacante puede generar pruebas falsificadas. 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.

Ciertos puentes implementan el concepto de "tokens envueltos". Por ejemplo, cuando un usuario transfiere DAI de Ethereum a la cadena BNB, su DAI se toma del contrato de Ethereum y se emite una cantidad equivalente de DAI envuelto en la cadena BNB.

Sin embargo, si esta transacción no se valida adecuadamente, un atacante podría implementar un contrato malicioso para enrutar los tokens envueltos desde el puente a una dirección incorrecta manipulando la función.

Los atacantes también necesitan que las víctimas aprueben el contrato puente para transferir tokens utilizando la función "transferFrom" para drenar activos del contrato puente.

Desafortunadamente, esto empeora porque muchos puentes solicitan una aprobación infinita de tokens por parte de los usuarios de DApp. Esta es una práctica común que reduce las tarifas del gas, pero crea riesgos adicionales al permitir que un contrato inteligente acceda a una cantidad ilimitada de tokens desde la billetera del usuario. 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, el servidor backend fuera de la cadena juega un papel fundamental en la verificación de la legitimidad de los mensajes enviados desde la cadena de bloques. En este caso, nos centramos en la verificación de transacciones de depósito.

Un puente blockchain con validación fuera de la cadena funciona de la siguiente manera:

  1. Los usuarios interactúan con la DApp para depositar tokens en el contrato inteligente 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. El hash de la transacción está sujeto a varias validaciones por parte del servidor. Si se considera legítimo, un firmante firma un mensaje y envía la firma a la interfaz de usuario a través de la API.

  4. Al recibir la firma, la DApp la verifica y permite al usuario retirar sus tokens de la cadena de origen.

El servidor backend debe asegurarse de que la transacción de depósito que procesa haya ocurrido realmente y no haya sido falsificada. Este servidor backend determina si un usuario puede retirar tokens en la cadena de destino y, por lo tanto, es un objetivo de alto valor para los atacantes.

El servidor backend necesita validar la estructura del evento emitido de la transacción, así como la dirección del contrato que emitió el evento. Si se descuida esto último, un atacante podría implementar un contrato malicioso para falsificar un evento de depósito con la misma estructura que un evento de depósito legítimo.

Si el servidor backend no verifica qué dirección emitió el evento, lo considerará una transacción válida y firmará el mensaje. Luego, el atacante podría enviar el hash de la transacción al backend, evitando la verificación y permitiéndole retirar los tokens de la cadena de destino.

Manejo inadecuado de tokens nativos

Los puentes adoptan diferentes 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 se adhieren al estándar ERC-20.

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

Depositar tokens ERC-20 difiere significativamente de depositar ETH. Para depositar un token ERC-20, el usuario primero debe permitir que el contrato puente gaste sus tokens. Después de haber aprobado esto y depositado los tokens en el contrato puente, el contrato quemará los tokens del usuario usando la función "burnFrom()" o transferirá el token del usuario al contrato usando la función "transferFrom()".

Un método para diferenciar esto es utilizar una declaración 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 estos fondos.

Al manejar solicitudes de depósito ERC-20, los usuarios generalmente proporcionan la dirección del token como entrada para la función de depósito. Esto plantea un riesgo importante ya que pueden producirse llamadas externas no confiables durante la transacción. Implementar una lista blanca que solo incluya los tokens admitidos por el puente es una práctica común para minimizar el riesgo. Solo se permite pasar como argumentos las direcciones incluidas en la lista blanca. Esto evita llamadas externas ya que el equipo del proyecto ya ha filtrado la dirección del token.

Sin embargo, también pueden surgir problemas cuando los puentes manejan la transferencia entre cadenas de tokens nativos, ya que el token nativo no tiene una dirección. Una dirección cero (0x000...0) es representativa del token nativo. Esto puede ser problemático ya que pasar la dirección cero a la 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 ya que no hay ninguna función "transferFrom" implementada en la dirección cero. Sin embargo, la transacción aún puede ocurrir si el contrato no maneja el valor de retorno de manera adecuada. Esto crea una oportunidad para que los atacantes ejecuten la transacción sin transferir ningún token al contrato.

Mala configuración

En la mayoría de los puentes de blockchain, un rol privilegiado es responsable de incluir tokens y direcciones en listas blancas o negras, asignar o cambiar firmantes y otras configuraciones críticas. Garantizar que todas las configuraciones sean precisas es crucial, ya que incluso los descuidos aparentemente triviales pueden provocar pérdidas importantes.

De hecho, hubo un incidente en el que el atacante evitó con éxito la verificación del registro de transferencia debido a una mala configuración. El equipo del proyecto implementó una actualización del protocolo unos días antes del hack, que implicó cambiar una variable. La variable se utilizó para representar el valor predeterminado del mensaje confiable. Este cambio dio como resultado que todos los mensajes se consideraran probados automáticamente, lo que permitió a un atacante enviar un mensaje arbitrario y pasar el proceso de verificación.

Cómo mejorar la seguridad del puente

Las cuatro vulnerabilidades comunes de los puentes explicadas anteriormente demuestran los desafíos para garantizar la seguridad en un ecosistema blockchain interconectado. Existen consideraciones importantes para manejar cada una de estas vulnerabilidades, y no existe un único manual que se aplique a todas ellas.

Por ejemplo, proporcionar pautas generales para garantizar un proceso de verificación sin errores es un desafío, 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 sea sólida.

En resumen, es fundamental realizar pruebas rigurosas contra posibles ataques y prestar especial atención a las vulnerabilidades de seguridad más comunes en los puentes.

Pensamientos finales

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 sus puentes realizando pruebas exhaustivas previas a la implementación y participando en auditorías de terceros, reduciendo el riesgo de ataques devastadores que han afectado a los puentes en los últimos años. Los puentes son fundamentales 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 un puente 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. No debe interpretarse como asesoramiento financiero, legal o de otro tipo, ni pretende recomendar la compra de ningún producto o servicio específico. Debe buscar su propio consejo de asesores profesionales adecuados. Cuando el artículo sea aportado por un colaborador externo, tenga en cuenta que las opiniones expresadas pertenecen al colaborador externo y no reflejan necesariamente las 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 subir o bajar y es posible que no recupere el monto invertido. Usted es el único responsable de sus decisiones de inversión y Binance Academy no es responsable de las pérdidas en las que pueda incurrir. Este material no debe interpretarse como asesoramiento financiero, legal o de otro tipo. Para obtener más información, consulte nuestros Términos de uso y Advertencia de riesgos.