Volver al blog

Incidente de Seguridad en Seal Finance

Code Auditing
3 de enero de 2021
5 min de lectura

El 30 de noviembre, nuestro sistema de monitoreo de incidentes de seguridad ThunderForecast descubrió un ataque al protocolo Loopring (Blog en EN, CN) mediante el escaneo de transacciones históricas en Ethereum. En conclusión, la causa raíz de este ataque es la falta de control de acceso en la función sellTokenForLRC. El atacante se aprovechó de 80,97 ETH, equivalente a 48.849,2 USD según el precio en ese momento.

El 11 de diciembre de 2020, nuestro sistema de monitoreo ThunderForecast reportó una serie de transacciones con una tasa de intercambio anormal. Luego, utilizamos el sistema EthScope desarrollado por nuestro equipo de investigación para analizar estas transacciones y descubrimos que se trata de un ataque que aprovecha una vulnerabilidad del Protocolo Seal Finance con fines de arbitraje.

¿Qué es Seal?

Mencionado en el whitepaper de Seal: "SEAL - Un protocolo experimental que actúa como intermediario entre los principales tokens de protocolo DeFi, creando mayor liquidez entre ellos". Hasta ahora, existen más de 10 pools de liquidez que conectan Seal con otros tokens conocidos (como UNI, YFI, USDT, SNX y otros). Para obtener el bono, el inversor debe depositar tokens LP en el contrato de recompensas SEAL y activar la función breed() en el contrato Farm para producir nuevos tokens SEAL. El contrato Farm se despliega en cada pool de Seal y la función breed() en el contrato se utiliza para emitir nuevos tokens Seal. Según la configuración de breed(), emite un 1,6% adicional de tokens Seal. Además, el 0,8% de los tokens Seal emitidos se intercambia por otro token que se deposita en el pool junto con el otro 0,8% de los tokens Seal emitidos como liquidez. Sin embargo, dado que no existe ningún control de acceso diseñado para la función breed(), cualquiera puede activar esta función y este diseño primitivo se convierte en la causa raíz del ataque reportado.

El siguiente es el código fuente confirmado de la función breed():

function breed() external {
	require(now / 1 days > today);
	today += 1;
 
	uint256 sealPairAmount = seal.balanceOf(address(cSeal));
	uint256 tokenPairAmount = token.balanceOf(address(cSeal));
	uint256 newSeal = sealPairAmount.mul(spawnRate).div(1e18);
	uint256 amount = UniswapV2Library.getAmountOut(newSeal, sealPairAmount, tokenPairAmount);
 
	seal.mint(address(cSeal), newSeal);
	if(address(seal) < address(token))
    	cSeal.swap(0, amount, address(this), "");
	else
    	cSeal.swap(amount, 0, address(this), "");
	token.transfer(address(cSeal), amount);
	seal.mint(address(cSeal), newSeal);
	cSeal.mint(address(this));
}

Detalles

Ahora comenzamos a revelar más detalles de este ataque con una transacción de ataque. En esta transacción, el atacante repite la lógica de ataque en 10 pools de Seal para maximizar sus ganancias. En el siguiente análisis, nos centramos en el ataque lanzado en el pool Seal-SNX.

Hay tres pasos involucrados:

  • Paso 1: Intercambiar 1.084 Seal por 2.787 SNX en el pool Seal-SNX. La tasa de intercambio es: 1 Seal = 2,57 SNX.
  • Paso 2: Activar la función breed() en el contrato Farm. Esta función emite 13,08 Seal y los intercambia por 10,20 SNX. La tasa de intercambio ahora es: 1 SNX = 0,78 Seal. La razón es que la mayor parte del SNX en el pool se intercambia por Seal y provoca una gran diferencia entre SNX y Seal en términos de cantidad. Luego, según el algoritmo de cálculo de precios de Uniswap, el SNX se vuelve extremadamente valioso (el precio aumenta más de 3 veces) en el pool.
  • Paso 3: Intercambiar 2787 SNX por 1100 Seal en el pool Seal-SNX. Dado que el intercambio aumenta aún más el precio del SNX, el atacante obtiene más tokens Seal por arbitraje (extra 16 Seal).

Para medir y confirmar la pérdida de manera más precisa, reprodujimos la función breed() bajo el estado del bloque anterior al ataque, utilizando nuestro sistema EthScope. Como resultado, Farm emitió 18 tokens Seal adicionales en comparación con una invocación normal. El atacante obtuvo 16 Seal y solo 2 Seal quedaron en el pool.

Ganancia y Pérdida

En esta transacción, el atacante obtiene un total de 175 Seal.

La Escala del Ataque

Hasta el 13 de diciembre de 2020, hay 3 contratos maliciosos (0x49f93e, 0x8b3710, 0x0f20b6) desplegados en la cadena y 22 transacciones se han lanzado exitosamente para robar 4.247 tokens Seal. Según el precio en ese momento, el atacante gana aproximadamente 58.467 USD aprovechando la vulnerabilidad del protocolo Seal. Vale la pena mencionar que ¡la vulnerabilidad del protocolo Seal sigue siendo objeto de ataques!

Además, al analizar el flujo de los tokens Seal obtenidos, descubrimos que alrededor de 900 tokens Seal se depositan en DEX y el resto se distribuye en 6 direcciones diferentes. Como se muestra en la siguiente figura, esas direcciones son todas los principales poseedores de tokens Seal, además de Seal Finance y el pool de liquidez en Uniswap V2.

Conclusión

Con el desarrollo del ecosistema DeFi en Ethereum, diversos problemas de seguridad van surgiendo gradualmente. De hecho, la causa raíz, que es el control de acceso, detrás del ataque genera una pérdida considerable (58.467 USD) en Seal mediante el lanzamiento de 22 transacciones hasta el 13 de diciembre de 2020.

Actualización (2021/01/04)

Tras el primer ataque el 30/11 de 2020, el atacante ha desplegado un tercer contrato de ataque y ha lanzado cinco ataques. El último ataque fue el 24/12 de 2020 y transfirió los tokens Seal obtenidos a esta dirección. Durante este proceso, el atacante obtuvo 6.021 tokens Seal.

Cronología:

  • 2020/12/11: Se detectaron transacciones sospechosas
  • 2020/12/12: Se completó el análisis
  • 2020/12/13: Se informó a Seal Finance
  • 2021/01/03: Se publicaron los detalles
  • 2021/01/03: Se asignó CVE-2021–3006

Sobre BlockSec

BlockSec es una empresa pionera en seguridad blockchain establecida en 2021 por un grupo de expertos en seguridad de renombre mundial. La empresa está comprometida con mejorar la seguridad y la usabilidad del emergente mundo Web3 para facilitar su adopción masiva. Con este fin, BlockSec ofrece servicios de auditoría de seguridad de contratos inteligentes y cadenas EVM, la plataforma Phalcon para el desarrollo de seguridad y el bloqueo proactivo de amenazas, la plataforma MetaSleuth para el rastreo e investigación de fondos, y la extensión MetaSuites para que los desarrolladores de web3 naveguen eficientemente en el mundo cripto.

Hasta la fecha, la empresa ha prestado servicios a más de 300 distinguidos clientes como MetaMask, Uniswap Foundation, Compound, Forta y PancakeSwap, y ha recibido decenas de millones de dólares en dos rondas de financiamiento de inversores prominentes, entre ellos Matrix Partners, Vitalbridge Capital y Fenbushi Capital.

Sitio web oficial: https://blocksec.com/

Cuenta oficial de Twitter: https://twitter.com/BlockSecTeam

Apúntate para recibir las novedades
Pérdidas de ~5,57 millones USD: exploits de X100 Freezer y NEM | Resumen semanal de BlockSec
Security Insights

Pérdidas de ~5,57 millones USD: exploits de X100 Freezer y NEM | Resumen semanal de BlockSec

Este informe semanal cubre dos incidentes de seguridad ocurridos en Ethereum y BNB Chain durante el período 19/10/2026–25/10/2026. Examina una toma de control de la gobernanza de X100 Freezer financiada mediante un préstamo flash y un fallo en la liquidación de impuestos que afectó a un pool de liquidez de un token NEM en BNB Chain. Las pérdidas estimadas dentro del alcance del informe suman aproximadamente 5,57 millones USD: ~4,75 millones USD de la transacción representativa de X100 y ~820 mil USD del incidente del pool de NEM. El total excluye las extracciones posteriores de X100 reportadas por separado.

Pérdidas de aproximadamente 3,87 millones USD: hackeos de Autheo Network y UNCX | Resumen semanal de BlockSec
Security Insights

Pérdidas de aproximadamente 3,87 millones USD: hackeos de Autheo Network y UNCX | Resumen semanal de BlockSec

Este informe semanal cubre 3 incidentes de seguridad correspondientes al período 12/10/2026–18/10/2026, con pérdidas totales estimadas en aproximadamente 3,87 millones USD. Autheo Network sufrió una vulneración de clave privada con pérdidas de aproximadamente 1,76 millones USD; Qubic Wallet perdió aproximadamente 1,30 millones USD debido a la generación de una semilla débil; y los contratos Smart Token Vesting V2 de UNCX Network sufrieron un error contable con pérdidas de aproximadamente 807 mil USD en Ethereum, BNB Chain, Base y Robinhood Chain. El análisis destacado de UNCX explica cómo un cálculo agregado de participaciones defectuoso mezcló tramos de adquisición de derechos creados con distintas proporciones entre tokens y participaciones, lo que permitió retiros excesivos de pools compartidos.

Pérdidas de ~542.000 dólares: explotación de MakerDaoBot | Resumen semanal de BlockSec
Security Insights

Pérdidas de ~542.000 dólares: explotación de MakerDaoBot | Resumen semanal de BlockSec

Ethereum (05–11/10/2026): 1 incidente; pérdida estimada de $542 mil. MakerDaoBot, sin control de acceso, dio a un adaptador malicioso acceso a sus saldos MakerDAO. Este cerró 4 subastas ETH-A y convirtió 200 ETH-A en WETH; el atacante los cambió por 200 ETH y se los envió.

El mejor auditor de seguridad para Web3

Valida el diseño, el código y la lógica de negocio antes del lanzamiento, siguiendo los estándares de seguridad más exigentes del sector.

Auditoría de BlockSec