據 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 團隊開發的,可以精簡很多賬號驗證及跨合約調用邏輯。
Alexa Pro項目遭到漏洞攻擊,損失45枚BNB:金色財經消息,據CertiK監測,Alexa Pro項目遭到漏洞攻擊,損失45枚BNB (約1.3萬美元)。目前的證據表明,價格操縱是導致該事件的原因。BSC合約地址: 0x76c82Eef290f8de6E230cbaddf508f16c202b52B[2023/3/5 12:42:57]
Anchor 是如何工作的呢?我們可以從 Jet Protocol 的一段代碼說起:
programs/jet/src/instructions/init_deposit_account.rs
這里的 deposit_account 賬號就是用于存儲 LP 代幣數據的賬號,用戶在首次使用時,需要調用合約生成該賬號,并支付一定的存儲費用。
動態 | 白帽黑客在過去7周通過修復加密貨幣項目漏洞賺取超32150美元:據thenextweb報道,在過去的七周里,白帽黑客通過修復加密貨幣項目和區塊鏈平臺(如TRON、Brave、EOS和Coinbase)的安全漏洞,至少賺取了32150美元。根據Hard Fork的數據,在3月28日至5月16日期間,共15家區塊鏈相關公司向安全研究人員支付了獎金,其中包括共30份公開發布的漏洞報告。[2019/5/20]
而這里的 #[account] 宏定義限定了這個賬號的生成規則:
規則 1:#[account(init, payer = <target_account>, space = <num_bytes>)]這個約束中,init 是指通過跨合約調用系統合約創建賬號并初始化,payer=depositor 意思是 depositor 為新賬號支付存儲空間費用。
規則 2:#[account(seeds = <seeds>, bump)]這個約束中將檢查給定帳戶是否是當前執行程序派生的 PDA,PDA (Program Derived Address) 賬號是一個沒有私鑰、由程序派生的賬號,seed 和 bump 是生成種子,如果 bump 未提供,則 Anchor 框架默認使用 canonical bump,可以理解成自動賦予一個確定性的值。
聲音 | 工商銀行信息科技部副總經理:經過權威機關測試區塊鏈漏洞非常多:據科技日報消息,中國工商銀行信息科技部副總經理陳滿才表示,新業務、新技術本身的引入會帶來風險,比如區塊鏈,經過權威機關測試,其中的漏洞非常多。如果被攻擊者利用,也會造成很大的困擾。[2018/12/11]
使用 PDA,程序可以以編程方式對某些地址進行簽名,而無需私鑰。同時,PDA 確保沒有外部用戶也可以為同一地址生成有效簽名。這些地址是跨程序調用的基礎,它允許 Solana 應用程序相互組合。這里用的是 "deposits" 字符 + reserve 賬號公鑰 + depositor 賬號公鑰作為 seeds,bump 則是在用戶調用時傳入。
規則 3:#[account(token::mint = <target_account>, token::authority = <target_account>)]
動態 | 以太坊代幣的漏洞可能導致交易所錢包被掏空:據cryptoglobe消息,基于以太坊的GasToken上發現了一個漏洞,可能會被具有惡意人利用它來掏空加密貨幣交易所的錢包,甚至制造新的代幣來盈利。該漏洞主要影響那些沒有對提款設置gas使用限制的交易所。[2018/11/23]
這是一個 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
動態 | 受影響交易所均已修復涉及GasToken的漏洞:據coindesk此前消息,網絡安全公司Level K表示由于平臺代碼存在漏洞,攻擊者可能能夠獲取許多交易所的全部ETH持有量。根據Level K的最新公開披露,Level K最近發現了涉及GasToken合同的漏洞,影響了一些未命名的交易所。 根據披露,受影響的各方已于11月13日得到通知,所有受影響的交易所都修復了此漏洞。據悉,GasToken利用以太坊存儲的退款機制,允許用戶在gas價格低時儲存,并在gas價格高時獲得退款。通過在接收ETH時鑄造大量GasToken,可以進行有利可圖的攻擊。[2018/11/22]
正常情況下,用戶調用函數 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 開發者,注意對賬號體系進行嚴密的審查。
原標題:The Latecomer’s Guide to Crypto加密有很多東西,包括糟糕的解釋,我們是來澄清這件事的.
1900/1/1 0:00:00由 Jad Esber、Nir Kabessa 和 David Phelps 構思、概述和編輯,David Phelp撰寫.
1900/1/1 0:00:00Avalanche Summit 3月22日至27日在西拔牙巴塞羅那舉行,在峰會期間的25-27日同時舉行了由Encode Club舉行的黑客馬拉松活動.
1900/1/1 0:00:00當前隨著 BAYC、迪士尼等各種相關的事物持續破圈,互聯網世界、投資圈中最火的概念,恐怕就是 NFT 了.
1900/1/1 0:00:00重要見解: LUNA 在 2022 年前 2.5 個月的價格回報率以 7:1 的比例超過了其他智能合約生態系統代幣的總和.
1900/1/1 0:00:00“平行鏈”模型的創建是基于這樣的信念:Web3的未來將涉及許多不同類型的區塊鏈共同工作。就像當前版本的互聯網迎合了不同的需求一樣,區塊鏈需要能夠提供各種服務。平行鏈解決了這個問題".
1900/1/1 0:00:00