買以太坊 買以太坊
Ctrl+D 買以太坊
ads
首頁 > Uniswap > Info

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

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 團隊開發的,可以精簡很多賬號驗證及跨合約調用邏輯。

安全團隊:趙長鵬可能誤報Uniswap協議漏洞:金色財經報道,據PeckShield官方社交媒體稱,根據該公司初步調查顯示,趙長鵬可能誤報Uniswap協議漏洞,相關交易是Uniswap收取費用和提取260876和264378頭寸流動性的正常操作。[2022/7/12 2:07:04]

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

programs/jet/src/instructions/init_deposit_account.rs

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

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

Rari Capital:Fuse池所有可借用資產都可能被盜,目前漏洞已修復:4月4日消息,DeFi借貸協議Rari Capital核心貢獻者@Jack Longarzo近日披露一起安全漏洞事件,此前在3月3日下午4:30左右,包括@samczsun、@hritzdorf等安全研究人員發現了一個跨多個Fuse池的漏洞,池0至32(池6除外)處于危險之中,管理員多簽錢包立即暫停了所有Fuse池的借貸。

據介紹,該漏洞存在于舊版本的cToken和comptroller實施中,它允許在cEther贖回時進行跨資產重入,其中脆弱池中的所有資產都可以免費借入。這是因為在ETH轉移之前,cEther狀態尚未完全更新為贖回的影響。結果,所有可借用資產都可能從這些池中被盜。對此,該項目表示每個Fuseatrisk池都很快升級到最新的cToken和Comptroller實施,從而防止此或類似的重入漏洞被利用。所有池都經過重新測試,以確認漏洞已得到修復,并在第二天早上重新啟用借貸。(Medium)[2022/4/4 14:03:14]

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

BiKi平臺入駐慢霧區 發布“安全漏洞與威脅情報賞金計劃”:為了進一步保障用戶資產安全,提高平臺安全風控等級,BiKi平臺入駐慢霧區,發布“安全漏洞與威脅情報賞金計劃”,嚴重漏洞最高獎勵$10,000等值BIKI。

BiKi是一家數字資產交易服務和區塊鏈技術提供商,旗下包括幣幣、合約、網格、杠桿、余幣寶、抵押借貸、ETF、流動性挖礦等業務。致力于為用戶提供安全、穩定、高效的服務。

慢霧科技是一家專注區塊鏈生態安全的國家高新技術企業,提供“威脅發現到威脅防御一體化因地制宜的安全解決方案”,包括:安全審計、威脅情報(BTI)、漏洞賞金、防御部署、安全顧問等服務并配套有加密貨幣反洗錢(AML)、假充值漏洞掃描等SAAS型安全產品。[2021/1/18 16:26:21]

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

聲音 | 美國財政部:數字資產未能有效監管是金融體系中的重大漏洞:美國財政部在一份新報告中說,缺乏披露公司實益所有權信息的要求是美國金融體系中的最嚴重漏洞之一。此外,數字資產的濫用日益嚴重,以及外國司法管轄區未能有效監管數字資產活動,構成了另一個漏洞。[2020/2/7]

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

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

分析 | EOS Cafe Block 發文提醒開發者避免合約漏洞:據 IMEOS 報道,EOS Cafe Block 在 Medium 發文《Contract Vulnerability Patch》(《合約漏洞補丁》),稱他們在使用 EOS 合約時發現了一個漏洞,以此提醒 EOS 開發者應該明確檢查notification中的所有參數,僅僅確認合約名稱和操作名稱是不夠的。

文中說道,任何依賴 eosio.token 轉賬notification的合約都應立即添加此檢查:if(transfer.to!= _self)return;如果開發者正在重復使用轉帳操作,請使用:if(transfer.to!= _self && transfer.from!= _self)return;要復制的代碼將在以后發布,以維護未修補的 dApp 的安全性。

最終文末特別感謝了來自LibertyBlock的Kedar和來自 shEOS 的 Ben 測試漏洞。[2018/10/15]

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

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:CCOCOUACCUNTCCOM價格COURT幣PayacceptBlockchain Monster Hunt

Uniswap
比特幣:聊一聊以太坊合并測試暴露出來的一些問題_BASE

上周我們發生了一個小事故,在大約一個小時的時間里,信標鏈的參與度下降了8%左右,事件發生后,我們在Discord頻道展開了大量討論,開發者們查看了是誰丟失了區塊proposal,很快.

1900/1/1 0:00:00
WEB:2022年預測:零知識證明(ZKP)成為 Web3 的關鍵_NFT

去年,零知識證明(ZKP)在加密領域和Web3中扮演了重要角色,它在可擴展性和用戶許可隱私方面都發揮著重要作用.

1900/1/1 0:00:00
COM:晚間必讀5篇 | 被 Y Combinator 最新選中的25家加密初創公司_maker幣行情

1.V神:以太坊沒有走的路3月29日,Vitalik Buterin發表文章《The roads not taken》,著眼于以太坊發展路上的各種猜想與落實路徑.

1900/1/1 0:00:00
HTT:一文讀懂IPFS:新一代互聯網底層協議_DAGA

為去中心化互聯網(web3.0)提供動力。一種點對點超媒體協議,通過使網絡可升級、彈性和更開放的方式保存與發展人類的知識。IPFS 是一個分布式系統,用于存儲和訪問文件、網站、應用程序和數據.

1900/1/1 0:00:00
區塊鏈:金色觀察|NFT Mint的早期決策數據分析_DSETH價格

文章作者為Daren Matsuoka,是 a16z 加密投資團隊的合伙人。NFT為創作者提供了一種在線謀生的新方式.

1900/1/1 0:00:00
GAM:GameFi賽道五大熱門鏈游分析:誰會是下一個 Axie?_HEL RUNE - Rune.Game

Axie Infinity 是一款玩家通過讓三個 NFT 可收藏生物相互對抗來進行決斗的在線游戲。每個 Axie 都是獨一無二的,并且作為 NFT 存在.

1900/1/1 0:00:00
ads