2023年3月29日,SafeMoon的流动性池遭到攻击,损失890万美元。从交易记录和合约更新中可以看出,合约的修改导致了漏洞,使得任何人都可以调用mint函数并转移tokens。攻击者利用这一漏洞通过闪电贷进行了一系列操作,最终导致资金损失。
在2023年3月29日的早晨,SafeMoon的流动性池遭到攻击,价值890万美元的代币被提取。通过查看交易记录和近期的合约变更,我们可以告诉你发生了什么:
在BSC交易 0xcb8573807b1db40215840f690eeba6af6ec8fcc5a98eb5d545d40f7f775b0d1b↗中,SafeMoon代币被更新以包含4个新功能:

function setBridgeBurnAddress(address _burn) public onlyOwner {
bridgeBurnAddress = _burn;
}
function setWhitelistBurn(address _wl) public onlyOwner {
whitelistMint[_wl] = true;
}
function mint(address user, uint256 amount) public onlyWhitelistMint {
_tokenTransfer(bridgeBurnAddress, user, amount, 0, false);
}
function burn(uint256 amount) public {
_tokenTransfer(msg.sender, bridgeBurnAddress, amount, @, false);
}
随后在交易 0x3307500ebaf50fb72c82a62829c8a0b20d8a076e9beae1ff97d87ba32843e219↗ 中再次更新,以允许从任何人而不是发送者那里燃烧代币。
接着又在交易 0x71273e731752457892f73d2ad8b89060bd4f0bf131ed403d5dfc149319c1c01d↗ 中更新,以反转onlyWhitelistMint修饰符。
因此,在超过一天的时间里,任何人都可以调用mint函数,并从桥接燃烧地址(即SafeMoon部署者)转移任意数量的代币。
一旦mint函数被修复,剩下的只是公共燃烧函数,该函数随后被利用:
攻击相当简单:
幸运的是,似乎有人愿意归还资金,抢跑了该漏洞:
交易 0xf98a8b7e3ffee676f06f0c037141483ec2c9cf8753a57fbcdbd718590e4d77ff↗
请查看完整的POC在
github/Zellic/poc-hacks/SafeMoon/test/Safemoon.t.sol↗
Zellic专注于保障新兴技术的安全。我们的安全研究人员已经发现了在最有价值的目标中的漏洞,从财富500强到DeFi巨头。
开发者、创始人和投资者信任我们的安全评估,以快速、自信并且没有关键漏洞地发布产品。凭借我们在现实世界攻防安全研究中的背景,我们发现了其他人忽视的东西。
联系我们↗以获取更优质的审核。真实审核,而非走过场。
- 原文链接: zellic.io/blog/safemoon-...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!