En noviembre de 2020, una vulnerabilidad crítica en el LRC Protocol Fee Vault de Loopring permitió a los atacantes explotar debilidades en el control de acceso y manipular los precios de los tokens mediante ataques de préstamos flash. Este incidente resalta la importancia de un control de acceso robusto y un monitoreo continuo de seguridad en DeFi para prevenir exploits costosos.
Introducción al Incidente del Protocolo Loopring (LRC)
A finales de 2020, varias plataformas DeFi basadas en Ethereum, incluyendo Pickle Finance y 88mph, experimentaron incidentes de seguridad. Para detectar dichas vulnerabilidades, BlockSec desarrolló el sistema ThunderForecast, el cual identificó transacciones sospechosas que involucraban diferencias de tasas de intercambio inusualmente grandes y ganancias consistentes de Ether por parte de la misma cuenta de propiedad externa (EOA).
Usando nuestro sistema EthScope, analizamos estas transacciones y descubrimos un exploit dirigido a una vulnerabilidad en el protocolo de bóveda de Loopring, específicamente el LRC Protocol Fee Vault (LRCPFV). Esta entrada de blog detalla el ataque, su impacto y las lecciones aprendidas para la comunidad de seguridad DeFi.
Descripción General del LRC Protocol Fee Vault
Loopring es un protocolo de intercambio descentralizado (DEX) de código abierto en Ethereum. Su token nativo, LRC (ERC-20), se utiliza dentro del ecosistema. El protocolo de bóveda de Loopring, conocido como LRC Protocol Fee Vault (LRCPFV), almacena tarifas de protocolo y permite intercambiar tarifas por tokens LRC.
La función vulnerable en LRCPFV es sellTokenForLRC, que permite intercambiar tokens por LRC sin un control de acceso adecuado, permitiendo que cualquiera la invoque.
function sellTokenForLRC(
address token,
uint amount
)
external
nonReentrant
{
require(amount > 0, "ZERO_AMOUNT");
require(token != lrcAddress, "PROHIBITED");
address recipient = tokenSellerAddress == address(0) ? owner : tokenSellerAddress;
if (token == address(0)) {
recipient.sendETHAndVerify(amount, gasleft());
} else {
token.safeTransferAndVerify(recipient, amount);
}
require(
tokenSellerAddress == address(0) ||
ITokenSeller(tokenSellerAddress).sellToken(token, lrcAddress),
"SELL_FAILURE"
);
emit TokenSold(token, amount);
}
Debido a que esta función carece de control de acceso, los atacantes podían invocarla repetidamente para manipular los precios de los tokens y obtener ganancias a partir de oportunidades de arbitraje.
Detalles del Ataque
Analizamos una transacción de ataque representativa: 0x00b2c.... El ataque involucró seis pasos clave:

- Préstamo Flash: Se tomaron prestados 3.773,88 ETH de un proveedor de préstamos flash (
0xEB7e...). - Intercambio Inicial: Se convirtieron 3.773,88 ETH en 5.014,68 LRC en Uniswap V1-LRC a una tasa de 1 ETH = 1,32878 LRC.
- Intercambio en la Bóveda de Tarifas: Se intercambiaron 0,231 ETH de tarifa almacenados en LRCPFV por 0,000219 LRC invocando la función vulnerable
sellTokenForLRC. Esta llamada no autorizada manipuló el precio de LRC en Uniswap, aumentando drásticamente su valor frente al ETH (1 ETH = 0,00094 LRC). - Intercambio Rentable: Se intercambiaron 5.014,68 LRC de vuelta a 3.774,09 ETH en Uniswap V1-LRC, obteniendo 0,215 ETH adicionales gracias al precio manipulado.
- Devolución del Préstamo: Se devolvieron los 3.773,88 ETH del préstamo flash.
- Transferencia de Ganancia: Se enviaron los 0,215 ETH de ganancia a la EOA del atacante.
Este exploit aprovechó un ataque de préstamo flash combinado con manipulación de precios y la falta de control de acceso en el contrato de la bóveda.
Impacto y Escala del Ataque
La transacción analizada ocurrió el 13 de octubre de 2020. Usando datos de CoinGecko, el precio de LRC era aproximadamente 0,0005175 ETH en ese momento.
Nuestra investigación reveló:
- Contratos Maliciosos: 3 desplegados por el atacante (
0xa896...,0x414a...,0xd91d...). - Volumen del Ataque: 90 transacciones lanzadas por la EOA del atacante (
0x81e8...) desde el bloque 9.644.449, donde se desplegó LRCPFV. - Ganancia Máxima: Una transacción (
0x33eab...) generó una ganancia de 9,89 ETH. - Ganancia Total: Aproximadamente 80,97 ETH (~48.849 USD al 1 de octubre de 2020).
La causa raíz fue la falta de control de acceso en la función sellTokenForLRC, lo que permitió una explotación repetida.
Lecciones Aprendidas y Conclusión
A medida que el ecosistema DeFi de Ethereum crece, los desafíos de seguridad como las vulnerabilidades de control de acceso se vuelven cada vez más críticos. Si bien los ataques de alto perfil suelen acaparar la atención, las vulnerabilidades menos notorias pueden ocasionar pérdidas financieras significativas, como lo demuestra este incidente.
Loopring perdió aproximadamente 80,97 ETH debido a este exploit, lo que enfatiza la necesidad de auditorías rigurosas de contratos inteligentes y un monitoreo continuo de seguridad.
Para los protocolos DeFi, implementar un control de acceso estricto, aprovechar herramientas como la Auditoría de Contratos Inteligentes y Phalcon Security de BlockSec, y una gestión proactiva de riesgos son esenciales para proteger los activos digitales.
Cronología del Incidente
- 2020/11/30: Transacciones sospechosas detectadas por ThunderForecast.
- 2020/12/01: Análisis detallado completado mediante EthScope.
- 2020/12/02: Vulnerabilidad reportada al equipo de Loopring.
- 2020/12/03: Vulnerabilidad confirmada; corrección implementada.
- 2020/12/03: Divulgación pública de los detalles del incidente.
- 2021/01/03: CVE-2020-35962 asignado a la vulnerabilidad.



