前言
CF代币合约被发现存在漏洞,它允许任何人转移他人的CF余额。到目前为止,损失约为190万美元,而pancakeswap上CF/USDT交易对已经受到影响。知道创宇区块链安全实验室第一时间对本次事件深入跟踪并进行分析。
事件详情
Cream Finance黑客将365.7 ETH转入TradeOgre,1月迄今已转移超2000枚ETH:金色财经报道,据PeckShieldAlert披露数据显示,利用 Cream Finance 漏洞实施攻击的黑客再次转移资金,据该黑客标记地址显示,目前已将 365.7 ETH(约合 60 万美元)转入 TradeOgre。自 2023 年 1 月以来,这个黑客总计将 2070 枚 ETH 转入 TradeOgre,价值达到 326 万美元。[2023/1/30 11:36:04]
受影响的合约地址
Cream将DAI抵押因子从0%提升至75%:去中心化借贷交易平台Cream Finance宣布将DAI抵押因子从0%提升至75%,DAI的抵押因子目前和ETH、YCRV、USDC、BUSD、yyCRV、yETH抵押因子相同,并列成为抵押因子最高的抵押代币。[2020/12/8 14:34:07]
https://bscscan
抵押借贷平台Cream添加三位多重签名钱包持有人,团队代币解锁期延长至4年:抵押借贷平台Cream Finance( CREAM)宣布增加了三位社区负责人,分别为Pantera Capital合伙人Paul Veradittakit、Multicoin Capital合伙人Kyle Samani和FTX和Alameda Research创始人Sam Bankman-Fried,将添加为多重签名钱包持有人。另外,Cream Finance还将团队代币解锁期(vesting)从2年延长至4年。另外,Cream Finance目前多重签名钱包中有8325000枚CREAM,占代币总量的92.5%。[2020/9/6]
uint256fee=0;..
_transfer()函数是直接转移代币transfer()和授权转移代币transferFrom()的具体实现,但该函数的修饰器是public,因此任何人都可以不通过transfer()或transferFrom()函数直接调用它。而当变量useWhiteListSwith设置为False时,该函数不会检查调用地址和传输地址是否合规,直接将代币转移到指定地址。
在区块高度为16841993时,管理员就把useWhiteListSwith设置为False:
此时开始有攻击者利用_transfer()函数直接转移代币:
总结
经过完整分析,知道创宇区块链安全实验室明确了该次事件的源头由函数本身权限出现问题,而管理员同时操作不慎关闭了白名单检测,两方结合导致攻击者可以实现转移任意钱包代币的操作。
在核心函数上我们一直建议使用最小权限原则,像这次的_transfer()函数本不该用public修饰器,使得transferFrom()函数检查授权额度的功能形同虚设;而合约管理者也不该随意修改关键变量值,导致攻击者可以绕过白名单检查的最后一道防线。
合约不仅仅是代码层面的安全,不光需要白盒代码审计,更需要合约管理员共同合理维护。
郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。