BSC Flash Loan Attack: Pancake Bunny

En mayo de 2021, vimos varios trucos dirigidos a elementos BSC DeFi. En concreto, se utilizó una laguna asociada a la acuñación de recompensas en el agregador de rendimiento, Pancake Bunny, para acuñar ~ 7M tokens BUNNY de absolutamente nada, lo que resultó en una tremenda pérdida monetaria de $ 45M. Después del sangriento hack, 3 tareas bifurcadas (AutoShark, Merlin Labs y Pancake Hunny) fueron atacadas con métodos comparables. Amber Group 'y rsquo; El grupo Blockchain Security, dirigido por Dr.Chiachih Wu, explica la laguna jurídica y ofrece una descripción detallada del uso replicando el ataque contra Pancake Bunny.

Superficie de ataque oculta: balanceOf ()

Muchas personas piensan que la composición es importante para el éxito de DeFi. Los acuerdos de tokens (por ejemplo, ERC20) juegan una función vital en la capa inferior de los legos DeFi. Sin embargo, los diseñadores pueden ignorar algunas condiciones inmanejables e imprevisibles al incorporar ERC20 en sus tareas de DeFi. Por ejemplo, puede '& rsquo; Anticipe cuándo y la cantidad de tokens que obtendrá cuando recupere el saldo de tokens existente. Esta imprevisibilidad produce un área de superficie de ataque encubierta.

En muchos casos, los acuerdos sabios hacen referencia a los saldos de los ERC20 en su razonamiento de servicio. Por ejemplo, cuando un usuario transfiere algunos tokens XYZ al acuerdo inteligente, se conjura XYZ.balanceOf () para examinar cuánto dinero se obtiene. Si 'y rsquo; Si está familiarizado con el código base de Uniswap, lo más probable es que comprenda que el acuerdo Uniswap V2Pair tiene muchas llamadas a balanceOf ().

En el bit de código, Uniswap V2Pair.mint () utiliza los saldos existentes (saldo0, saldo1) y la información contable (monto0, monto1) para obtener las cantidades transferidas por el usuario (monto0, monto1). Sin embargo, si una estrella mala mueve algunas propiedades (token1 o token2) justo antes de la llamada mint (), la víctima ofrecería más liquidez de la anticipada, es decir, se acuñarán más tokens LP. Si los beneficios se determinan en función de la cantidad de fichas de LP, la estrella mala puede beneficiarse cuando los beneficios superan los gastos.

Uniswap V2Pair.burn () tiene una amenaza comparable. La persona que llama a la función mint () puede amenazarse a sí mismo sin una comprensión completa de las amenazas incluidas. Esto es lo que sucedió cuando se trata de Pancake Bunny.

¡Obtenga un bono de futuros de 110 USDT totalmente gratis!

En el bit de código anterior, la línea 140 obtiene el saldo del token LP a través de balanceOf () y lo almacena en liquidez. En las líneas 144–– 145, la parte de los tokens LP totales que posee Uniswap V2Pair (es decir, la liquidez de _ totalSupply) se utiliza para obtener (monto0, monto1) con los saldos existentes (saldo0, saldo1) de las 2 propiedades (es decir , token0 y token1). Más adelante, (monto0, monto1) de las 2 propiedades se mueven a la dirección en las líneas 148–149.

Aquí, una mala estrella podría controlar (balance0, balance1) y la liquidez enviando algún token0 + token1 o el token LP al acuerdo Uniswap V2Pair justo antes de que se conjure la función mint () para que la persona que llama obtenga más token0 + token1. . Nosotros 'y rsquo; Lo guiaré a través del código fuente de Pancake Bunny y le revelaré cómo la estrella mala puede ganar dinero haciendo esto.

Análisis de lagunas: BunnyMinterV2

En el código fuente de Pancake Bunny, la función BunnyMinterV2.mintFor V2 () supervisa la acuñación de tokens BUNNY como beneficios. Específicamente, el total que se va a acuñar (es decir, mintBunny) se deriva de los criterios de entrada, _ retiroFees y _ performanceFee. El cálculo está asociado con 3 funciones: _ zapAs setsTo BunnyBNB () (línea 213), priceCalculator.valueOfAs set () (línea 219) y amountBunnyTo Mint () (línea 221). Dado que la estrella mala puede producir una gran cantidad de BUNNY, el problema depende de entre las 3 funciones señaladas anteriormente.

Leer el artículo:  Bitcoin por valor de $ 2 mil millones se mueve por solo $ 0.78

Vamos 'y rsquo; s comienzan con la función _ zapAs establece To BunnyBNB (). Cuando la propiedad transferida es aCake-LP (línea 267), se utiliza una cantidad específica de tokens LP para eliminar la liquidez y tomar (cantidad Token 0, cantidad Token 1) de (token0, token1) de la piscina de liquidez (línea 278). Con la ayuda del acuerdo zapBSC, esas propiedades se cambian por tokens LP BUNNY-BNB (líneas 287-288). Luego, se devuelve una cantidad equivalente de tokens LP BUNNY-BNB a la persona que llama (línea 298). Aquí, tenemos un problema.¿La cantidad coincide con la cantidad de tokens LP que presume que se quemaron? (*) La ejecución de

En V2Router.removeLiquidity (), la liquidez de los tokens LP (cantidad en zapPancake setsAs BunnyBNB ()) se enviaría al acuerdo To Pair (línea 500) y Pancake Pair.burn () se invocaría. Pancake el saldo de token de LP existente de Si el par es mayor que 0, el total real a quemar sería mayor que la cantidad, lo que indirectamente aumenta el total de BUNNY hasta que se acuñe.

Otro setAs BunnyBNB () es la llamada zapBSC.zapTo (). El razonamiento de InToken detrás de esto es intercambiar las 2 propiedades recopiladas por removeLiquidity () en tokens LP BUNNY-BNB. El zapBSC intercambia propiedades a través de Since Swap, la estrella mala podría utilizar préstamos flash para controlar la cantidad de BUNNY-BNB.Pancake cambiado a BunnyMinterV2.mint

Atrás V2 (), el bunnyBNBAmount devuelto por zapFor setsAs BunnyBNB () se ingresaría priceCalculator.valueOfTo set () para estimar el valor basado en BNB (es decir, vauleAs BNB), comparable a un sistema oráculo.

Sin embargo priceCalculator.valueOf set () recomienda la cantidad de BNB y BUNNY (reserve0, reserve1) en el BUNNY_BNB As Pair como el costo de alimentación, Pancake que hace posible que la estrella mala utilice préstamos flash para controlar la cantidad de tokens BUNNY acuñados. amountBunny

La función Mint () es una estimación matemática básica. La contribución de entrada se incrementa en 5 (bunnyPerProfitBNB = 5e18), que en sí mismo no tiene área de superficie de ataque, sin embargo, la amplificación amplifica el control señalado anteriormente. Combate

Desde hace

Como el ataque es activado por getReward (), necesitamos estar certificados para los beneficios. Etherscan que se muestra en la captura de pantalla de Pancake anterior, el hacker de To Bunny conjuró la función init () del acuerdo de uso para intercambiar 1 WBNB por WBNB- Tokens USDT-LP y depositarlos () en VaultFlip

Como acuerdo de Flip, de modo que obtendría algunos beneficios al conjurar getReward (). Exp revelado anteriormente, utilizando la función Para preparar () recreamos la llamada vaultFlipWe Flip.deposit () (línea 62). Sin embargo, también utilizó el acuerdo ZapBSC para agilizar la obtención de tokens LP (líneas 54-57). Panqueque, uno no es y rsquo; Puede obtener beneficios hasta que el encargado de For Bunny active la siguiente llamada de cosecha (). Panqueque este factor, el

En Bunny hacker no 'y rsquo; t desencadenar el ataque hasta el primer trato de cosecha () después del trato de init (). Por lo tanto, nuestra simulación, ningún guardián puede desencadenar la cosecha ().

Préstamos flash recursivos

Para, utilizamos la función de eth-brownie para hacerse pasar por el guardián y comenzar a mano el trato de la cosecha () (línea 25). y el Bank TubeHere Amber Group, Blockchain Security '& rsquo; s (*) grupo acaba de utilizar los siguientes acuerdos de 8 Pancake Pair '& rsquo; Función flash-swap para prestar 7 M WBNB:

Para agilizar las llamadas flash-swap, cargamos 2 criterios en el cuarto argumento de entrada de las llamadas Pancake Pair.swap () (línea 4 o línea 72): nivel y propiedad. La variable de nivel muestra qué nivel de swap () llamamos '& rsquo; estar en; la variable de propiedad es 74 o 0, lo que indica que necesitamos obtener token1 o token0.

Leer el artículo:  La SEC de EE. UU. Amenaza con demandar a Crypto Exchange Coinbase, responde el CEO Brian Armstrong

Usando la función de devolución de llamada pancakeCall (), llamamos recursivamente a Pancake Pair.swap () con nivel +1 hasta que alcanzamos el séptimo nivel. En el nivel inicial, conjuramos shellcode () para llevar a cabo la acción genuina en la línea 98. Cuando shellcode () regresa, la variable de propiedad devuelve la propiedad obtenida en cada nivel coincidente (líneas 102–– 104).

Apretar el gatillo

La función shellcode () conjurada por el séptimo nivel de pancakeCall () es el verdadero uso del código. Primero, mantenemos el saldo existente de WBNB en wbnbAmount (línea 108), intercambiamos 15,000 WBNB en tokens WBNB-USDT-LP (línea 112) y los enviamos al acuerdo que acuñó esos tokens LP (es decir, el acuerdo Pancake Pair) en la línea 113. Esta acción tiene la intención de controlar la llamada removeLiquidity () dentro de la función _ zapAs setsTo BunnyBNB () como se evaluó anteriormente, lo que nos permite obtener más WBNB + USDT de lo anticipado.

La segunda acción es controlar el costo de USDT al que hace referencia _ zapAs setsTo BunnyBNB () para cambiar USDT a WBNB. Dado que _ zapAs setsTo BunnyBNB () utiliza WBNB-USDT Pancake Pair para cambiar USDT a WBNB, podríamos cambiar el resto del WBNB prestado por flash a USDT en Pancake Swap. Hacerlo haría que WBNB fuera increíblemente económico, y _ zapAs setsTo BunnyBNB () obtendría una cantidad desproporcionadamente grande de WBNB cuando se cambiara de USDT. Tenga en cuenta que el control de costos aquí se lleva a cabo en la piscina Pancake V1, no Pancake V2 '& rsquo; s Pancake Pair como en la acción anterior.

La última acción es la llamada getReward (). La llamada de acuerdo básica podría acuñar 6.9 M de tokens BUNNY (línea 125). Los tokens BUNNY podrían cambiarse por WBNB en Pancake Swap para pagar el préstamo flash.

En nuestra simulación, la estrella mala paga 1 WBNB y gana 104k WBNB + 3.8 M USDT (comparable a ~ $ 45M).

Acerca de Amber Group

Amber Group es una empresa líder internacional de financiamiento de criptomonedas que opera en todo el mundo y todo el tiempo con una existencia en Hong Kong, Taipei, Seúl y Vancouver.Fundado en 2017, Amber Group brinda servicios a más de 500 clientes institucionales y, de hecho, ha negociado acumulativamente más de $ 500 mil millones en más de 100 servicios electrónicos. intercambios, con más de $ 1.5 mil millones en propiedades bajo administración. En 2021, Amber Group recaudó $ 100 millones en financiamiento de la Serie B y terminó siendo el unicornio FinTech más reciente valorado en más de $ 1 mil millones. Para obtener más información, consulte: www.ambergroup.io.

Todo comerciante que comercia con criptomonedas en el intercambio de Binance quiere saber sobre el próximo pumpaumentar el valor de las monedas para obtener grandes beneficios en un corto período de tiempo.
Este artículo contiene instrucciones sobre cómo saber cuándo y qué moneda participará en la próxima "Pump”. Todos los días, la comunidad en Canal de Telegram Crypto Pump Signals for Binance Señales para Binance publica de 1 a 2 señales gratuitas sobre el próximo "Pump"E informa sobre el éxito"Pumps ”que han sido completados con éxito por los organizadores de la comunidad VIP.
Estas señales comerciales ayudan a obtener de un 20% a un 150% de ganancia en solo unas horas después de comprar las monedas publicadas en el canal de Telegram "Crypto Pump Signals for Binance Señales para Binance ”. ¿Ya está obteniendo ganancias utilizando estas señales comerciales? Si no, ¡pruébalo! Le deseamos buena suerte en el comercio de criptomonedas y deseamos recibir el mismo beneficio que los usuarios VIP de la Crypto Pump Signals for Binance Señales para el canal de Binance. Se pueden ver ejemplos En esta página!
John Lesley/ autor del artículo

John Lesley es un comerciante experimentado que se especializa en análisis técnico y pronóstico del mercado de criptomonedas. Tiene más de 10 años de experiencia en una amplia gama de mercados y activos: divisas, índices y materias primas. John es el autor de temas populares en los principales foros con millones de visitas y trabaja como analista y trader profesional tanto para clientes como para él mismo.

Deje su comentario.