Insights

Cripto y hackeo: Las pesadillas de Black Hat

Incidentes cripto de black hat (puentes, claves, ingeniería social y exploits de gobernanza) y las defensas lentas y costosas que adoptan los equipos serios.

Publicado Equipo de Netts 16 min de lectura

También disponible en: EnglishРусский中文ไทยFrançaisУкраїнськаTürkçeहिंदीفارسیالعربيةHausaPortuguêsTiếng Việt한국어日本語Bahasa IndonesiaDeutschTagalog

Cripto y hackeo: Las pesadillas de Black Hat
Contenido
  1. Dónde se originan los exploits de smart contracts
  2. Consecuencias y el Hard Fork
  3. La era de la lógica no inicializada y los Delegate Calls
  4. El bloqueo de las billeteras Multi-Sig
  5. El espejismo criptográfico de los puentes Cross-Chain
  6. El exploit del puente Nomad
  7. Bugs de compiladores y manipulación del mercado
  8. Una lucha constante entre el código y sus consecuencias

El ecosistema cripto a menudo se presenta como una fortaleza de criptografía, consenso descentralizado y registros inmutables. Sin embargo, la realidad de esta tierra prometida digital es mucho más compleja y peligrosa. Los medios convencionales suelen hablar del hackeo en el mundo cripto a través de la ingeniería social, campañas de phishing o simples estafas donde se engaña a un usuario desprevenido para que introduzca la dirección de un exchange o su clave privada en un sitio malicioso.

Pero este artículo ignorará por completo esos fallos de origen humano. Aquí hablaremos de hackeo puro. Este es el terreno de la ciberseguridad vulnerada y el código profundamente defectuoso que da lugar a brechas catastróficas. Son los sueños de los hackers de sombrero negro (black hat), donde el código se convierte en un arma contra sus propios creadores, drenando cientos de millones de dólares en cuestión de minutos sin disparar un solo tiro y llevándonos al límite de la falibilidad lógica, los bugs de compiladores y los descuidos arquitectónicos.

Dónde se originan los exploits de smart contracts

Para empezar a entender el hackeo puro de smart contracts se requiere una explicación: uno de los casos más notorios en la historia de DeFi, que cambió el rumbo de Ethereum para siempre. En los primeros días de las blockchains programables, existió un proyecto llamado The DAO. El fondo pretendía ser una especie de fondo de capital de riesgo descentralizado gestionado en su totalidad por smart contracts, sin intervención humana.

El contrato había atraído millones de dólares en Ether de inversores que esperaban votar propuestas y obtener recompensas. Sin embargo, los desarrolladores no implementaron el proceso de retiro de forma segura, dando lugar a un bug conocido como reentrancy (reentrancia).

Reentrancia: un smart contract llama a un contrato externo pero no actualiza su estado interno. Por ejemplo, en The DAO la función de retiro primero transfería los fondos solicitados al usuario y solo después actualizaba el balance del usuario con la cantidad retirada. Un hacker black hat se dio cuenta de que podía desplegar un smart contract malicioso con una función fallback.

La función fallback se ejecutaba cada vez que The DAO enviaba fondos a este contrato malicioso. Esta función no se limitaba a aceptar los fondos, sino que volvía a llamar a la función de retiro de The DAO de inmediato. Esto activaba la función fallback una vez más, la cual The DAO ejecutaba, dado que el saldo del hacker aún no se había actualizado tras el primer retiro.

Este proceso se repitió una y otra vez, extrayendo millones de dólares de The DAO antes de que la red pudiera responder.

Consecuencias y el Hard Fork

Las secuelas de este hackeo fueron algo nunca antes visto. La red estuvo en peligro de colapsar y se robó un gran porcentaje de todo el Ether existente. Esto generó una crisis técnica y existencial para la comunidad, lo que finalmente llevó a implementar un hard fork para revertir el historial de la blockchain y devolver los fondos.

Esta controvertida decisión provocó una división permanente, dando lugar a Ethereum y Ethereum Classic. Hoy en día, esta vulnerabilidad en particular es bien conocida y está mitigada en su mayor parte gracias al patrón Checks-Effects-Interactions (Comprobaciones-Efectos-Interacciones). Este patrón establece que un contrato primero debe validar todas las condiciones, solo entonces actualizar su estado interno, y dejar las llamadas a contratos externos exclusivamente para la última etapa.

Sin embargo, aunque las herramientas de auditoría automatizadas detectan la reentrancia básica con gran facilidad, los ataques sutiles de reentrancia entre múltiples contratos (cross-contract) aún pueden ocurrir en escenarios muy particulares y específicos, lo que demuestra que incluso los conceptos más afianzados pueden metamorfosearse en nuevos vectores de ataque.

La era de la lógica no inicializada y los Delegate Calls

La comunidad de desarrolladores asimiló rápidamente las lecciones aprendidas de The DAO y, desde entonces, diseñó sistemas con una complejidad cada vez mayor, recurriendo a conceptos como contratos de librerías y patrones de proxy para ahorrar gas y facilitar la capacidad de actualización. Dentro de esta complejidad surgió otro vector de hackeo puro, cuyo ejemplo más infame fueron las vulnerabilidades de la billetera multifirma de Parity (Parity Multi-Sig Wallet).

Parity es un cliente de Ethereum ampliamente utilizado que ofrecía un smart contract para una billetera multifirma cuya lógica principal residía en un contrato de librería central. El objetivo era optimizar los recursos, ya que muchas billeteras podían apuntar a la misma librería en lugar de desplegar el mismo código varias veces.

Cripto y hackeo: Las pesadillas de Black Hat

Esta clase de vulnerabilidad se debió a una mala interpretación de la función delegatecall y a variables de estado no inicializadas. La función delegatecall permite que un contrato ejecute una función de otro contrato, pero otorgando a dicha función acceso al almacenamiento del contrato que la llama. En el contrato de la librería de Parity existía una función para inicializar a los propietarios de la billetera.

Sin embargo, el contrato de la librería en sí nunca se había inicializado. Un hacker descubrió que podía llamar a la función de inicialización directamente en el contrato de la librería y proclamarse su propietario. Tras tomar el control de la librería, ejecutó una función para autodestruirla.

El bloqueo de las billeteras Multi-Sig

Las billeteras multifirma que dependían de esa librería quedaron inmediatamente inservibles en cuanto esta fue destruida. Toda la lógica necesaria para procesar una transacción, permitir retiros o incluso consultar un saldo simplemente desapareció. A lo largo de este proceso, debido a un puro error de arquitectura, cientos de millones de dólares en Ether no fueron robados, sino congelados físicamente.

Esto puso en evidencia el peligro extremo de los contratos de lógica no inicializados y los sutiles riesgos asociados a las funciones delegatecall; riesgos que hoy parecen de conocimiento común, pero que no se comprendían tan bien en aquel momento. Para subsanar esto, los desarrolladores ahora confían en modificadores especiales de inicialización que garantizan que un contrato solo pueda inicializarse una vez, y con frecuencia asignan valores ficticios al estado del contrato lógico del desplegador para que nadie pueda reclamar su propiedad.

Aunque hoy en día es poco probable que ocurra exactamente la misma situación, el riesgo general de gestionar incorrectamente un patrón de proxy sigue siendo algo que debe evaluarse con sumo cuidado en cualquier arquitectura sólida de finanzas descentralizadas.

El espejismo criptográfico de los puentes Cross-Chain

Con la expansión del ecosistema cripto a más de una blockchain, surgió una fuerte demanda de interoperabilidad, materializada en diferentes tipos de puentes cross-chain (entre cadenas). Estos protocolos permiten bloquear activos en una red y acuñar su representación en otra. Dado el inmenso volumen de activos que custodian, se convirtieron en el objetivo soñado para los hackers black hat.

El exploit del puente Wormhole es un recordatorio escalofriante de cómo un pequeño detalle omitido en la implementación puede hacer fracasar por completo una verificación criptográfica compleja. Wormhole permitía transferir activos entre Solana y Ethereum. Esto requería que un grupo de guardianes observara un evento en una cadena y firmara un mensaje para acreditarlo. Luego, la cadena de destino verificaba estas firmas antes de acuñar los nuevos tokens.

El punto débil residía en la verificación de firmas dentro del smart contract de Solana. La verificación criptográfica corría a cargo de un programa nativo de Solana invocado por el contrato. Sin embargo, los desarrolladores de Wormhole no comprobaron que el programa invocado fuera realmente el programa del sistema oficial. El hacker creó un programa que siempre devolvía una respuesta exitosa, sin importar cuáles fueran los datos de entrada.

Cripto y hackeo: Las pesadillas de Black Hat

A continuación, se le indicó al contrato de Wormhole que utilizara esta aplicación falsa para la validación. Bajo la falsa premisa de que las firmas eran válidas, el contrato procedió a acuñar cientos de millones de dólares en wrapped Ethereum en Solana, sin que existiera ningún Ethereum bloqueado en el otro extremo. Luego, el hacker transfirió estos tokens recién acuñados y sin respaldo de vuelta a Ethereum, vaciando el protocolo de sus activos reales.

Fue una ejecución impecable y altamente técnica contra el modelo de validación de cuentas de Solana. Esto se corrigió implementando validaciones más estrictas para verificar que el entorno de ejecución corresponda exactamente a la dirección oficial del sistema codificada de forma fija. Las repercusiones fueron monumentales, requiriendo un rescate financiero por parte de los patrocinadores del proyecto para evitar el colapso sistémico del ecosistema DeFi en Solana.

Una vulnerabilidad de este tipo podría repetirse en el futuro debido a las características inherentes del paradigma de desarrollo de smart contracts, en especial en entornos fuertemente basados en modelos de cuentas como Solana, si los desarrolladores no aplican rigurosos controles de validación y verificación para cada entidad externa invocada en sus smart contracts.

El exploit del puente Nomad

Así como Wormhole fue un ataque coordinado y específico, el exploit del puente Nomad demostró lo fácil que resulta que un simple fallo de lógica suma a un protocolo en un caos desenfrenado y colectivo. Para implementar la mensajería cross-chain, Nomad utilizaba un modelo de optimistic rollup basado en un árbol de Merkle para demostrar la validez de los mensajes. Sin embargo, al desplegar una actualización del protocolo, los desarrolladores cometieron un error crítico al inicializar la raíz de confianza (trusted root).

Esto ocurrió porque establecieron la raíz de confianza en un hash cero, que es el valor predeterminado para variables no inicializadas en Solidity. Como consecuencia, cualquier mensaje que no estuviera explícitamente validado se asociaba por defecto a un hash cero, el cual ahora era interpretado por el contrato como una raíz de confianza válida. Básicamente, un hacker descubrió que podía crear una transacción solicitando al contrato el retiro de fondos, y dado que la prueba daba como resultado el hash cero, el contrato siempre la aceptaba.

Este hackeo fue insólito por su simplicidad y el caos absoluto que desató. Una vez que el atacante original ejecutó el exploit, otros usuarios se sumaron a la acción. No se requerían conocimientos técnicos avanzados: bastaba con copiar y pegar la información de la transacción del hacker, cambiar la dirección de destino por la propia y enviarla a la red. En cuestión de horas, cientos de actores distintos vaciaron cerca de doscientos millones de dólares del puente Nomad.

Fue un fallo de ciberseguridad de manual: una sola línea de código mal configurada en la inicialización eludió todo el sistema de seguridad criptográfica. El problema se mitigó corrigiendo la lógica de inicialización para rechazar explícitamente la raíz cero como válida. Los usuarios del puente pagaron las consecuencias, y el caso sirvió como un duro recordatorio de que, al desarrollar smart contracts, un solo carácter omitido o un valor por defecto erróneo pueden poner en jaque a todo un protocolo.

Si bien este bug en particular es fácil de prevenir mediante pruebas exhaustivas, la categoría general de errores de inicialización sigue acechando activamente a los sistemas.

Bugs de compiladores y manipulación del mercado

Uno de los tipos más aterradores de hackeo puro ocurre cuando el fallo no reside en el código del desarrollador, sino en las herramientas empleadas para compilarlo. Esto quedó patente durante el exploit de Curve Finance, que sacudió los cimientos de DeFi. Gran parte de los contratos principales de Curve, uno de los DEX líderes para stablecoins, estaban escritos en Vyper, un lenguaje de smart contracts con sintaxis basada en Python que prioriza la seguridad y la simplicidad.

Cripto y hackeo: Las pesadillas de Black Hat

Afortunadamente, los desarrolladores de Curve habían implementado protecciones contra reentrancia en sus smart contracts para defenderse de la misma clase de ataque que destruyó a The DAO. Sin embargo, en una versión antigua específica del compilador de Vyper se ocultaba un bug. El compilador lograba traducir el código legible de Vyper al bytecode que interpreta la Ethereum Virtual Machine, pero fallaba al aplicar el bloqueo de reentrancia a través de múltiples funciones.

El código era seguro: los desarrolladores lo habían escrito tal como correspondía, pero el compilador falló por detrás, produciendo un bytecode vulnerable. Esto permitió que un hacker black hat descubriera y comprendiera que algunos de los pools de liquidez de Curve eran susceptibles a la reentrancia entre funciones. Aprovechando esta brecha, sustrajo decenas de millones de dólares de los pools.

Este hackeo fue sumamente insidioso porque habría sido imposible de detectar mediante una auditoría tradicional del código fuente; el código fuente estaba perfecto. La vulnerabilidad solo existía en el bytecode compilado. El incidente obligó a toda la industria a replantearse la confianza depositada en los compiladores y en la infraestructura. El problema se solucionó actualizando el compilador de Vyper y migrando los pools vulnerables a contratos compilados de forma segura.

El desenlace fue una profunda crisis de confianza y el reconocimiento de que la seguridad debe abarcar absolutamente todas las capas del stack tecnológico. Los bugs de compiladores son poco frecuentes, desde luego, pero también casi imposibles de prever, por lo que una pesadilla a nivel de infraestructura podría volver a ocurrir.

Los flash loans —un novedoso instrumento financiero surgido con el auge de las finanzas descentralizadas— transformaron de raíz la naturaleza del hackeo puro. Los flash loans permiten solicitar una cantidad prácticamente ilimitada de criptomonedas sin necesidad de colateral, siempre que el préstamo se devuelva dentro de la misma transacción. Si los fondos no se liquidan, la transacción completa se revierte, como si jamás hubiera sucedido.

Aunque fueron concebidos para arbitrajes o liquidaciones, los flash loans otorgaron a los hackers black hat la liquidez necesaria para explotar profundos fallos lógicos en la mecánica del mercado. Tomando como caso de estudio el hackeo de Euler Finance: Euler era un protocolo de préstamos diseñado para generar rendimientos a partir de depósitos. Los usuarios también podían donar parte de sus activos depositados a las reservas del protocolo mediante una función denominada donateToReserves.

Sin embargo, los desarrolladores omitieron una comprobación fundamental del estado de solvencia (health check) en esa función específica. No verificaron si la cuenta de la que se debitaban los fondos mantendría un balance saludable tras la donación. El atacante solicitó una gran suma de activos mediante un flash loan y la depositó en Euler. Luego, ejecutó la función donateToReserves para donar parte de su depósito.

Al no existir la comprobación de solvencia, el protocolo aprobó la donación, llevando la cuenta del hacker a un estado artificial de insolvencia extrema. Acto seguido, el atacante ejecutó la liquidación de su propia cuenta. No obstante, las fórmulas detrás de las bonificaciones por liquidación en Euler eran complejas, y el volumen del flash loan era descomunal, lo que permitió al liquidador extraer más valor del protocolo del que originalmente había aportado.

Devolvió el flash loan y huyó con cerca de doscientos millones de dólares. No se trató de un fallo criptográfico ni de un error de compilación, sino de un fallo elemental de lógica financiera en el código. En este caso, los desarrolladores simplemente olvidaron incluir una línea de código que verificara la solvencia de la cuenta después de ejecutar una acción. La solución consistió en incorporar la comprobación pertinente y rediseñar por completo la lógica de gestión de riesgos del protocolo.

Las consecuencias fueron severas: paralizaron el protocolo y requirieron meses de negociación para recuperar parte del capital. Este tipo de exploits lógicos, en los que complejos mecanismos financieros interactúan de formas imprevistas, representa la variante más extendida y peligrosa del hackeo puro en la actualidad. A medida que crezca la complejidad de los protocolos, estos descuidos lógicos serán prácticamente inevitables.

Una lucha constante entre el código y sus consecuencias

Al analizar los grandes incidentes de seguridad del pasado, surge un patrón inequívoco. Estas vulnerabilidades rara vez son consecuencia de un fallo en los mecanismos de consenso subyacentes de la blockchain. Son, en realidad, fallos de la lógica humana plasmada en un código inmutable. Ya sea por una actualización de estado defectuosa, una ruta de ejecución omitida en un proxy, una verificación criptográfica pasada por alto, un error del compilador o la falta de una comprobación de invariantes financieras, la raíz del problema siempre reside en un error de diseño original del smart contract.

Para mitigar estos riesgos, la industria ha consolidado un riguroso sistema de defensa. Entre sus medidas se incluyen:

1. Auditorías de código manuales realizadas por firmas de seguridad independientes. 2. Herramientas de verificación formal que demuestran matemáticamente que el código funciona exactamente según lo previsto. 3. Programas de recompensas por errores (bug bounties) muy sustanciosos que premian a hackers white hat por encontrar defectos antes de que lo hagan los actores maliciosos. 4. Uso de bloqueos temporales (timelocks) y administración mediante claves multifirma para demorar el despliegue de actualizaciones maliciosas. 5. Empleo de protocolos de seguros descentralizados para brindar cobertura en caso de una brecha.

A pesar de la sofisticación que han alcanzado estas defensas, el hackeo black hat no da tregua. La premisa fundamental del desarrollo de software es que la complejidad engendra vulnerabilidades. La creciente sofisticación de las finanzas descentralizadas, donde los desarrolladores construyen protocolos complejos que integran decenas de smart contracts adicionales e interactúan entre múltiples blockchains, abre vías de ataque novedosas e imprevistas.

Puesto que los atacantes solo se ven limitados por su propia inventiva y únicamente necesitan un único vector exitoso para triunfar, la defensa siempre opera de forma reactiva y con un paso de retraso. Esta será una batalla constante en la que los arquitectos del futuro descentralizado se enfrentarán a quienes buscan explotarlo. Las pesadillas del hackeo continuarán mutando como un recordatorio permanente: en un mundo donde el código es ley, un solo error tipográfico puede costarlo todo.

En un entorno donde cada línea de código vale literalmente cientos de miles de dólares, la eficiencia y la precisión en las operaciones cotidianas son tan cruciales como la seguridad para garantizar el máximo rendimiento. Quienes gestionan activos digitales, especialmente stablecoins, sufren con frecuencia la fricción de los costes de red. Al transferir capital y enviar USDT con regularidad, resulta evidente que el coste de estas transacciones con USDT puede fluctuar considerablemente y mermar tu patrimonio.

Cripto y hackeo: Las pesadillas de Black Hat

Para cualquier participante activo del ecosistema, encontrar un método económico para transferir USDT es crucial. Aquí es donde ciertas herramientas marcan la diferencia. El servicio de netts: Calculadora de transferencias USDT ha sido diseñado precisamente para optimizar estas operaciones. Al transferir Tether en la red TRON, la transacción consume Energy y Bandwidth; si no dispones de ellos, la red quemará TRX para cubrir las comisiones de tu transferencia de USDT.

El estimador de Netts calcula con exactitud la Energy y el Bandwidth necesarios por adelantado, lo que permite ahorrar de manera sustancial al alquilar energía en lugar de quemar TRX, asegurando una gestión de tus activos lo más eficiente posible en un sector donde cada fracción de token cuenta.

compartir X Telegram LinkedIn Reddit

Siguiente paso