By:yudan@慢霧安全團隊
據慢霧區消息,2021 年 06 月 16 日,以太坊 DeFi 項目 Alchemix 的 alETH 合約疑似出現安全問題。17 日,Alchemix 發布了事故分析報告,慢霧安全團隊迅速介入分析,并在官方分析報告的基礎上梳理了本次事件的整個脈絡和核心關鍵點,供大家參考。
太長不看系列
本次分析文章很長。這里先說結論,方便大家有個大概的理解。本次事故的主要原因在于 Alchemix 通過 transmuter 添加了 3次 vault,導致收益信息記錄在了一個錯誤的元素上,而在調用 transmuter 的 harvest 函數時也沒有傳入正確的 index 值,導致通過錯誤的元素獲取了錯誤的收益,將錯誤的 4300 ETH 的收益發送到 adapter 合約,幫助用戶償還了 alETH 的貸款,造成收益增多的問題,導致了悲劇。
核心分析——Round 1
根據官方發布的事故分析報告,本次事故的原因是官方的 alETH 的部署腳本意外地創建了額外的 vaults,導致 Alchemix 使用了 vaults 數組中錯誤的索引并計算出了錯誤的獎勵,導致 transmuter 把所有的獎勵用于償還了用戶的所有負債。我知道單單是這句簡短的分析讓人有點云里霧里,摸不著頭腦,所以我們只能把目標放在官方給出的交易中,看看能不能找到真相。
Aragon旨在通過Base加速DAO啟動:金色財經報道,去中心化自治組織Aragon正在Coinbase最近發布的開發者網絡Base上推出其下一個框架。Aragon的增長主管Anthony Leutenegger表示,公司正在Base上發布兩款DAO開發者工具——Aragon App和模塊化Aragon OSx協議,有潛力將更多用戶帶入鏈上。[2023/8/13 16:22:43]
根據官方給出的交易,通過 ethtx.info 分析工具進行分析,我們不難發現,這筆交易調用了 AlchemistEth 合約的 harvest 函數,并且傳入了 _vaultId=0 這個參數,最后返回了
"4308144937764982868765" 和 "4308144937764982866415" 這兩個值。
為了更加了解 harvest 函數的作用,我們需要對整個函數進行分析:
不難發現,harvest 函數其實包含兩個重要的操作,分別是收獲獎勵和將獎勵分發給 transmuter 合約。其中 vault 是一個 library 庫合約,其中的 harvest 邏輯實現如下:
審議Celsius聯合重組計劃的披露證明聽證會將于8月10日舉行:7月10日消息,Celsius無擔保債權人官方委員會發推稱,債務人已提交第11章聯合重組計劃的披露聲明,審議該披露聲明的聽證會定于8月10日舉行,屆時法院將確定披露聲明是否為債權人提供了足夠的信息,以便對該計劃進行知情投票。法院還將確定債務人是否被授權就該計劃征集投票,并安排確認聽證會(confirmation hearing)。債務人已經要求將確認聽證會定在9月29日。
7月17日,債務人、債權人委員會、借款人特設小組和某些Earn債權人將于Wiles法官就計劃中Earn和貸款的相對處理問題進行調解。委員會希望各方能夠就如何在債權人之間公平分配財產價值達成協議。7月19日,債務人、委員會與Fahrenheit財團計劃通過Twitter Space來討論該計劃。[2023/7/10 10:45:53]
通過代碼分析不難發現,vault 庫合約的 harvest 函數其實是檢查了外部的 adapter 的總的資金量,然后根據 adapter 中的資金量減去用戶的充值數量計算出收益的部分。
這里我們可以將這個 adapter 理解為一個策略池,用于管理用戶的資金和收益。然后我們回到用戶一開始的 AlchemistEth 合約中的 harvest 函數,發現返回的 "4308144937764982868765" 和
美SEC主席:絕大多數加密代幣符合投資合同測試,大多數加密中介機構也須遵守證券法:6月9日消息,美國證券交易委員會(SEC)主席 Gary Gensler 在 2023 全球交易所和金融科技大會之前發布的一份發言稿中表示,沒有任何跡象表明加密證券市場中投資者和發行人不應該受到我們證券法的保護。正如我多次說過的,絕大多數加密代幣符合投資合同測試。這些代幣有團隊通過網站和 Twitter 帳戶進行推廣。這些代幣并非憑空而來。加密證券發行人需要向 SEC 登記其投資合同的要約和銷售或滿足豁免要求。
Gary Gensler 進一步稱,鑒于大多數加密代幣都受證券法的約束,因此大多數加密中介機構也必須遵守證券法。如果中介機構不進行注冊,受到傷害的是投資者,美國金融市場也可能會受到影響。在證券市場的其他領域,交易所、經紀自營商和清算功能是分開的,這有助于減輕因混合此類服務而可能產生的沖突。加密貨幣中介機構可能需要分離業務線,制定防止欺詐和操縱的規則手冊,適當隔離客戶資金,緩解沖突,或改變他們的清算和托管方法。[2023/6/9 21:25:39]
"4308144937764982866415" 這兩個值其實對應的就是 vault 庫合約的 harvest 函數計算出的需要提現的代幣數量和從 adapter (策略池) 中取回的代幣的數量。由于這個 adapter 對應的收益代幣是 WETH,精度為 18 位,那么 "4308144937764982866415" 這個數值換算過來就是 "4308.144937764982866415" 個 WETH。
西班牙稅務機構向加密貨幣持有者發送超32.8萬份通知:金色財經報道,西班牙政府國家稅務局(AEAT)加大力度向當地加密資產持有人收費。AEAT 打算向那些應該在 2022 財年繳納加密稅的人發出 328,000 份警告通知,通知的數量在一年內增加了 40%。
這些通知代表自愿邀請納稅,通過出售數字資產獲得的收益在 19% 到 23% 之間變化。那些不按時繳納稅款的人將被處以 26% 的額外罰款,根據未繳納的資金數額計算。[2023/4/12 13:59:23]
也就是說,本次 harvest 操作,收益了超過 4300 個 ETH 的收益,然后這個收益在下一步中通過 _distributeToTransmuter 函數給到了 transmuter 合約進行分發,我們看下分發過程中的邏輯是怎樣的:
_distributeToTransmuter 函數的邏輯只有簡單的 3 行,我們主要關注的是最后的外部調用 —— lowerHashMinted 函數。該函數所對應的 xtoken 在這里指的是 alETH 本身。因為 alETH 本身是用戶通過借貸借出來的,所以 lowerHashMinted 這里的操作其實是使用 harvest 的收益將 alETH 總的貸出數量減少了,從而減少了每個用戶的貸款。總結來說就是用 harvest 4300 ETH 的收益償還用戶的 alETH 貸款。
前Silvergate Bank董事會成員Rebecca Rettig擔任Polygon首席政策官:2月10日消息,加密友好銀行Silvergate Bank董事會成員Rebecca Rettig已經辭職,并加入Polygon Labs擔任首席政策官,負責為公司制定合理的加密貨幣政策。據悉,Rettig辭職不是由于與公司、銀行或董事會就與公司或銀行的運營、政策或慣例有關的任何事項發生任何爭議或意見不一致所致。[2023/2/10 11:58:40]
打個小總結
這里先總結下這個流程,就是 AlchemistEth 合約通過 harvest 函數,得到了 4300 ETH 的收益,并將這個收益分發出去了,用于償還用戶的 alETH 貸款,導致了我們看到的情況 —— 已經貸出 alETH 的用戶在不需要還款的情況下就可以拿回他們質押的 ETH。那究竟是為什么,會有這 4300 ETH 的收益呢?這多出來的 4300 ETH 的收益是怎么來的?針對這個問題,我們開始下一輪的分析。
核心分析——Round 2
要了解為什么會多出來 4300 ETH,就必須了解 AlchemistEth 的資金存儲過程。在 AlchemistEth 合約中,合約總的充值情況是使用 Vault library 庫的 Data 結構體進行記錄的,然后通過 flushActiveVault 函數更新對應的充值數量(totalDeposit)。
然后 depositAll 函數會將充值的代幣金額打到對應的 adapter(策略池) 中,那么在下一次 harvest 的時候,通過 adapter(策略池) 獲取的 totalValue,就會是用戶的本金加上策略池的收益。為了計算收益過程中的本金部分,我們對官方給出的交易進行 debug,發現本金僅為 9000 ETH,從 adapter 獲取的收益加上本金共有 13000 ETH,也就是說 9000 ETH 的本金產生了 4300 ETH 的收益。
但是,按照上面分析的邏輯,用戶的本金是不會產生那么大的收益的,問題肯定是出在了 adapter 獲取的 totalValue。也就是說 adapter 不止只有 AlchemistEth 充值代幣,還存在其他的收益渠道。為了驗證我們的想法,慢霧安全團隊分析了 adapter 的所有代幣收入,果然發現了一筆異常的轉入行為,并且金額也能剛好對上多出的 4300 ETH 的收益。也就是說,問題就在這里了。
通過查看交易數據,發現這是一筆調用 harvest 操作的交易,調用的合約是 transmuter 合約:
也就是說,是這個 harvest 函數出問題了,harvest 函數的邏輯如下:
同樣是調用了 vault 的 harvest 函數,熟悉的配方,熟悉的味道。我們再次進行 debug,發現一個驚人的事實 —— 在進行收益的時候,vault 的 totalDeposit 竟然為 0,導致 4300 ETH 的收益直接分發給了 adapter,導致了 adapter 獲取的 totalValue 錯誤了,多了 4300 個 ETH,原因就是在這里。
到了這里,我們已經很接近真相了,剩下要解決的就是為什么 totalDeposit 會為 0?我們查詢了transmuter 合約中能改變 totalDeposit 的地方,發現只有 _plantOrRecallExcessFunds 函數可以改變這個值,而這個函數上層調用的又是 distribute 函數。而 transmuter 合約的 distribute 函數是 AlchemistEth 合約在收益的時候進行調用的。也就是說本身的流程應該是:
1. AlchemistEth 合約調用 harvest 進行收益
2. AlchemistEth 合約調用 transmuter 合約的 distribute 函數記錄收益情況,并把收益部分給 adapter
3. adapter 收到了 transmuter 的收益,根據收益償還用戶的 alETH 的貸款
但是問題就出在了 _plantOrRecallExcessFunds 函數中。由于在記錄充值信息的時候,用的是 _vaults.last() 來獲取最新的 vault,所以其實充值信息疊加在了最后一個元素上。但是項目方調用了三次 setActiveVault 函數,所以其實充值信息是疊加到了 _vaults 數組的 3 號元素,也就是 index 為 2 的 vault 元素上。但是在 transmuter 合約在 harvest 的時候傳入的 _vaultId 卻是 0,0 號元素是沒有任何充值記錄的,所以 transmuter 合約就誤將所有的收益都給了 adapter 了。導致了悲劇的發生。
總結
到這里,整個事情已經變得很清晰了,Alchemix 項目方由于某種原因,通過 transmuter 添加了 3 次 vault,導致收益信息記錄在了一個錯誤的元素上,而在調用 transmuter 的 harvest 函數時也沒有傳入正確的 index 值,導致通過錯誤的元素獲取了錯誤的收益,錯誤收益被發送到 adapter 合約,造成收益增多,導致了悲劇。
慢霧安全團隊在此提醒,DeFi 是一個復雜的系統,在進行 DeFi 操作的時候,要記得檢查好業務邏輯中的每一個流程,防止意外的發生,在必要的時候可以聯系專業的安全團隊進行專業的安全審計,防止事故的發生。
Tags:ETHTERVESESTEtherean SocksInterstellar AIwaves幣長期持有價值嗎HonestCoin
注:本文來自Synthetix創始人Kain Warwick。正如Kain提到,文中的內容均來自社區反饋,最終能否添加到V3中,還需要通過治理這一關.
1900/1/1 0:00:00對信仰者來說,開放的公共區塊鏈為構建數字經濟提供了第二次機會。構建在這些區塊鏈之上的應用相互協作,且它們存儲的信息對所有人都是可見的,這一事實讓人回想起互聯網早期架構師們的理想主義,那時大多數用.
1900/1/1 0:00:00王瑋,區塊鏈資深從業者 我們今天來聊一聊殺豬盤,哦不,龐氏這件事。“龐氏”(ponzi scheme)這件事,現實世界中我們已經見過很多次了.
1900/1/1 0:00:00拍賣是一種流行的方法,它可以以最好的價格出售NFT。有一些拍賣技巧是為了出售我們的NFT收藏品,但荷蘭式拍賣不同于其他技巧,它的使用頻率更高.
1900/1/1 0:00:00SC04 已經謝幕。通常,我們已經準備處理新一輪加速器項目的申請了,但是現在,大家需要先松一口氣。四輪加速器,55個項目,所有這些都在短短16個月內完成。我的天吶.
1900/1/1 0:00:00原文標題:《如何為我的產品構建一個去中心化社區?簡潔指南》(What We Can Learn from Decentralized Community Building) 撰文:Bethany.
1900/1/1 0:00:00