校驗缺失損失超 370 枚 ETH
封面: Photo by Caspar Camille Rubin on Unsplash
北京時間 2024 年 2 月 28 日,根據 Beosin trace 資金分析平台顯示,ETH 鏈上的 SenecaUSD 項目合約存在漏洞,黑客利用精心構造的 calldata 參數,調用 transferfrom 將授權到該項目合約的代幣轉移到自己地址上,最後兌換為 ETH。目前駭客已歸還 80% 資金,剩餘 20% 用作白帽獎勵。以下是 Beosin 對此攻擊事件的分析。
漏洞分析
Seneca 專案合約中存在一個 performOperations 函數,該函數傳入的參數來選擇執行不同的函數邏輯。
可以看到,當使用者指定 action 為 30 時,函數會選擇呼叫_call 函數,並且傳入使用者指定的呼叫參數。
_call 函數只檢查了一下呼叫位址的黑名單,隨後便直接呼叫了使用者指定位址的指定函數,期間並未對呼叫者以及呼叫參數做任何限制性檢查。
如果呼叫者在這裡建構非法的呼叫數據,便可能導致攻擊事件的發生。
攻擊流程
本次事件攻擊者透過多次相同的手法進行攻擊,這裡以 0x23fcf9d4517f7cc39815b09b0a80c023ab2c8196c826c93b4100f2e26b701286 這筆交易為例。讓我們來看看這次攻擊者是如何建構呼叫資料以及實施攻擊的。
1. 攻擊者直接呼叫 performOperations 函數,並建構了以下參數,其中 actions 傳入了上述的 30,將呼叫_call 函數。
2. Datas 數據為:
0x000000000000000000000000b05cabcd99cf9a73b19805edefc5f67ca5d1895e
00000000000000000000000000000000000000000000000000000000a0
000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000064
23b872dd00000000000000000000000009cbf099ff424979439dfba03f00b5961
784c06ce00000000000000000000000094641c01a4937f2c8ef930580cf39614
2a2942dc0000000000000000000000000000000000000000000004b180b8661
8eddc3ab0000000000000000000000000000000000000000000000000000
根據解析規則來看,第一個 32 位元組為 callee=0xb05cabcd99cf9a73b19805edefc5f67ca5d1895e。
第二個 callData 在 a0 處,100(0x64) 位元組,則得到
callData 為:
0x23b872dd0000000000000000000000009cbf099ff424979439dfba03f00b5961784c06ce0000000000000000000021000 2a2942dc0000000000000000000000000000000000000000000004b180b86618eddc3ab
3. 查詢函數選擇器,根據 callData 資料可知,callData 指定的是 transferFrom 函數。那本次呼叫我們可以解析出來為:
0xb05cabcd99cf9a73b19805edefc5f67ca5d1895e.transferFrom(0x9cbf099ff424979439dfba03f00b5961784c06ce,0x94641c01a00b5961784c06ce,0x94641c01a649386a 5238431763437306795)。
4. 由于在之前的交易中,0x9cbf099ff424979439dfba03f00b5961784c06ce 向 0x65c210c59b43eb68112b7a4f75c8393c36491f06 地址授权过最大值,所以这里攻击者通过 transferFrom 函数直接将 0x9cbf099ff424979439dfba03f00b5961784c06ce 的超 1385 枚 PT-rsETH-27JUN2024(0xb05cabcd99cf9a73b19805edefc5f67ca5d1895e) 代币转移到自己的地址上。
5. 隨後攻擊者將 PT-rsETH-27JUN2024 代幣兌換為 ETH。
資金追蹤
在被攻擊後,Seneca 部署者向攻擊者喊話,要求攻擊者歸還資金,並表示可以保留 20% 的資金作為白帽獎勵。
根據 Beosin trace 資金追蹤平台顯示,截止發稿,攻擊者已將被盜 1900 多枚 ETH 中的 1537 枚 ETH(80%) 歸還到部署者指定地址,剩餘 370 枚 ETH(20%) 分散保留在攻擊者地址上。
免責聲明:作為區塊鏈資訊平台,本站所發布文章僅代表作者及來賓個人觀點,與 Web3Caff 立場無關。文章內的資訊僅供參考,均不構成任何投資建議及要約,並請您遵守所在國家或地區的相關法律法規。