買比特幣 買比特幣
Ctrl+D 買比特幣
ads

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

Author:

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

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

相關信息

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

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

EthHub聯創對《以太坊L2是一個偽裝成功能的漏洞》的文章表示質疑:4月21日消息,Blockworks今日發表了一篇題為《以太坊L2是一個偽裝成功能的漏洞》的文章,稱Layer-2技術實際上在做的是為以太坊上的一些特定問題貼上創可貼,但實際上并沒有創建解決以太坊任何實際問題的解決方案。以太坊的問題不在于存在gas費這一事實,而是gas費太高。L2通過為用戶提供一個發送他們的交易的場所然后可以將這些交易的結果廣播到主網,而不是用主網來實現這一點。將L2識別為不充分的權宜之計的觀念轉變可能會鼓勵社區優先尋找和開發長期解決方案以應對以太坊的挑戰,這可能會導致更多創新和可持續技術的出現。對此,EthHub聯合創始人sassal.eth對此評論稱“建議刪除你的推特賬戶”,部分用戶亦對此篇文章表示質疑。[2023/4/21 14:17:59]

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

1inch發起最高達20萬美元的漏洞賞金計劃:據官方推特消息,1inch在Immunefi平臺發起了最高達20萬美元的漏洞賞金計劃。賞金計劃的重點是智能合約和網站,主要目的是解決直接影響資金安全和錯誤價格估計的嚴重安全問題。[2021/5/22 22:31:04]

programs/jet/src/instructions/init_deposit_account.rs

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

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

用戶指控ICON基金會干涉其利用漏洞獲得的ICX代幣所有權:在最近一起新訴訟案中,用戶Mark Shin指控ICON基金會不當干涉其對ICX代幣的所有權和占有權。據悉,ICON于2020年8月22日發布了軟件更新,Shin發現了一個漏洞,并生成大約1400萬枚ICX代幣。隨后ICON基金會公開宣布他是一個“惡意攻擊者”或小偷,并聯系交易所凍結了他的帳戶。Shin稱其并未侵入任何網絡,也沒有修改任何軟件的任何源代碼,也沒有超出ICON網絡為其所有用戶提供的授權,也沒有違反任何適用的規則,因此不屬于美國計算機欺詐和濫用法案的范疇。原告稱,無論軟件更新的目的是什么,其他用戶都采用了并鑄造了另外600萬枚代幣。(The Block)[2020/10/24]

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

動態 | 以太坊dApp開發人員發現會產生大量GasToken的漏洞:據CCN消息,以太坊智能合約和dApp K級別開發人員發現了一個以太坊框架中存在的漏洞。該漏洞可能會導致用戶在接收ETH時鑄造大量GasToken。目前,這一漏洞已被大多數交易所標記并進行了補丁修補。[2018/11/22]

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

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

EOS硅谷創始人喻博:超級節點漏洞短期造成波動 長期利好EOS網絡:金色財經獨家報道,EOS硅谷創始人喻博:在漏洞之下,超級節點可能會被遠程控制,在被控制之后,黑客們將獲得隱私數據,且存在利用潛在超級節點算力挖礦的可能性。但這樣的漏洞事件為我們上了很好的一課:開發者們應該意識到區塊鏈世界中安全的重要性,解決和避免問題的層面并不存在捷徑,增加code review以及測試的環節才是開發者們應該重點關注的。雖然漏洞會在短期內為市場帶來慌亂,但長期而言,還是會利于區塊鏈和EOS網絡發展。[2018/5/29]

規則3:#

這是一個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:HORDEPPOSDEPOTHORChainDEPI

比特幣價格實時行情
ETH:13條你必須關注的未來加密賽道_roll幣可以roll坐騎嗎

本文梳理自加密研究員pastry在個人社交媒體平臺上的觀點,律動BlockBeats對其整理翻譯如下:在加密世界,投資的時機至關重要,盡早進入一個新興行業或許是你獲得成功的最佳機會.

1900/1/1 0:00:00
NFT:盤點國內數字藏品平臺亂象:你中槍了沒?_DEAL

自從3.15之后,數字藏品的平臺雨后春筍般的涌出,目前NFT市場上平臺已經泛濫了,整個藏品市場比3.15之前還要混亂,所以我決定對幾個熱門的平臺做一個點評,夸一下好的平臺,希望玩家們參與發財.

1900/1/1 0:00:00
HOLD:微博接入TopHolder 數字藏品走向社交化?_Morpho Network

火爆的數字藏品,正在“攻入”社交平臺。3月17日,數字藏品資深玩家王子健注意到,大V@天才小熊貓在微博上發布了數字藏品《奔跑》.

1900/1/1 0:00:00
區塊鏈:全球首發碳資產NFT:那NFT本身會產生碳排放嗎?_ETF

據報道,香港上市公司中國碳中和發布公告,2022年3月23日,集團提供核證碳標準下的碳信用作為底層資產,利用區塊鏈技術全球首次發行碳資產NFT,支持機構、企業或個人通過平臺購買碳資產NFT.

1900/1/1 0:00:00
ENS:多鏈發展、功能聚合 NFT交易平臺如何轉型升級?_Oracle Top 5 Tokens Index

NFT交易熱潮從2020年下半年開始,至今仍在延續。去年全年NFT交易量為176.9億美元,今年第一季度NFT交易量已達260億美元,超過去年全年總量.

1900/1/1 0:00:00
ROLL:zkSync2.0兼容EVM 打破ZK Rollup技術瓶頸_ZKS

L2Beat的數據顯示,zkSync網絡鎖倉的加密資產總額已超過1.4億美元,7日內增幅為38%.

1900/1/1 0:00:00
ads