
2024 年 4 月 19 日,Hedgey Finance 遭受多筆攻擊交易,損失超過 200 萬美元。
SharkTeam 對此事件第一時間進行了技術分析,並總結了安全防範手段,希望後續項目可以引以為戒,共築區塊鏈產業的安全防線。
一、攻擊交易分析
Hedgey Finance 被過個攻擊者發動了多次攻擊,利用代幣批准漏洞,盜取了 ClaimCampaigns 合約中的大量代幣。
以其中涉及金額最大的一筆交易為例,涉及金額約 130 萬美元:
攻擊交易:0x2606d459a50ca4920722a111745c2eeced1d8a01ff25ee762e22d5d4b1595739
攻擊者:0xded2b1a426e1b7d415a40bcad44e98f47181dda2
攻擊合約:0xc793113f1548b97e37c409f39244ee44241bf2b3
目標合約:0xbc452fdc8f851d7c5b72e1fe74dfb63bb793d511(ClaimCampaigns)
該交易直接從 ClaimCampaigns 合約中轉移走了 1, 303, 910.12 USDC。交易詳情如下:
實際發動攻擊的交易是
0xa17fdb804728f226fcd10e78eae5247abd984e0f03301312315b89cae25aa517(簡記為0x a 17 f)
攻擊過程如下:
1 從 Balancer 閃電貸 1.305 M USDC。
2 呼叫 ClaimCampaigns 合約中的 createLockedCampaign 函數。在該函數中,攻擊合約會將 1.305 M USDC 存入 ClaimCampaigns 合約中,然後 laimCampaigns 合約將轉入的 1.305 M USDC 批准給攻擊合約使用。
3 呼叫 ClaimCampaigns 合約中的 cancelCampaign 函數。在該函數中,攻擊合約將存入的 1.305 M USDC 提取出來,但在 createLockedCampaign 函數中批准給攻擊合約的 USDC 並沒有取消。
4 攻擊合約償還 Balancer 的閃電貸。
在該交易中,攻擊合約將保存在ClaimCampaigns 合約中的1.305 M USDC 提取走後,ClaimCampaigns 合約批准給攻擊合約的1.305 M USDC 並沒有取消,因此攻擊合約可以直接調用USDC 的transferFrom 函數再次從ClaimCampaigns 合約中轉移走1.305 M USDC。這也是交易0xa17fdb804728f226fcd10e78eae5247abd984e0f03301312315b89cae25aa517實現的功能。
透過以上兩筆交易,攻擊者從 ClaimCampaigns 合約中盜取了 1.305 M USDC。
除了 USDC 外,該攻擊者利用此漏洞還從 ClaimCampaigns 合約中盜取了大量的 NOBL Token,加上 USDC,總價值超過 200 萬美元。
二、漏洞分析
本次事件的根本原因是專案方智能合約在實現邏輯上存在代幣批准漏洞,使得攻擊者可以利重複轉移目標合約批准給 msg.sender 中的 Token。
智能合約 ClaimCampaigns 的 createLockedCamaign 函數會將 msg.sender 的 Token 存入到目標合約中,並將這些 Token 批准給 msg.sender。
cancelCampaign 函數會將存入的 Token 提取出來,但卻沒有取消代幣的批准。
攻擊者利用此漏洞,直接呼叫 Token 的 transferFrom 函數從目標合約中再次轉移走核准的代幣。
三、安全建議
針對本次攻擊事件,我們在開發過程中應遵循以下注意事項:
(1)專案在設計和開發過程中,要保持邏輯的完整性和嚴謹性,尤其是涉及到資產的轉移過程中,在轉移Token 時保證同步代幣批准的數量,避免上面轉移走了Token 但沒有取消批准的情況。
(2)專案上線前,需要由第三方專業的審計公司進行智慧合約審計。
About Us
SharkTeam 的願景是保護Web3世界的安全。團隊由來自世界各地的經驗豐富的安全專業人士和高級研究人員組成,精通區塊鏈和智慧合約底層理論。提供包括風險識別與阻斷、智能合約審計、KYT/AML、鏈上分析等服務,並打造了鏈上智能風險識別與阻斷平台ChainAegis,能有效對抗Web3世界的高級持續性威脅(Advanced Persistent Threat ,APT)。已與Web3生態各領域的關鍵參與者,如 Polkadot、Moonbeam、polygon、Sui、OKX、imToken、Collab.Land、TinTinLand 等建立長期合作關係。
Twitter: https://twitter.com/sharkteamorg
Telegram: https://t.me/sharkteamorg
Discord: https://discord.gg/jGH9xXCjDZ