建議使用者取消不同鏈上 Sushiswap RouteProcessor2 合約的授權

封面: Sushi

2023 年 4 月 9 日,據 BeosinEagleEye 態勢感知平臺消息, Sushiswap RouteProcessor2 合約遭受攻擊,部分對合約授權過的用戶資金被駭客轉移,涉及金額約 1800ETH,約 334 萬美元。

據瞭解,SushiSwap 流動性挖礦專案,克隆自 Uniswap,最大的不同是其發行了 SUSHI 代幣,團隊希望用 SUSHI 通證經濟模型,優化 Uniswap。 但 Uniswap 創始人 Hayden Adams 表示,Sushi 只是任何有能力的開發人員通過一天的努力創造出來的東西,試圖利用炒作和 Uniswap 創造的價值來獲利。

其實在本次攻擊之前,這個項目還有另外的「坎坷」,去年 12 月 6 日,上任僅兩個月的 Sushi 新任「主廚」Jared Grey 於治理論壇發起了一項新提案。 在該提案中,Jared 首次向外界披露了 Sushi 當前嚴峻的財務狀況,並提出了一個暫時性的自救方案。

正是在這樣的壓力下,駭客又來一擊,那在駭客的打擊下,SushiSwap 能否走出自救的道路?

事件相關信息

我們以其中一筆攻擊交易進行事件分析。

攻擊交易

0xea3480f1f1d1f0b32283f8f282ce16403fe22ede35c0b71a732193e56c5c45e8

攻擊者位址

0x719cdb61e217de6754ee8fc958f2866d61d565cf

攻擊合約

0x000000C0524F353223D94fb76efab586a2Ff8664

被攻擊合約

0x044b75f554b886a065b9567891e45c79542d7357

被攻擊使用者

0x31d3243CfB54B34Fc9C73e1CB1137124bD6B13E1

攻擊流程

1. 攻击者地址 (0x1876…CDd1) 约 31 天前部署了攻击合约。

2. 攻击者发起攻击交易,首先攻击者调用了 processRoute 函数,进行兑换,该函数可以由调用者指定使用哪种路由,这里攻击者选择的是 processMyERC20。

3. 之后正常执行到 swap 函数逻辑中,执行的功能是 swapUniV3。 

 4. 在这里可以看到,pool 的值是由 stream 解析而来,而 stream 参数是用户所能控制的,这是漏洞的关键原因,这里 lastCalledPool 的值当然也是被一并操控的,接着就进入到攻击者指定的恶意 pool 地址的 swap 函数中去进行相关处理了。

5.Swap 完成之后,由于此时 lastCalledPool 的值已经被攻击者设置成为了恶意 pool 的地址,所以恶意合约调用 uniswapV3SwapCallback 函数时校验能够通过,并且该函数验证之后就重置了 lastCalledPool 的值为 0x1,导致 swapUniV3 函数中最后的判断也是可有可无的,最后可以成功转走指定的 from 地址的资金,这里为 100 个 WETH。

漏洞分析

本次事件攻击者主要利用了合约访问控制不足的问题,未对重要参数和调用者进行有效的限制,导致攻击者可传入恶意的地址参数绕过限制,产生意外的危害。

总结

針對本次事件,Beosin 安全團隊建議:

1. 在合約開發時,調用外部合約時應視業務情況限制使用者控制的參數,避免由使用者傳入惡意位址參數造成風險。

2. 使用者在與合約交互時應注意最小化授權,即僅授權單筆交易中實際需要的數量,避免合約出現安全問題導致帳戶內資金損失。

免責聲明:作為區塊鏈資訊平臺,本站所發佈文章僅代表作者及嘉賓個人觀點,與 Web3Caff 立場無關。 本文內容僅用於資訊分享,均不構成任何投資建議及要約,並請您遵守所在國家或地區的相關法律法規。