比特幣交易所 比特幣交易所
Ctrl+D 比特幣交易所
ads

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

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

sudoswap發布漏洞事件分析:與0x合約無關,原因在于transferFrom函數漏洞:12月15日消息,NFT交易平臺sudoswap針對昨日的漏洞事件發布故障分析,稱此次漏洞事件與0x合約無關,原因在于EtherOrcNFT合約未完全遵守ERC721標準,在調用transferFrom(addressfrom,addressto,uint256id)函數時,from參數對應地址不會被系統檢查是否擁有指定的NFTid,而該漏洞可被部分機器人程序利用。sudoswap表示,部分用戶嘗試將自己的EtherOrcNFT換成WETH時遭到機器人程序利用函數漏洞領跑,未能及時收到WETH,sudoswap已其進行補償。同時,該事件與0x沒有關聯,昨日對0x合約的停用實屬誤會。

此前報道,北京時間12月14日12:30,NFT交易平臺sudoswap宣布發現漏洞,稱用戶在sudoswap調用0x交易平臺的swap功能時可能出現問題。對此,sudoswap暫時將與0x相關的swap功能停用,并提醒用戶解除對0x平臺的合約授權。[2021/12/15 7:41:14]

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

dYdX出現新部署智能合約漏洞,暫未造成財產損失:金色財經報道,dYdX官方表示,UTC時間11月27日5時21分團隊收到了一個關于新部署的智能合約漏洞的安全問題警告。官方表示,沒有資金損失,所有資金都很安全。dYdX同時提醒,在11月24日后授權平臺存款權限的用戶應立即將資金收回至trade.dydx.exchange上的錢包中。白帽黑客samczsun已經和dYdX團隊合作,挽救了可能受影響的資金。作為白帽回收的一部分,所有受影響的資金,甚至包括那些沒有存入dYdX的資金,都已轉移到托管智能合約中。目前僅能通過用戶的錢包才能收回這些資金(隨時可以收回)。[2021/11/28 12:36:52]

programs/jet/src/instructions/init_deposit_account.rs

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

報告:Compound開放式預言機集成Uniswap V2無嚴重漏洞:據官網消息,網絡安全公司OpenZeppelin已發布Compound的開放式預言機(Open Oracle)集成Uniswap V2的審計報告。報告顯示無嚴重或高危漏洞,但提出了部分的變化。

報告指出,開放式預言機旨在允許受信任的匯報者在鏈上發布一系列資產價格,這些價格將以Uniswap V2的市場價格作為基礎,發布價格的人只能在一定程度上偏離Uniswap V2的價格(具體由部署者決定),這可以很大程度上限制匯報者操縱預言機的權力。[2020/7/20]

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

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

聲音 | 騰訊御見:“Agwl”團伙通過入侵服務器下載釋放“永恒之藍”漏洞攻擊等 進而植入挖礦木馬:據騰訊御見威脅情報中心發文稱,近日,御見威脅情報中心檢測到“Agwl”團伙針對phpStudy網站服務器再度發起攻擊,此次攻擊“升級”后,被入侵服務器會下載釋放“永恒之藍”漏洞攻擊、SQL爆破攻擊。爆破攻擊成功則通過cmd_shell下載植入木馬http[:]//down.us-hack.ru/wk.exe。wk.exe會繼續下載挖礦木馬及遠控木馬,同時下載SQL爆破、“永恒之藍”漏洞利用、Apache Solr漏洞(CVE-2019-0193)利用三種攻擊方式進一步擴散傳播病。此次受“Agwl”團伙攻擊影響超過一萬臺服務器,影響嚴重地區分別北京、廣東和浙江。據悉,2017年5月12日起,全球范圍內爆發基于Windows網絡共享協議進行攻擊傳播的蠕蟲惡意代碼,這是不法分子通過改造之前泄露的NSA黑客武器庫中“永恒之藍”攻擊程序發起的網絡攻擊事件。被襲擊的設備被鎖定,并索要300美元比特幣贖金。[2019/9/26]

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

動態 | SYS網絡或存在漏洞 已建議各交易平臺暫停SYS交易:據SYS官方消息,SYS網絡可能存在漏洞,團隊目前未確定任何漏洞。SYS已經建議各交易平臺在SYS調查期間暫停SYS相關交易。SYS現全球均價為0.2789美元,以47.51%領漲市值前百幣種。[2018/7/4]

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

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

這是一個 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:ACCCCOUNTCOUACCELgiccoinBinaHunterCOURT價格

比特幣交易所
國家工業設計研究院唯一藝術分院揭牌成立_比特幣

3月22日,“國家工業設計研究院唯一藝術分院”揭牌儀式在唯一藝術杭州總部舉行。國家工業設計研究院院長應放天教授、浙江大學國際設計合作學院執行院長姚琤教授、國家工業設計研究院副院長萬然教授、唯一藝.

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

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

1900/1/1 0:00:00
英偉達的春季發布會 讓元宇宙有了希望_RACE

3月22日,玩家和AI從業者們又愛又恨的老黃,帶著他的新“核彈”來了。遺憾的是,這次的新“核彈”與玩家沒有太大關系,主要是針對企業和工業市場,與玩家有關的RTX 40系估計最快也要等到9月份才會.

1900/1/1 0:00:00
STEPN爆火之后 還有哪些值得關注的M2E項目?_NFT

伴隨著全球用戶數及代幣價格的持續暴漲,主打“Move to Earn”(M2E)模式的STEPN成為GameFi賽道中的一匹黑馬,并成為圈內外玩家的“網紅打卡地”.

1900/1/1 0:00:00
金色觀察|以太坊轉PoS后 Gas費能降多少?_區塊鏈

gas費之爭已經上演了很多年了,如今以太坊即將轉為pos鏈,那最大的期待,就是gas費可以降到很低,為什么呢?因為pos的處理效率遠大于pow,并且網絡資源成本也足夠低.

1900/1/1 0:00:00
爐石玩家必看:你應該知道的鏈上卡牌游戲_INT

GameFi 的進入大眾視野得益于 CryptoKitties,曾一度導致 Ethereum 崩潰的游戲.

1900/1/1 0:00:00
ads