零時科技 || SumerMoney攻擊事件分析

免責聲明: 內容不構成买賣依據,投資有風險,入市需謹慎!

零時科技 || SumerMoney攻擊事件分析

深圳零時科技 個人專欄 剛剛 關注

背景介紹

我們監控到base鏈上的一起攻擊事件,

https://basescan.org/tx/0x619c44af9fedb8f5feea2dcae1da94b6d7e5e0e7f4f4a99352b6c4f5e43 a4661

攻擊者通過此次攻擊共獲利310570 USDC10 cbETH,共約合35萬美金

被攻擊項目爲SumerMoney,SumerMoney是一個基於Compond修改的借貸協議,用戶可以通過提供流動性來獲利。SumerMoney共支持的underlying assets有ETH, USDC, USDbc, DAI, wstETH, cbETH, suUSD, suETH。其中,每一個underlying asset對應一個借貸池poll。用戶可以通過和借貸池poll交互來完成對應的操作。

攻擊及事件分析

首先,攻擊者通過攻擊合約1從Balancer中利用flashloan借了645000 USDC 150 ETH 。

隨後,攻擊合約1創建了另一個攻擊合約(攻擊合約2),並將Balancer中借來的645000 USDC 轉入新的攻擊合約2中,並轉入了1 wei 。

接着,在攻擊合約2的攻擊函數中,攻擊者將645000 USDC通過mint 兌換爲643630 sdrUSDC 。

隨後,攻擊者再通過borrow從sdrETH pool中借出 150.358797170664290045 ETH 。並向sdrETH pool中轉入150.358797170664290046 ETH執行repayBorrowBehalf進行還款。

repayBorrowBehalf的具體實現如下:

我們可以看到,合約會將超出總借款的部分再轉回給用戶。由於,sdrETH pool收到了150.358797170664290046 ETH ,但是只借出了150.358797170664290045 ETH ,所以會將0.000000000000000001 ETH再轉給攻擊合約2。由於接到了ETH轉账,攻擊合約2觸發了fallback函數,fallback函數中又調用了攻擊合約1,再次進行borrow 和redeemUnderlying 。

我們注意到,攻擊者redeem 150 ETH只需要74.99998941541294 sdrETH(本應是 150 sdrETH )。

接下來,我們看一下合約是如何計算sdrTokenunderlying token的兌換比例。

由上面的公式,我們可以知道兌換的underlying token爲對應的sdr token除以exchangRate 。由下面的公式同樣可以知道exchangeRate的計算方式。

其中totalCash是由以下函數計算

那么,漏洞其實就比較明顯了。mint 、 borrow 、 redeem 、 repay這些操作均應該是原子操作。但是,repayBorrowBehalf出現了一個重入漏洞,攻擊者通過構造一個特殊的金額( borrowsAmount + 1 wei )。sdrETH 將多余的1 wei重新發送給攻擊者合約,從而觸發了攻擊合約2的fallback函數,在fallback函數中(在ETH轉入時,exchangeRate 已經增長了1倍,攻擊者手中的sdrToken的價值增加了一倍),攻擊者進行重入攻擊,調用借貸函數,借出了其他資產。最後,還清SumerMoney和Balancer的借貸,攻擊完成。

0 好文章,需要你的鼓勵
了解更多區塊鏈一线報道,與作者、讀者更深入探討、交流,歡迎添加小助手QQ: 3150128700, 進入[金色財經讀者交流群]。
聲明:本文系金色財經原創稿件,版權屬金色財經所有,未經授權不得轉載,已經協議授權的媒體下載使用時須注明"稿件來源:金色財經",違者將依法追究責任。
本文作者: 深圳零時科技
打开金色財經App 閱讀全文 打开金色財經,閱讀體驗更佳 金色財經 > 深圳零時科技 > 零時科技 || SumerMoney攻擊事件分析 免責聲明: 金色財經作爲开放的資訊分享平台,所提供的所有資訊僅代表作者個人觀點,與金色財經平台立場無關,且不構成任何投資理財建議。

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播信息之目的,不構成任何投資建議,如有侵權行為,請第一時間聯絡我們修改或刪除,多謝。

相關文章