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