黑客从Poolz Finance窃取了3.9亿美元,这是继1.8亿美元的Euler Finance漏洞之后的又一次安全事件。
- 由于一个漏洞,Poolz Finance在Binance智能链和Polygon区块链上损失了390,000美元
- Poolz是一个跨链去中心化的IDO平台,专注于Web3的开发。
- MetatrustLabs分析发现,一个算术溢出问题导致了该漏洞。
MetatrustLabs周三发现,在Binance智能链和Polygon上,一次黑客攻击使Poolz Finance损失了约39万美元。
这家区块链安全公司指出,黑客可能是由于算术溢出问题而发生的。
关于Poolz Finance黑客,我们应该知道什么
MetatrustLabs分析表明,Poolz Finance存在算术溢出问题。在计算机科学中,这是一个较大的操作产量对相对较小的存储系统的问题。同时,MetatrustLabs发现同一发件人在代币归属合约上的重复模式。
Solidity中的源代码声明:“Solidity中的算术运算在溢出时会进行包装。这很容易导致错误,因为程序员通常假设溢出会引发错误,这是高级编程语言的标准行为。`SafeMath`通过在操作溢出时撤销交易来恢复此直觉。”
区块链维权者Bythos是第一个向PeckShield报告该问题并发布推文的人。
Poolz是一个跨链去中心化IDO平台。其基础设施允许加密项目在上市之前获得资金支持。然而,仅在过去一天内,POOLZ代币已经下跌了超过95%。
POOLZ目前价格为0.19美元,比历史最高价低99%以上。近两年前,在2021年4月份,POOLZ达到了50.89美元的峰值价格。
事件之前发生了Euler Finance黑客攻击
3月13日,去中心化金融(DeFi)协议Euler Finance遭受攻击。Cointime当天报道称黑客利用闪电贷攻击从该平台窃取了超过1.95亿美元。
随后,Euler向黑客发送了一条在线消息。他们说:“如果24小时内未归还90%的资金,则明天我们将启动100万美元悬赏奖励计划以获取有能够逮捕你的信息。
据报道,黑客已将该协议中的资金转移到两个新账户。这些钱包里装了大量的DAI稳定币和以太坊(ETH)。
DeFi协议仍然是攻击目标
今年2月,Platypus在一次闪电贷攻击中损失了850万美元以上。根据Chainalysis的报告显示,2022年全球安全事件中被害者失去了价值38亿美元的加密货币,成为史上最大的黑客事件年份。其中大部分来自DeFi协议。
区块链安全公司Halborn的首席运营官David Schwed表示,这些攻击基于Web2攻击模式。他在与Chainalysis的对话中说:“我们看到的许多黑客攻击不一定是针对 web3 的密钥泄露攻击。它们是具有 web3 含义的传统 Web2 攻击”。
下面是MetatrustLabs对此次安全事件的分析详情:
Poolz Finance漏洞
摘要
攻击者(0x190cd)通过算术溢出欺骗了他实际存入的合约(0x058ba)。该合约的版本低于0.8.0,缺乏算术溢出检查。
攻击者
https://bscscan.com/address/0x190cd736f5825ff0ae0141b5c9cb7fcd042cef2a
攻击的合约
https://bscscan.com/address/0x058bae36467a9fc5e1045dbdffc2fd65b91c2203
https://etherscan.io/address/0x058bae36467a9fc5e1045dbdffc2fd65b91c2203
被攻击的合约
https://bscscan.com/address/0x8bfaa473a899439d8e07bf86a8c6ce5de42fe54b
https://etherscan.io/address/0x2cc4a6c6d5ff183d7e3c7e33e9bc10d55bdbaea8
交易
https://bscscan.com/tx/0x39718b03ae346dfe0210b1057cf9f0c378d9ab943512264f06249ae14030c5d5
https://bscscan.com/tx/0xab09638803c66d802fc83e088da6fa894a714ae2d4df707c6f4bb1b42594f5ac
https://bscscan.com/tx/0x24cb4df2bd6829c0736750aa51ee9c03982cf70b9cd30f8b8259395f1ba10030
https://etherscan.io/tx/0x118a617bddd1c14810113be81ce336f28cc1ee7a7b538a07184b93e7c51bdc00
操作步骤
- 攻击者通过算术溢出伪造其实际存入的合约。
- 攻击者从合约中提取代币。
根本原因
实际转移的金额是1,但攻击的记录金额是115792089237316195423570985008687907853269984665640502182660492372007802789937和61856797091635905326850000。
原因如下:
- 该协议允许用户创建两个或多个池。
- 该攻击试图创建两个新的池子,金额为115792089237316195423570985008687907853269984665640502182660492372007802789937和61856797091635905326850000。该协议将为攻击者记录这两个数字。
- 协议计算出两个新池子的代币总数,并从攻击者那里转移总数。然而,由于算术溢出,总金额只变成了1
- 在这一点上,两个新池子的数字是115792089237316195423570985008687907853269984665640502182660492372007802789937和61856797091635905326850000。
- 最后,攻击者可以从合约中提取并窃取代币。
关键代码
Soliditypragma solidity >=0.6.0 <0.8.0;... function CreateMassPools( address _Token, uint64[] calldata _FinishTime, uint256[] calldata _StartAmount, address[] calldata _Owner ) external isGreaterThanZero(_Owner.length) isBelowLimit(_Owner.length) returns(uint256, uint256) { ... TransferInToken(_Token, msg.sender, getArraySum(_StartAmount)); ... } ... function getArraySum(uint256[] calldata _array) internal pure returns(uint256) { uint256 sum = 0; for(uint i=0 ; i<_array.length ; i++){ sum = sum + _array[i]; } return sum; }
资金损失
Transaction | Token | Total Loss | Note |
0x39718b03ae346dfe0210b1057cf9f0c378d9ab943512264f06249ae14030c5d5 | MNZ: 61,856,885 | ||
0xab09638803c66d802fc83e088da6fa894a714ae2d4df707c6f4bb1b42594f5ac | KXA: 223,500 WANA: 202,442 EBA: 465,116 | ||
0x24cb4df2bd6829c0736750aa51ee9c03982cf70b9cd30f8b8259395f1ba10030 | CHIM: 37,053 MSTR: 82,067 | ||
0x118a617bddd1c14810113be81ce336f28cc1ee7a7b538a07184b93e7c51bdc00 | POOLZ: 282,111 | ||
$656,000 https://debank.com/profile/0x190cd736f5825ff0ae0141b5c9cb7fcd042cef2a |
Twitter: https://twitter.com/MetatrustLabs
Website: https://metatrust.io/