- Flurry Finance Tweeted and informed their community that it was hacked.
- It has now paused all smart contracts running on the BSC and polygon to avoid further losses.
- As a precautionary measure, they have paused all smart contracts of rhoTokens including those on BSC and Polygon, which means converting/ redeeming rhoTokens.
- According to CertiK analysis Flurry Finance Vault contracts were attacked leading to around $293K worth of assets being stolen from Vault contracts.
Today Flurry Finance was hacked. Flurry Finance was the client of CertiK. CertiK informed people that Flurry Finance is a CertiK client but the exploit was caused by external dependencies. CertiK was the first to Tweet and informed people about the hack. A few hours after CertiK, Flurry Finance Tweeted about the incident and informed the community that their team are investigating and tracing the source of the hack. It has now paused all smart contracts running on the BSC and polygon to avoid further losses.
Further Flurry Finance informed their community that their team is doing its best to investigate the exploitation. As a precautionary measure, they have paused all smart contracts of rhoTokens including those on BSC and Polygon, which means converting/ redeeming rhoTokens. It claimed that FLURRY and the rebasing function will be paused for today.
Further, the Threads said Flurry Finance is digging deeper into the incident. Flury Finance found that the hacker exploited only funds deployed on the FinanceRabbit strategy which they are still investigating. Funds on other strategies remain safe, whereas the interest-earning feature is still up and running. Interest earned from today’s yield aggregation will be rebased in the next rebasing slot, presumably, tomorrow at 9 am UTC.
According to CertiK analysis Flurry Finance Vault contracts were attacked leading to around $293K worth of assets being stolen from Vault contracts. The attacker deployed a malicious token contract, which is also used as the attack contract, and created a PancakeSwap pair for the token and $BUSD.
Attackers address is 0x0F3C0c6277BA049B6c3f4F3e71d677b923298B35. Malicious token contract address is 0xB7A740d67C78bbb81741eA588Db99fBB1c22dFb7. PancakeSwap pair is 0xCA9596e8936AA8E902aD7ac4Bb1D76fbc95e88BB.
The attacker flashloaned from Rabbit Bank contract and triggered StrategyLiquidate’s execute method. The execute method decodes input data as the LP token address, the attacker is able to execute code implemented in the malicious token contract as you can see in the below image.
The malicious token contract called “FlurryRebaseUpkeep.performUpkeep()” rebases all vaults and updates multipliers for Rho Tokens. The update is based on all strategies’ balances. The update was triggered in the process of a flashloan and the tokens borrowed from the Bank contract were not returned yet, the low balance led to a low multiplier.
Bank contract address is 0xbEEB9d4CA070d34c014230BaFdfB2ad44A110142. StrategyLiquiddate contract address is 0x5085c49828B0B8e69bAe99d96a8e0FCf0A033369. FlurryRebaseUpkeep contract address is 0x10f2c0D32803c03Fc5d792Ad3c19e17Cd72ad68b. One of the Vault contracts address is 0xeC7FA7A14887C9Cac12f9a16256C50C15DaDa5C4.
The attacker returned the flashloan and finished the preparation transaction. In the next transaction, the attacker deposited tokens with the low multiplier, updated the multiplier to a higher (normal) value, and withdrew the tokens with the high multiplier. For example, in one of the transactions, the multiplier was updated to 4.1598e35 and in the next transaction, the multiplier was updated to 4.2530e35.
Because the multiplier is one of the factors deciding the RhoToken balance, the attacker’s RhoToken balance was increased in the transaction so they were able to withdraw more tokens than they deserve from the Vault. The attacker repeated this process multiple times.