Saltar al contenido
Est. MMXXVIVol. VI · № 273RSS
Blockchain Breaches

Archivo de incidentes de seguridad en criptomonedas — hackeos, exploits, fallos de puentes y rug pulls, documentados con evidencia on-chain.

Expediente № 254Fallo de smart contract

Mint infinito de yETH en Yearn

El pool StableSwap yETH de Yearn acuñó 235 septillones de yETH desde un depósito de 16 wei tras que un retiro de liquidez dejara saldos virtuales cacheados.

Fecha
Cadena(s)
Estado
Parcialmente recuperado

El 30 de noviembre de 2025, el pool StableSwap yETH personalizado de Yearn Finance fue explotado por aproximadamente $9 millones mediante lo que Check Point Research llamó el "Exploit de 16 Wei" — el atacante acuñó 235 septillones de yETH (2,35 × 10^23 tokens) desde un depósito de 16 wei (con un valor aproximado de $0,00000000000000005). El bug: saldos virtuales almacenados persistieron en el almacenamiento tras un retiro de liquidez que reseteó el suministro del pool a cero. Yearn recuperó $2,39M mediante clawback coordinado con los equipos de Plume y Dinero.

Qué ocurrió

El producto yETH de Yearn era un pool estilo StableSwap que agregaba varios tokens de liquid staking vinculados a ETH. Para reducir costes de gas durante las operaciones, la implementación del pool usaba un array packed_vbs[]saldos virtuales almacenados cacheados en almacenamiento para que el protocolo pudiera evitar lecturas costosas entre contratos en cada operación.

La vulnerabilidad vivía en la brecha entre dos rutas de mutación de estado:

  1. El contador totalSupply del pool se reseteaba a cero cuando se retiraba toda la liquidez — el estado estándar de "la bóveda está vacía".
  2. Los saldos virtuales cacheados en packed_vbs[] NO se reseteaban cuando el suministro iba a cero — retenían sus últimos valores registrados de antes del retiro de liquidez.

Esto dejaba el pool en un estado fantasma: desde la visión contable del protocolo, el suministro era cero, pero los saldos virtuales cacheados aún registraban valor sustancial. Cualquier depósito posterior calcularía el precio de la participación como (valor_cacheado + nuevo_depósito) / nuevo_supply — y siendo nuevo_supply lo único realmente escalado por el depósito, incluso un depósito microscópico produciría cálculos astronómicos del precio de la participación.

El ataque:

  1. Detectó el pool en su estado fantasma — suministro vacío, saldos virtuales cacheados distintos de cero.
  2. Depositó 16 wei — una cantidad tan pequeña que normalmente sería ignorada o rechazada.
  3. El pool computó la asignación de participación en función de los saldos cacheados, acuñando ~235 septillones de tokens yETH al atacante contra el depósito de 16 wei.
  4. Intercambió el yETH acuñado a través del pool yETH-WETH de Curve, extrayendo aproximadamente $900.000 en ETH real de Curve.
  5. Continuó drenando: el propio pool stableswap yETH fue vaciado por $8 millones adicionales mientras el atacante ejercía su absurda tenencia de participaciones contra las reservas subyacentes del pool.

Extracción total: aproximadamente $9 millones en ETH y equivalentes ETH-LST. 1.000 ETH (~$3M) fueron canalizados a Tornado Cash en horas.

Consecuencias

  • Yearn pausó las operaciones de yETH y trabajó con los protocolos downstream que tenían yETH para coordinar la respuesta.
  • Una operación de clawback con los equipos de Plume y Dinero recuperó 857,49 pxETH (~$2,39M) — fondos que habían sido puenteados a la cadena de Plume y podían ser revertidos mediante intervención de estado coordinada.
  • Yearn enfatizó — y verificó on-chain — que las bóvedas v2 y v3 y otros productos no se vieron afectados; el bug era específico de la implementación personalizada del stableswap yETH.
  • Las ganancias restantes del atacante fueron blanqueadas a través de Tornado Cash y puentes cross-chain.

Por qué importa

El exploit de yETH es uno de los casos más limpios de 2025 de cómo las optimizaciones de rendimiento crean nueva superficie de ataque. El cacheo de almacenamiento packed_vbs[] era una decisión de diseño legítima para ahorrar gas — las lecturas entre contratos para obtener el saldo de cada token LP habrían hecho cada operación yETH prohibitivamente cara. Pero el caché creó estado que divergía de la realidad subyacente real del pool, y el bug estaba en cómo se manejaba esa divergencia en los casos límite.

Las lecciones estructurales:

  1. El estado cacheado tiene requisitos de invariante separados de la fuente subyacente de verdad. Cada ruta de código que muta suministro, saldos o cálculos de participación también debe razonar sobre si el caché sigue siendo válido — e invalidarlo explícitamente o afirmar los invariantes que dependen de él.
  2. Los casos límite que involucran estados de suministro cero son particularmente peligrosos para los cálculos de precio de participación. La mitigación estándar — acuñación de dead-shares en el despliegue del pool para prevenir que el suministro alcance cero alguna vez — ha sido documentada desde al menos 2021. El pool personalizado yETH de Yearn fue desplegado sin este patrón.
  3. El encuadre de "16 wei" es un artefacto llamativo de comunicación — el depósito de 16 wei del atacante ($0,00000000000000005) produciendo $9M en extracción es uno de los exploits de mayor apalancamiento económico jamás registrados. La asimetría es la lección recurrente en el límite entre implementación eficiente en gas y seguridad adversarial.

Este fue el tercer incidente importante de Yearn en la historia del protocolo (tras el exploit del contrato legado iEarn en abril de 2023 y un incidente menor de 2021). La respuesta del equipo — pausa rápida, clawback coordinado entre protocolos, post-mortem transparente — ha sido una de las actuaciones de respuesta a incidentes más limpias de 2025.

Fuentes y evidencia on-chain

  1. [01]dlnews.comhttps://www.dlnews.com/articles/defi/yearn-finance-looted-for-9m-after-attacker-minted-trillions/
  2. [02]theblock.cohttps://www.theblock.co/post/381740/yearn-finance-9-million-yeth-exploit-confirms-partial-recovery-outlines-remediation
  3. [03]research.checkpoint.comhttps://research.checkpoint.com/2025/16-wei/

Registros relacionados