作者:Beosin
3月5日,Solv Protocol部署的BitcoinReserveOffering (BRO-SOLV-20MAY2026)合约遭受攻击,损失38 SolvBTC (价值约270万美元)。Beosin安全团队对本次事件进行了攻击手法与资金流向分析,并将结果分享如下:

攻击手法分析
本次事件的攻击交易交易哈希为: 0x44e637c7d85190d376a52d89ca75f2d208089bb02b7c4708ad2aaae3a97a958d
该攻击主要是利用了BRO合约中的一个逻辑漏洞:mint()会把 ERC-3525 代币通过 safeTransferFrom() 转移到wrapper中,并触发onERC721Received();回调函数会铸造一次BRO,而外部的mint()会再次铸造相同的代币。

如上图所示,mint()通过nonReentrant安全修饰符防止重入,但onERC721Received()并没有。在mint()中,当 amount_ == sftBalance 时,mint() 会执行 doSafeTransferIn(),该函数会执行 safeTransferFrom(from, address(this), tokenId)。在 mint() 执行到自身的 _mint(msg.sender, value) 之前,该操作会调用BRO合约上的onERC721Received(),在onERC721Received()里调用_mint(from_, value)从而实现重入。
攻击流程:
1. 攻击者调用burn(amount, 0),将一个 ERC-3525 代币转移到攻击合约。
2. 随后调用tokenOfOwnerByIndex(looper, 0),解析出可重用的代币ID 4932
3. 然后通过mint(4932, fullAmout),触发amount_ == sftBalance执行分支,实现攻击

攻击者通过22次上述的操作,成功从合约中提取38 SolvBTC并兑换成 1,211.05 ETH。
被盗资金追踪
根据链上交易数据,Beosin通过旗下区块链链上调查与追踪平台Beosin Trace进行了详尽的资金追踪,并将结果分享如下:
目前,被盗的1,211.05 ETH经过转移被存入Railgun,随后地址0xad64a432153906f805ad13fafd3f05d7e29a3f06提取 181 ETH,并将这部分资金存入Tornado Cash。整体资金流向如下图所示:

被盗资金流向分析图 by Beosin Trace
以上地址均已被Beosin KYT标记为高风险地址,以攻击者地址为例:

















No Comments