來源:深圳零時科技
背景
2024年2月25日,我們監(jiān)測到Ethereum上的一起攻擊事件:https://etherscan.io/tx/0xf0464b01d962f714eee9d4392b2494524d0e10ce3eb3723873afd1346b8b06e4,目標(biāo)為BlueBerryProtocol,損失資金約為455 ETH 1.4M USD。幸運(yùn)的是該攻擊被一名ID為c0ffeebabe白帽攔截(0xC0ffeEBABE5D496B2DDE509f9fa189C25cF29671[c0ffeebabe.eth]),最終歸還了366.5 ETH 1.2 M USD。
BlueBerryProtocol是一個基于Compound fork的DeFi項(xiàng)目,提供借貸,抵押等服務(wù)。具體的運(yùn)行模式如下圖:
攻擊分析
攻擊者首先從Balancer中通過閃電貸,借了1個WETH。
隨后,攻擊者將1個WETH抵押到BlueBerryProtocol中,并mint了1個bWETH。接著,攻擊者利用抵押的1個bWETH作為抵押,分別利用borrow借走了8616個OHM(Decimal=9)、913262個USDC(Decimal=6)、6.86個WBTC(Decimal=8)。
最后,攻擊者通過Uniswap將獲得的OHM、USDC、WBTC換成457 ETH。
漏洞分析
問題的根本原因是代碼再處理不同資產(chǎn)時,尾數(shù)處理錯誤。WETH的decimal為18,OHM的decimal為9,USDC的decimal為6,WBTC的decimal為8。
但是,BlueberryProtocol的price oracle在處理token的價格時,均按照decimal=18進(jìn)行scale。
導(dǎo)致OHM的價值縮水1e9,USDC價值縮水1e12,WBTC價值縮水1e10。導(dǎo)致攻擊者通過僅僅1ETH的抵押便接走了價值460ETH的資產(chǎn)。
總結(jié)
本次漏洞在于項(xiàng)目方使用同一份代碼處理不同的代幣,且沒有考慮到不同代幣的decimal不同導(dǎo)致的。造成decimal較小的資產(chǎn)大量縮水,從而被攻擊者以極低的代價作為抵押借走。建議項(xiàng)目方在合約上線前,針對智能合約進(jìn)行充分的審計和交叉審計,避免此類安全問題。