事件背景
零时科技区块链安全情报平台监控到消息,北京时间2023年5月30日,Arbitrum链上EDE Finance项目受到黑客攻击,攻击者获利 597,694 USDC及86,222 USDT,攻击者地址为0x80826e9801420e19a948b8ef477fd20f754932dc。攻击者完成攻击后,在链上留言声称为“白帽行为”,目前攻击者已返还EDE FinanceEDE Finance项目333,948 USDC及86,222 USDT,留下部分USDC未转移。零时科技安全团队及时对此安全事件进行分析。
攻击过程分析
-
攻击时间背景
攻击者提前创建好攻击合约:
0x6dd3d2fb02b0d7da5dd30146305a14190e6fb892
创建攻击合约的交易hash:
0xd7bfe2ed548c40d3e9b301a83f16e9c4080e151470ebf4d03c83ff302b9ad99e
攻击合约是一个代理合约,其主要逻辑合约位于:
0x171c01883460b83144c2098101cd57273b72a054,未做合约验证
攻击者其中一组攻击交易:
0xc3677aec922f3c0641176277d9923bf03ff400e9b79013ba86ac8ceb878fcd86
0x6e48dbe65c9997d774d75bc01468a354c3660a44eef59a4383639933a50fc814
EDE项目的价格预言机合约 VaultPriceFeedV21Fast :
0x046600975bed388d368f843a67e41545e27a2591
EDE项目的Router合约:
0x2c7077cf9bd07c3bc45b4e5b8c27f8b95c6550b3
EDE项目的 RouterSign 合约:
0xd067e4b0144841bc79153874d385671ea4c4e4df ,此合约地址拥有Updater管理员权限,该权限可以进行加密资产的价格设置,如下图所示。
-
攻击步骤
1.攻击者部署攻击合约
2.攻击者通过调用攻击合约,间接调用了 RouterSign 合约中的添加仓位操作
3.随后攻击者立即又利用攻击合约调用了 Router 合约的减仓操作
4.后续,攻击者通过重复上述攻击步骤,通过多次加仓减仓,进行大额获利
核心漏洞
根据对攻击交易分析,发现攻击者通过加仓与减仓直接使用的价格差从而获取巨额资金,具体如下分析过程。
加仓时使用价格:
减仓时使用价格:
加仓和减仓的价格明显存在较大差距。
通过对攻击者交易的调用堆栈发现,其在加仓时,通过调用了EDE项目中价格预言机的更新价格功能updateWithSig ,而预言机的喂价功能不仅限制了必须存在 Updater 特权角色,且必须使用 Updater 角色进行签名才可以正常调用。
但攻击者利用了 RouterSign 合约的加仓函数,间接调用 价格预言机中的 updateWithSig 特权函数,从而成功绕过了原本的onlyUpdater权限限制。
并且由于EDE价格预言机中喂价签名验证机制存在问题,虽然对签名时间进行了校验,但未对已经使用过的签名进行校验,导致攻击者可以重放管理员签名。
如下图为攻击者间接调用预言机喂价功能传递的签名参数:
如下图为EDE项目管理员通过预言机合约直接调用喂价功能使用的参数:
所以,综上所述,攻击者使用管理员签名,并且绕过onlyupdater限制,成功重放并设置了一个较高的Token价格,并在随后立即使用新价格执行加仓操作,然后攻击者立即调用 Router 合约使用正常的价格进行减仓,利用较大的价格差从而获利。
资金来源及流向
通过分析发现,攻击地址初始手续费通过0x483e657f53c7bc00c2d2a26988749dd8846229e3地址转入0.002ETH
0x483e657f53c7bc00c2d2a26988749dd8846229e3地址的初始手续费通过Kucoin交易所提取
总结及建议
-
分析总结
本次攻击是由于项目新增合约时未进行安全审计,新增合约破坏原有合约权限认证机制,配合Updater 签名重放问题,从而导致这两个利用点被组合利用。
攻击利用点:
-
RouterSign 合约中对 updateWithSig 的 Updater 特权限制绕过
-
Updater 特权签名重放
安全建议
-
项目价格预言机喂价的签名验证添加唯一标识符,并限制每个签名只能使用一次;
-
项目需要确认 RouterSign 合约中的功能函数是否能外部公开,且设置权限校验。
往期内容回顾
原文始发于微信公众号(零时科技):零时科技 || 白帽行为?Arbitrum链上EDE Finance 攻击事件分析