yfv是基於以太坊的一個defi專案,今天早些時候,yfv官方發文稱遭到勒索。攻擊者利用staking的合約漏洞,可以任意重置使用者鎖定的yfv。
並表示,此次事件可能和不久前的『pool0』事件相關,勒索者極有可能是在『pool0』事件中未取回資金的『憤怒的農民』。
漏洞分析
合約存在一個stakeonbehalf函式使得攻擊者可以為任意使用者進行抵押,如下圖所示:
此函式中的 laststaketimes[stakefor] = block.timestamp; 語句會更新使用者地址對映的lasestaketimes[user]。而使用者取出抵押所用的函式中又存在驗證,要求使用者取出時間必須大於laststaketimes[account]+72小時。如下圖所示:
unfrozenstaketime如下圖所示:
綜上所述,惡意使用者可以向正常使用者抵押小額的資金,從而鎖定正常使用者的資金。
根據鏈上資訊,我們找到了兩筆疑似攻擊的交易,如下所示:
0xf8e155b3cb70c91c70963daaaf5041dee40877b3ce80e0cbd3abfc267da03fc9
0x8ae5e5b4f5a026bc27685f2b8cbf94e9e2c572f4905fcff1e263df24252965db
其中一筆如下圖所示:
此兩筆交易都來自同一地址,且均為極小值。由此我們可以基本判定這是一個測試鎖死問題的交易。
總結
針對於本次事件,究其根本原因,還是沒有做好上線前的程式碼審計工作。本次事件實際上是屬於業務層面上的漏洞。
根據成都鏈安在程式碼審計方面的經驗,個別專案方在進行程式碼審計時,未提供完整的專案相關資料,使得程式碼審計無法發現一些業務漏洞,導致上線後損失慘重。
成都鏈安·安全實驗室在此提醒各專案方:安全是發展的基石,做好程式碼審計是上線的前提條件。