零時科技 || Spectra攻擊事件分析

背景介紹

2024年7月23日,我們監控到一筆Ethereum鏈上攻擊交易:https://etherscan.io/tx/0x491cf8b2a5753fdbf3096b42e0a16bc109b957dc112d6537b1ed306e483d0744

被攻擊的項目爲Spectra Protocol,Spectra協議是無需許可的,意味着其服務完全开放供公衆使用。任何人都可以隨意創建新的市場、交換收益衍生品或成爲流動性提供者。此次攻擊中,攻擊者共獲利188, 013asdCRV,折合73, 325USD。 

攻擊及事件分析

首先,攻擊者查詢了asd CRV Token中,地址 0x279a7dbfae376427ffac52fcb0883147d42165ff對Spectra Protocol的授權額度與該地址的asd CRV余額。

接着,攻擊者調用execute函數开始針對Spectra Protocol進行攻擊,execute函數代碼如下:

最終,輸入數據會調用_dispatch,該函數的代碼如下:

由上述代碼我們可以看出,該代碼根據_commandType來決定執行哪些操作,在此次攻擊中,_commandType爲0x12 ,所以command=0x12&0x3f=0x12,對應的值爲KYBER_SWAP

所以,攻擊者調用代碼段如下。我們可以看到,該代碼的kyberRoutertargetData均可以被控制,意味着攻擊者可以利用Spectra Protocol合約調用任意合約並傳入任意參數。

我們將攻擊者的inputs數據解析出來如下:

我們可以發現,kyberRouter已經被操縱爲地址:

0x43e54c2e7b3e294de3a155785f52ab49d87b9922

tokenIn已經被操縱爲地址:

0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee

tokenOut被操縱爲地址:

0xba8ce86147ded54c0879c9a954f9754a472704aa

我們可以看到Constants.ETH爲:

0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE

所以,代碼進入到如下流程

其中,targetData經過解析如下:

由於,transferFrom的signature爲0x23b872dd;所以,transferFrom對應的參數from爲:

0x279a7dbfae376427ffac52fcb0883147d42165ff

to爲:

0xba8ce86147ded54c0879c9a954f9754a472704aa

value爲:

188,013,365,080,870,249,823,427

又因爲,kyberRouter被控制爲:

0x43e54c2e7b3e294de3a155785f52ab49d87b9922,即asdCRVToken。

所以,攻擊者相當於操縱了Spectra Protocol從0x279a7dbfae376427ffac52fcb0883147d42165ff轉了188,013,365,080,870,249,823,427asdCRV到地址0xba8ce86147ded54c0879c9a954f9754a472704aa(此地址爲攻擊者控制的地址)。

至此,攻擊者完成攻擊。 

總結

本次漏洞的成因是被攻擊合約對攻擊者傳入參數校驗不嚴格,導致攻擊者可以通過構造特殊的inputData來使受害者合約調用任意合約並傳入任意參數。最終,攻擊者利用特殊的參數,使得受害者合約通過transferFrom將授權給其合約的代幣轉入到攻擊者控制的地址。建議項目方在設計代碼運行邏輯時要多方驗證,合約上线前審計時盡量選擇多個審計公司交叉審計。 

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播信息之目的,不構成任何投資建議,如有侵權行為,請第一時間聯絡我們修改或刪除,多謝。

相關文章