OrionProtocol 重入攻击分析附Poc
事件背景
根据NUMEN链上监控显示,Feb-02-2023 03:40:20 PM +UTC,Ethereum和Binance链上OrionProtocol以为合约漏洞遭到重入攻击,损失1,651枚ETH(Ethereum)和191,030枚USD(Binance),价值约290万美元。
Ethereum链过程分析:
攻击者地址:0x837962b686fd5a407fb4e5f92e8be86a230484bd
攻击者合约:0x5061f7e6dfc1a867d945d0ec39ea2a33f772380a
攻击交易:0xa6f63fcb6bec8818864d96a5b1bb19e8bd85ee37b2cc916412e720988440b2aa

攻击分析
攻击者首先创建Token合约(0x64acd987a8603eeaf1ee8e87addd512908599aec),并对Token进行转移及授权,为后续攻击做准备。

攻击者通过UNI-V2.swap方法借款并调用ExchangeWithAtomic.swapThroughOrionPool方法进行代币兑换,兑换路径为
path=[USDC, 0x64acd987a8603eeaf1ee8e87addd512908599aec,USDT]
路径0x64ac…0aec是攻击者创建的Token合约,攻击者将使用该合约进行回调。

调用ExchangeWithAtomic.swapThroughOrionPool方法兑换时,由于攻击者创建的Token合约存在回调,所以攻击者通过Token.Transfer继续回调ExchangeWithAtomic.depositAsset进行重入让存款金额累加,随后取款完成获利。

资金流向
黑客初始资金来自于币安热钱包账户,获利的1651枚ETH其中还657.5枚还留在钱包地址中,其余的已经通过Tornado.Cash进行转移。

漏洞核心
关键问题在doSwapThroughOrionPool函数
合约地址:https://etherscan.io/address/0x420a50a62b17c18b36c64478784536ba980feac8#code
然后跟进到_doSwapTokens函数。

看到转账发生之后更新curBalance,所以在faketoken的transfer新增一个回调功能,回调代码就是调用depositAsset函数,所以导致curBalance错误更新,然后攻击者在还完闪电贷之后调用withdraw提走资金 。
攻击复现
部分POC代码:

测试结果


和调用栈结果一致。
完整poc链接:
https://github.com/numencyber/SmartContractHack_PoC/tree/main/OrionProtocolHack
总结
NUMEN实验室提醒项目方,合约存在兑换功能时,需要考虑多种Token以及多种兑换路径出现的意外情况,并且对于合约代码逻辑遵循先判断,后写入变量,再进行外部调用的编码规范(Checks-Effects-Interactions)会使项目更加安全稳定。保障合约风险尽可能被消除在链下,NUMEN专注于为web3生态安全保驾护航。
郑重声明:本文版权归原作者所有,转载文章仅为传播信息之目的,不构成任何投资建议,如有侵权行为,请第一时间联络我们修改或删除,多谢。
XRP 涨至 7.5 美元?分析师告诉 XRP 大军为纯粹的烟火做好准备!
加密货币分析师 EGRAG 表示,XRP 即将迎来关键时刻,价格可能大幅上涨,这取决于能否突破关键...
今晚ETH迎来暴涨时代 op、arb、metis等以太坊二层项目能否跑出百倍币?
北京时间7月23日晚上美股开盘后 ETH 的ETF开始交易。ETH的里程碑啊,新的时代开启。突破前...
Mt Gox 转移 28 亿美元比特币 加密货币下跌 ETH ETF 提前发行
2014 年倒闭的臭名昭著的比特币交易所 Mt Gox 已向债权人转移了大量比特币 (BTC),作...
Numen Cyber
文章数量
17粉丝数
0
