北京時間 2021 年 8 月 4 日早上 6 點(區塊 12955063),Popsicle Finance 項目下的多個機槍池被攻擊,損失金額超過兩千萬美元,是迄今為止 DeFi 領域發生的損失數額最大的單筆攻擊之一。通過分析攻擊交易及項目代碼我們發現,此次攻擊是一個利用項目的記賬漏洞進行多次提取的攻擊(Double-Claiming Rewards)。下面我們通過代碼和攻擊流程分析此次攻擊。
Popsicle Finance 是一個涉及多個鏈的機槍池(Yield Optimization Platform)。
用戶首先調用 deposit 函數向機槍池存入一定的流動性,并獲得 Popsicle LP Token (以下簡稱 PLP Token)作為存款的份額證明。Popsicle Finance 會將用戶提供的流動性存入 Uniswap 等底層池子并獲得收益。
用戶還可以調用 withdraw 函數,根據用戶持有的 PLP Token 所代表的流動性份額,從機槍池取回流動性。Popsicle Finance 會將 PLP Token 對應的流動性從 Uniswap 等底層池子中取回給用戶。
動畫系列Krapopolis將于9月在FOX首映,提供NFT和粉絲投票:金色財經報道,Fox Network的Animation Domination將推出名為 Krapopolis 的動畫系列來擴大其陣容,該系列將于 9 月 24 日在 FOX TV首播,該系列集成了Web3資產以提高觀眾參與度并獎勵粉絲。對于節目的區塊鏈部分,福克斯旗下的 Web3 媒體公司 Blockchain Creative Labs (BCL) 推出了包含 10,420 個數字“Krap Chickens”的 NFT 集合。該仍在鑄造的系列在 2022 年動漫展上發布公告后正式推出。到目前為止,收藏家已鑄造了 3,696 枚 Krap Chicken。每個“Krap Chicken”NFT 都可以作為 Krapopolis 擴展宇宙的粉絲通行證,并具有劇中描述的特征。[2023/8/12 16:21:47]
最后,用戶在機槍池中存的流動性會隨著時間產生一定的收益(Yield),會累計在合約的用戶狀態中。用戶可以調用 collectFees 函數取回部分存款獎勵。
巴哈馬刷臉支付供應商PopPay宣布支持CBDC購買商品:金色財經報道,巴哈馬PopID和SunCash今天宣布,消費者現在可以使用 PopPay 人臉驗證平臺使用中央銀行數字貨幣 (CBDC) 購買商品和服務。
巴哈馬消費者現在可以將他們的 SunCash 賬戶與 PopPay 關聯,以使用他們的 Sand Dollars 進行刷臉支付交易。然后,他們可以在 SunCash 商家網絡中使用數字貨幣,僅使用他們的臉進行身份驗證。各種本地和全球品牌正在或將接受 PopPay 通過 SunCash 平臺認證的數字 Sand Dollars。[2022/5/20 3:29:26]
本次攻擊的核心函數正是 collectFees 函數。下面我們逐步分析其代碼。首先獲得存儲在 userInfo 中的用戶狀態。其中用戶狀態中的 token0Rewards 和 token1Rewards 是由于用戶存款而累積的獎勵。
接下來計算該合約中,對應機槍池的 Token 對的 Balance。如果在合約中有足夠的 Balance,就按金額將 Reward 支付給用戶;否則會調用 pool.burnExactLiquidity 從底層 pool 取回流動性返回給用戶。
Animoca Brands與韓國唱片公司Cube Entertainment合作打造“K-pop音樂元宇宙”:11月15日消息,NFT游戲公司Animoca Brands今日宣布與韓國唱片公司、經紀公司和音樂制作公司Cube Entertainment達成合作,以打造“K-pop音樂元宇宙”。雙方將合作創建多媒體NFT,以紀念Cube名單上的流行演員和韓國流行歌手。NFT將以藝術家肖像和專輯藝術等圖像為特色,還將包括全長專輯等數字聲源。(Cointelegraph)[2021/11/15 6:52:30]
最后,會將記錄在 userInfo 中的 Rewards 狀態進行更新。看到這里,機槍池的代碼實現還是比較符合邏輯的。但是在函數開頭我們發現了 updateVault modifier,這個函數會在 collectFees 的函數體之前運行,漏洞也許在 updateVault 相關的函數中。
以上是 updateVault 相關函數的實現。過程如下:
首先調用_earnFees 向底層 pool 獲取積累的 Fee;
LollipopSwap新流動性池SUSHI-ETH首日年化達到17670%:據官方消息,Defi項目LollipopSwap于9日開放新流動性池,包括DAI-ETH、UMA-ETH、COMP-ETH、LEND-ETH、YFI-ETH、SUSHI-ETH、LINK-ETH和BAND-ETH。流動性挖礦池UMA-ETH年化收益最高一度達到19425%,SUSHI-ETH年化收益最高達到17670%。創始人稱,該項目“將證明Defi社群的熱情是讓社會實驗可以繼續的根本原因”。[2020/9/10]
隨后調用_tokenPerShare 更新 token0PerShareStored 和 token1PerShareStored 參數,這兩個參數代表了池子中每個 share 代表的 token0 和 token1 的數量,即機槍池的每個份額計代表的 Token 對數量;
最后調用fee0Earned 和fee1Earned 更新對應到這個用戶的存款 Rewards (即 user.token0Rewards 和 user.token1Rewards)。
Bithumb暫停Popchain上線 二者被質疑存在關聯:今日下午,Bithumb發布公告延遲Pop Chain的上線時間,給出理由為“有很多未經證實的虛假事實傳播到市場”。據外媒CCN報道,Popchain與Bithumb可能存在一定關聯。Popchain源代碼的前三名貢獻者是Kwuaint Li,Lialvin和Su Mingrui,同時也是Bithumb Cash的三個主要開發人員。今年4月,Bithumb表示可能會重新考慮其ICO計劃,而現在,整個項目都停止。投資者稱Bithumb暫停其ICO計劃,來推進Popchain。在Popchain剛推出時,Bithumb團隊稱將利用The E&M’s Popcorn TV 和Celeb TV,將Popchain發展成一個成功的基于區塊鏈的內容服務平臺。投資者因這兩個平臺擁有龐大受眾群體而投資Popchain。同時,Popchain的91%供應儲存在兩個錢包中,投資者對可能存在的龐氏騙局表示擔憂。[2018/5/16]
以上是fee0Earned 和fee1Earned 函數的實現,兩個函數實現相同,都實現了這樣一個公式(以_fee0Earned 為例):
user.token0Rewards += PLP.balanceOf(account) * (fee0PerShare - user.token0PerSharePaid) / 1e18
也就是說,該函數會在原有的 user.token0Rewards 基礎上,根據用戶擁有的 PLP Token 數量計算應給用戶發放的 Fee 的份額。
但我們注意到這個函數是增量的,也就是說即使用戶并沒有持有 PLP Token (PLP.balanceOf(account) 為 0),該函數仍會返回保存在 user.token0Rewards 中記賬的存款獎勵。
因此對于整個合約,我們發現兩個重要的邏輯缺陷:
用戶的存款獎勵是記錄在 user.token0Rewards 和 user.token1Rewards 中的,并不與任何 PLP Token 或其他東西有任何形式的綁定。
用于取回存款收益的 collectFees 函數僅僅依賴于記賬的 user.token0Rewards 和 user.token1Rewards 狀態,即使用戶并未持有 PLP Token,仍可以取出對應的存款獎勵。
我們假想一個攻擊流程:
攻擊者向機槍池中存入一定的流動性,獲得一部分 PLP Token。
攻擊者調用 collectFees(0, 0),后者會更新攻擊者的存款獎勵,即狀態變量 user.token0Rewards 的值,但并沒有真正取回存款獎勵。
攻擊者將 PLP Token 轉給自己控制的其他合約,再調用 collectFees(0, 0) 更新狀態變量 user.token0Rewards。也就是說通過不斷地流轉 PLP Token 并調用 collectFees(0, 0),攻擊者復制了這些 PLP Token 對應的存款獎勵。
最后,攻擊者從以上各個地址調用 collectFees 函數,取回真正的獎勵。此時雖然這些賬戶中并沒有 PLP Token,但由于記賬在 user.token0Rewards 沒有更新,攻擊者因此得以取出多份獎勵。
用現實生活中的例子來描述這個攻擊,相當于我向銀行存錢,銀行給了我一張存款憑證,但這張憑證沒有防偽措施也沒有和我綁定,我把憑證復印了幾份發給不同的人,他們每個人都憑借這個憑證向銀行取回了利息。
通過以上的代碼分析,我們發現了 Popsicle Finance 在機槍池實現上的漏洞。下面我們對攻擊交易進行深入分析,看攻擊者是怎樣利用這個漏洞的。
攻擊者的總體流程如下:
攻擊者創建了三個交易合約。其中一個用于發起攻擊交易,另外兩個用于接收 PLP Token 并調用 Popsicle Finance 機槍池的 collectFees 函數取回存款獎勵。
通過閃電貸從 AAVE 借出大量流動性。攻擊者選擇了 Popsicle Finance 項目下的多個機槍池,向 AAVE 借出了對應這些機槍池的六種流動性。
進行Deposit-Withdraw-CollectFees循環。攻擊者一共進行了8 次循環,分別攻擊了 Popsicle Finance 項目下的多個機槍池,取出了大量流動性。
向 AAVE 歸還閃電貸,并將獲利通過 Tornado Cash 洗錢。
本次攻擊交易主要由數個 Deposit-Withdraw-CollectFees 循環構成,每一個循環的示意圖如上圖所示。根據我們的分析,邏輯如下:
攻擊者首先將閃電貸借來的流動性存入機槍池中,獲得一定量的 PLP Token。
攻擊者將 PLP Token 轉給攻擊合約 2。
攻擊合約 2 調用機槍池的 collectFees(0, 0) 函數,設置合約 2 對應的 user.token0Rewards 和 user.token1Rewards 狀態。
攻擊合約 2 將 PLP Token 轉給攻擊合約 3。
和攻擊合約 2 的操作類似,攻擊合約 3 調用機槍池的 collectFees(0, 0) 函數,設置合約 2 對應的 user.token0Rewards 和 user.token1Rewards 狀態。
攻擊合約 2 將 PLP Token 轉回攻擊合約,后者調用機槍池的 withdraw 函數 Burn 掉 PLP Token,取回流動性。
攻擊合約 2 和攻擊合約 3 調用 collectFees 函數,用虛假的 tokenRewards 狀態取回了存款獎勵。
根據我們的以太坊交易追蹤可視化系統(https://tx.blocksecteam.com/)給出的交易調用圖如下,其中部分重要交易用紅字進行標注:
本次攻擊一共獲利:2.56k WETH,96.2 WBTC,160k DAI,5.39m USDC,4.98m USDT,10.5k UNI,獲利共計超過 20,000,000 美元。
在此次攻擊之后攻擊者通過首先通過 Uniswap 和 WETH 將攻擊獲得的其他 token 全部換成 ETH,然后通過多次使用 Tornado.Cash 將 ETH 洗白。
Tags:KENTOKTOKENTOKEPosition Tokenitokenwallet怎么賣幣Golden Society Token V2PoSToken
比特幣遠期期權和多頭仍然以其極度看漲的押注掀起波瀾,但他們也必須承認,比特幣在未來幾個月內超過60000美元的可能性很渺茫.
1900/1/1 0:00:00元宇宙不是一個產品,而是互聯網的未來。元宇宙(Metaverse)這個詞正在成為「風口」。這是個 29 年前就存在的科幻概念,隨著最近幾年吸納了日臻成熟的 AI、AR/VR、區塊鏈等技術成果后,
1900/1/1 0:00:00在7月26日,分裂之地Splinterlands啟動了其治理代幣SPS的發行。分裂之地借鑒了爆款Axis的play to earn模式,發行了總量為30億個的治理代幣SPS,并將其中超過70%的.
1900/1/1 0:00:00每當加密資產市場行情陷入低迷,社區總會產生一些針對?Tether?公司的質疑之聲,包括 USDt 的隨意增發、價格波動或有暴雷風險等等.
1900/1/1 0:00:00最初對于區塊鏈的定義是:區塊鏈是一個去中心化的分布式數據庫,具有去中心化、防篡改、可追溯特性。比起將區塊鏈視為一種技術創新,區塊鏈首先是一種機制設計的創新.
1900/1/1 0:00:00這個周末是屬于 NFT 的。當你打開 Dune Analytics 的 OpenSea 數據統計頁面便會發現,7 月 31 日和 8 月 1 日兩天,這家全球最大的 NFT 交易平臺的單日交易額.
1900/1/1 0:00:00