以太坊價格 以太坊價格
Ctrl+D 以太坊價格
ads
首頁 > XMR > Info

CCO:漏洞隨筆:通過Jet Protocol任意提款漏洞淺談PDA與Anchor賬號驗證

Author:

Time:1900/1/1 0:00:00

據 Jet Protocol 官方博客披露,他們近期修復了一個賞金漏洞,這個漏洞會導致惡意用戶可以提取任意用戶的存款資金,慢霧安全團隊對此漏洞進行了簡要分析,并將分析結果分享如下。

(來源:https://www.jetprotocol.io/posts/jet-bug-disclosure)

相關信息

Jet Protocol 是運行在 Solana 上的一個借貸市場,用戶可將賬號里的代幣(如:USDC、SOL)存入金庫,賺取年化收益,同時也可以按一定的比例借出另一種代幣。在這個過程中合約會給用戶一個 note 憑證,作為用戶未來的提款憑證,用我們熟悉的字眼來說就是 LP,而本次漏洞發生的原因也和這個 LP 的設計有關。

我們知道和以太坊合約相比,Solana 合約沒有狀態的概念,取而代之的是賬號機制,合約數據都存儲在相關聯的賬號中,這種機制極大提升了 Solana 的區塊鏈性能,但也給合約編寫帶來了一些困難,最大的困難就是需要對輸入的賬號進行全面的驗證。Jet Protocol 在開發時使用了 Anchor 框架進行開發,Anchor 是由 Solana 上的知名項目 Serum 團隊開發的,可以精簡很多賬號驗證及跨合約調用邏輯。

ApeCoin DAO投票通過質押系統相關漏洞賞金計劃及特別委員會成員提名和選舉程序:11月3日消息,ApeCoin在推特上宣布,ApeCoin DAO已投票通過了為APE質押系統智能合約設立漏洞賞金計劃的提案AIP-134。這意味著APE質押系統的上線日期將被推遲至漏洞賞金計劃結束后。該提案作者表示漏洞賞金計劃將持續約3周時間,因此質押系統可能會在11月24日上線,質押獎勵分配將于12月7日開始。

此外,ApeCoin DAO關于“特別委員會成員提名程序”AIP-137和“特別委員會成員選舉程序”AIP-138的提案投票已獲通過,ApeCoin基金會將于明天發布提名公告。[2022/11/3 12:13:17]

Anchor 是如何工作的呢?我們可以從 Jet Protocol 的一段代碼說起:

programs/jet/src/instructions/init_deposit_account.rs

88mph回應代幣鑄造漏洞:資金已轉入治理錢包 決定將其分配給MPH和ETH 持有者:DeFi固定利率生成協議88mph (MPH)針對攻擊者利用漏洞鑄造10萬美元MPH代幣一事在Discord回應稱,由于攻擊者在今天早些時候把10萬美元資金放在了LP池(流動性資金池)中,現在這些資金都放在了治理錢包中。已經決定將這些資金分配給包括MPH和ETH在內的代幣持有人。具體細節將很快公布。[2020/11/18 21:12:01]

這里的 deposit_account 賬號就是用于存儲 LP 代幣數據的賬號,用戶在首次使用時,需要調用合約生成該賬號,并支付一定的存儲費用。

而這里的 #[account] 宏定義限定了這個賬號的生成規則:

規則 1:#[account(init, payer = <target_account>, space = <num_bytes>)]這個約束中,init 是指通過跨合約調用系統合約創建賬號并初始化,payer=depositor 意思是 depositor 為新賬號支付存儲空間費用。

Trezor錢包制造商:最新升級版本已解決錢包漏洞問題:8月3日消息,瑞士硬件錢包提供商Shift Crypto表示,Trezor和KeepKey硬件錢包中存在一個漏洞,可能會引發潛在的贖金攻擊。Trezor硬件錢包的制造商SatoshiLabs為轉移加密支付了高額費用,并表示在最近發布的升級中已經解決了這個問題。(CryptoNews)[2020/9/3]

規則 2:#[account(seeds = <seeds>, bump)]這個約束中將檢查給定帳戶是否是當前執行程序派生的 PDA,PDA (Program Derived Address) 賬號是一個沒有私鑰、由程序派生的賬號,seed 和 bump 是生成種子,如果 bump 未提供,則 Anchor 框架默認使用 canonical bump,可以理解成自動賦予一個確定性的值。

使用 PDA,程序可以以編程方式對某些地址進行簽名,而無需私鑰。同時,PDA 確保沒有外部用戶也可以為同一地址生成有效簽名。這些地址是跨程序調用的基礎,它允許 Solana 應用程序相互組合。這里用的是 "deposits" 字符 + reserve 賬號公鑰 + depositor 賬號公鑰作為 seeds,bump 則是在用戶調用時傳入。

Trail of Bits計劃利用零知識證明重塑漏洞披露流程:安全研究機構Trail of Bits宣布,正在與約翰霍普金斯大學的Matthew Green合作,使用零知識證明(zero-knowledge proofs)技術為科技公司和安全漏洞研究人員建立一種可信的基礎設施,在新的合作方式之下,雙方在針對漏洞披露(Vulnerability Disclosure)的流程中可進行合理的溝通,而不必擔心受到破壞或歧視。

在接下來的四年里,Trail of Bits 將會進一步推進零知識證明的理論極限,并為安全漏洞研究人員提供相應的軟件,用以產生漏洞可利用性的零知識證明。[2020/5/22]

規則 3:#[account(token::mint = <target_account>, token::authority = <target_account>)]

這是一個 SPL 約束,用于更簡便地驗證 SPL 賬號。這里指定 deposit_account 賬號是一個 token 賬號,它的 mint 權限是 deposit_note_mint 賬號,authority 權限是 market_authority。

動態 | Dash發布了針對新暴露的漏洞的升級:Dash已經發布了Dash Core v0.14.0.3,這是一個新的錢包和P2P客戶端版本,用于其加密貨幣Dash。Dash Core于8月15日在官方博客上宣布了這一消息。根據聲明,本周三和周四,Dash要么受到外部壓力測試的打擊,要么受到攻擊。該帖子說,“強烈建議所有主節點升級,也建議所有用戶、交易所、合作伙伴和所有節點運營商升級。(cointelegraph)[2019/8/16]

Account 的宏定義還有很多,這里略表不提,詳細可以考慮文檔:https://docs.rs/anchor-lang/latest/anchor_lang/derive.Accounts.html

有了這些前置知識,我們就可以直接來看漏洞代碼:

programs/jet/src/instructions/withdraw_tokens.rs

正常情況下,用戶調用函數 withdraw_tokens 提幣時,會傳入自己的 LP 賬號,然后合約會銷毀他的 LP 并返還相應數量的代幣。但這里我們可以看到 deposit_note_account 賬號是沒有進行任何約束的,用戶可以隨意傳入其他用戶的 LP 賬號。難道使用別人的 LP 賬號不需要他們的簽名授權嗎?

通過前面分析宏定義代碼,我們已經知道了 market_authority 賬號擁有 LP 代幣的操作權限,確實不需要用戶自己的簽名。那么 market_authority 又是一個怎么樣的賬號呢?我們可以看這里:

programs/jet/src/instructions/init_market.rs

這個 market_authority 也是一個 PDA 賬號。也就是說合約通過自身的調用就可以銷毀用戶的 LP 代幣。那么對于惡意用戶來說,要發起攻擊就很簡單了,只要簡單地把 deposit_note_account 賬號設置為想要竊取的目標賬號,withdraw_account 賬號設置為自己的收款賬號,就可以銷毀他的 LP,并把他的存款本金提現到自己的賬號上。

最后我們看一下官方的修復方法:

補丁中并未直接去約束 deposit_note_account 賬號,而是去除了 burn 操作的 PDA 簽名,并將 authority 權限改成了 depositor,這樣的話用戶將無法直接調用這里的函數進行提現,而是要通過另一個函數 withdraw() 去間接調用,而在 withdraw() 函數中賬號宏定義已經進行了嚴密的校驗,惡意用戶如果傳入的是他人的 LP 賬號,將無法通過宏規則的驗證,將無法通過宏規則的驗證,因為 depositor 需要滿足 signer 簽名校驗,無法偽造成他人的賬號。

programs/jet/src/instructions/withdraw.rs

總結

本次漏洞的發現過程比較有戲劇性,漏洞的發現人 @charlieyouai 在他的個人推特上分享了漏洞發現的心路歷程,當時他發現 burn 的權限是 market_authority,用戶無法進行簽名,認為這是一個 bug,會導致調用失敗且用戶無法提款,于是給官方提交了一個賞金漏洞,然后就去吃飯睡覺打豆豆了。

而后官方開發者意識到了問題的嚴重性,嚴格地說,他們知道這段代碼沒有無法提現的漏洞,而是人人都可以提現啊,老鐵,一個能良好運行的 bug 你知道意味著什么嗎?!所幸的是沒有攻擊事件發生。

目前在 Solana 上發生過多起黑客攻擊事件均與賬號校驗問題有關,慢霧安全團隊提醒廣大 Solana 開發者,注意對賬號體系進行嚴密的審查。

Tags:ACCCOUCCOUNTACCECOU價格CcoreMHUNT價格

XMR
元宇宙:肉體死亡后 在元宇宙中繼續存活是什么體驗?

筆者一直對某位(高)老師的名言記憶猶新:長生不老和不勞而獲是人類最本質的兩個追求。不勞而獲某種程度上還可以靠運氣和投胎技術,但長生不老卻是一道豎在全地球物種面前的高墻,截至2022年,還沒有任何.

1900/1/1 0:00:00
NFT:普華永道:揭秘元宇宙 企業領導者需知需行

普華永道中東提出阿聯酋數字資產監管的三階段促進模式:8月14日消息,普華永道(PwC)中東分部近日發布報告《阿聯酋虛擬資產市場》,就阿拉伯聯合酋長國如何成為增長最快的數字資產市場之一提供其見解.

1900/1/1 0:00:00
區塊鏈:元宇宙系列(三):合規層面 元宇宙銀行是“藍圖”還是“泡沫”?

摘要:元宇宙是以數據和算力為依托,融合顯示技術、區塊鏈技術和人工智能技術于一體的,擁有獨立社交環境、全真體感和獨立經濟體系的相對獨立于現實世界的虛擬世界.

1900/1/1 0:00:00
LABS:元宇宙的盡頭:猿宇宙

無數的團隊、公司都押注了元宇宙領域,包括臉書(已改名Meta),而元宇宙也不是什么新鮮的概念,人們已經對這種沉浸式虛擬世界憧憬已久.

1900/1/1 0:00:00
數字人:虛擬數字人的長短期展望:IP與賦能

虛擬數字人的三種建模成本、技術路徑的差異。目前虛擬數字人的建模生成主要有三種,按照人工參與程度的高低,依次為純人工建模、借助采集設備進行建模、以人工智能進行建模;同時涉及到相關的軟硬件,包括建模.

1900/1/1 0:00:00
元宇宙:NFT才是元宇宙的中心 帶來文化產業兩大新變革

在元宇宙生態里,NFT比虛擬人重要得多。NFT才是元宇宙的中心。說是宇宙中心,因為我曾經在號稱宇宙中心的北京五道口附近住過幾年——五道口是一個頂級學府(清華、北大)和工人俱樂部共存、鐵路從馬路中.

1900/1/1 0:00:00
ads