Poolz因算數溢出問題遭受攻擊,損失約665K美元!

發表於 2023-03-15 15:43 作者: Numen Cyber

背景 

根據Numen鏈上監控顯示,Mar-15-2023 03:16:02 AM +UTC,Ethereum、Binance、Polygon鏈上Poolz遭到攻擊,共損失2,805,805枚MEE,525,134枚ESNC,774,997枚DON,2,007,504,238枚ASW,6,510,689枚KMON,2,521,065枚POOLZ,35,976,107枚DCD,760,845枚PORTX,252,153,413枚ECIO,35,975,489枚WOD,29,032,394枚SIP,61,856,885枚MNZ,465,116枚EBA,157,696枚GEMG,202,442枚WANA,223,500枚KXA,82,067枚MSTR,1,717,102枚CHRP,822,631枚CVZ,37,053枚CHIM,8,577,867枚QZA,總價值約665000美元。攻擊者已將部分Token兌換爲BNB,目前資金暫未轉出。

攻擊者地址:0x190Cd736F5825ff0Ae0141B5C9cb7Fcd042cef2a

攻擊者合約:0x058bae36467a9fc5e1045dbdffc2fd65b91c2203

其中一筆攻擊交易

0x39718b03ae346dfe0210b1057cf9f0c378d9ab943512264f06249ae14030c5d5

攻擊流程

1. 攻擊者先通過pancakeswap兌換了一下mnz代幣。

2. 攻擊者調用CreateMassPools,主要問題就存在於這個函數。

正常功能是用戶可以批量創建池子,然後提供初始流動性。再通過CreatePool把池子創建出來,並用一個mapping記錄池子屬性,如下圖所示。

問題出在getArraySum函數。TransferInToken給池子建立流動性,amount通過getArraySum控制。

通過傳入的_StartAmount數組遍歷,然後進行累加。然後通過調用棧看到[115792089237316195423570985008687907853269984665640502182660492372007802789937,61856797091635905326850000]。數組累加超過uint256,即返回1。但是CreatePool中做的記錄是通過_StartAmount來實現的。所以攻擊者轉入了1個token,但_StartAmount是個大數。

3.黑客調用withdraw提幣,完成攻擊。

總結

此次事件,攻擊者獲利的根本原因是算數溢出。爲了防止此類問題,Numen建議使用 Solidity 的高版本進行編譯,以便在編譯過程中自動進行溢出檢查。另外,您也可以在低版本 Solidity 中使用 OpenZeppelin 的 SafeMath 庫來解決整數溢出問題。

原文鏈接:Poolz因算數溢出問題遭受攻擊,損失約665K美元!

標題:Poolz因算數溢出問題遭受攻擊,損失約665K美元!

地址:https://www.coinsdeep.com/article/11410.html

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

你可能還喜歡
熱門資訊