9月20-21日,Fetch.ai、NuNet及SingularityNET相继受到同一攻击者的攻击。攻击者首先利用泄露的私钥和合约设计缺陷从Fetch.ai的TokenConversionManagerV3合约中提取了870万枚FET,随后利用NuNet的铸币权限增发了4.085亿枚NTX代币,最后通过SingularityNET跨链桥在以太坊上铸造了约8.96亿枚AGIX、5.005亿枚WMTx以及4.924亿枚CGV。
目前,这起事件造成的直接损失约225万美元,攻击者还持有名义价值约1650万美元的新铸代币。Beosin对本次连环攻击的分析如下:
一、攻击流程分析
第一阶段:FET 代币转换合约被清空
攻击的起点是Fetch.ai的TokenConversionManagerV3合约。除私钥泄露外,该合约的conversionIn()函数还存在一个关键的设计缺陷:
function conversionIn(address to,uint256 amount,bytes32 conversionId,uint8 v,bytes32 r,bytes32 s)externalnotZeroAddress(to){// Check for non zero value for the amount is not needed as the Signature will not be generated for zero amount// Compose the message which was signedbytes32 message = prefixed(keccak256(abi.encodePacked("__conversionIn",amount,_msgSender(),conversionId,this)));// Check that the signature is from the authorizerif (ecrecover(message, v, r, s) != _conversionAuthorizer)revert InvalidRequestOrSignature();// Check for replay attack (message signature can be used only once)if (_usedSignatures[message])revert UsedSignature();_usedSignatures[message] = true;// check for available token on contractif (getConverterBalance() < amount)revert InsufficientConverterBalance();IERC20(TOKEN).transfer(to, amount);emit ConversionIn(to, conversionId, amount);}
该函数仅依赖单一外部账户(EOA)的签名作为授权凭证。该函数既未实现conversionOut()中存在的checkLimits(amount)限额控制机制,也未要求验证目标资产是否在另一网络完成了锁定或销毁。因此只要签名密钥泄露,合约内的全部资产便毫无缓冲地暴露在风险之下。
攻击者利用这一缺陷,使用泄露的授权签名调用conversionIn(),一笔交易清空了转换器合约中剩余的8,721,530枚FET。
第二阶段:NTX 代币被大量增发
攻击者获得NuNet部署者账户(0x863F13e5B505f1Eb17803b94EC9d3DaF80092165)的权限,新铸造了4.085亿枚NTX代币。此次未授权增发将代币流通量推至10亿枚的上限。
第三阶段:跨链桥权限被滥用
随后,攻击范围进一步扩大至SingularityNET的跨链桥。攻击者利用该桥接基础设施的授权漏洞,在以太坊网络先铸造了约2.6亿枚AGIX和5383.8万枚WMTx。
后续由SingularityNET官方统计,攻击者总共铸造了约8.96亿枚AGIX、5.005亿枚WMTx以及4.924亿枚CGV,累计涉及约23亿枚代币。具体情况如下所示:


三、安全建议
Beosin是一家领先的区块链安全与监管合规科技公司,专注于项目上线前的智能合约安全审计、项目运行时的安全风险监控与阻断、被盗追回、虚拟资产反洗钱(AML)以及调查追踪。Beosin已为全球20多个国家和地区的监管与执法机构、200多家虚拟资产服务商以及4500多家Web3项目提供“一站式”区块链合规产品+安全服务。欢迎点击公众号留言框,与我们联系。
