摘要
2023年2月28号,Metascan链上监控引擎发现Ethereum链上刚开源合约zombier存在严重安全漏洞,该合约存在可重入攻击漏洞和参数校验漏洞等问题,如果项目方继续使用该合约,可能面临重大安全风险。详见漏洞原因分析报告。
合约地址
https://etherscan.io//address/0xd79f71e635f248ad362bb95e2d7a18c7f48728cc#code
漏洞函数
function mint(address master, uint256 TokenId, address target) external payable{
(bool success, ) = target.call{value: 0.000777 ether}(abi.encodeWithSignature("purchase(uint256)", 1));
if(success){
Tokenint(target).safeTransferFrom(address(this), master, TokenId);
}
}
漏洞原因
- 合约的
mint函数调用的target地址可以通过参数任意指定,导致攻击者重入攻击mint函数,同时攻击者完全可以自定义target合约的safeTransferFrom函数,让对safeTransferFrom的调用永远成功; - 未校验用户发送的ETH数量(
msg.value)等于转发给target合约的数量,也没有处理用户多发ETH的情况; - 未校验transferFrom函数的
TokenId是否等于 purchase 得到的TokenId
修复建议
target合约地址仅在构造函数里初始化,或者通过白名单管理;- 添加
nonReentrant修饰符预防重入攻击; - 添加校验保证用户发送的
msg.value和发送给target地址的以太坊数量一致,或者返回用户多发的ETH; - 添加校验保证
purchase函数调用得到的token和safeTransferFrom的token一致.
资金损失
- 如果用户在调用
mint函数时多发了ETH,ETH会留在当前合约; - 该链上合约当前没有ETH,如果当前合约有ETH,可以被黑客重入攻击,耗干合约内的ETH。
欢迎免费试用我们的产品,用于扫描您关心的智能合约。
- Sign-up:https://app.metatrust.io/sign-up
- Sign-in:https://app.metatrust.io/sign-in
Twitter: https://twitter.com/MetatrustLabs
所有评论