以太坊價格 以太坊價格
Ctrl+D 以太坊價格
ads

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

Author:

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

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

相關信息

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

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

EOS Network基金會CEO:Multichain橋的漏洞并不影響EOS用戶:金色財經報道,EOS Network基金會首席執行官Yves La Rose發推稱,我們的團隊正在密切關注Multichain橋的漏洞。截至目前,這個漏洞并不影響EOS用戶,用戶資金是安全的。然而,為了謹慎起見,如果使用了Multichain的EOS EVM橋,為了安全起見,請撤消權限。[2023/7/7 22:23:02]

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

programs/jet/src/instructions/init_deposit_account.rs

Chrome瀏覽器已修復可盜取比特幣私鑰等信息的漏洞:4月17日消息,Chrome瀏覽器緊急修復了一個已經發現有在野利用的安全漏洞(CVE編號:CVE-2023-2033),利用該漏洞,受害者只要瀏覽了攻擊者精心構造的惡意頁面,攻擊者即可在受影響的設備上執行任意代碼,所造成的危害包括但不限于盜取比特幣私鑰、盜取通訊錄、相冊等敏感文件等,建議立即升級以避免被攻擊。

如果使用的是諸如Microsoft Edge、獵豹瀏覽器、360安全瀏覽器等等使用了Chrome內核的瀏覽器的話,也需要升級至帶有最新版本。(SecurityOnline)[2023/4/17 14:07:43]

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

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

安全公司:AurumNodePool合約遭受漏洞攻擊簡析:金色財經報道,據區塊鏈安全審計公司Beosin EagleEye監測顯示,2022年11月23日,AurumNodePool合約遭受漏洞攻擊。

Beosin分析發現由于漏洞合約的changeRewardPerNode函數未進行驗證,導致攻擊者可以調用該函數進行任意值設置。

攻擊者首先調用changeRewardPerNode函數將每日獎勵值設置成一個極大數,接下來調用claimNodeReward函數提取節點獎勵,而節點獎勵的計算取決于攻擊者設置的rewardPerDay值,導致計算的節點獎勵非常高。而在這一筆交易之前,攻擊者便通過一筆交易(0xb3bc6ca257387eae1cea3b997eb489c1a9c208d09ec4d117198029277468e25d)向合約存入了1000AUR,創建了攻擊者的節點記錄,從而使得攻擊者能夠提取出該節點獎勵。最終攻擊者通過該漏洞獲得約50個BNB($14,538.04)。[2022/11/23 8:01:04]

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

Alpha Finance Lab 向 Immunefi 的白帽黑客支付漏洞賞金:3月23日消息,跨鏈 DeFi 平臺 Alpha Finance Lab 向 Web3 漏洞賞金平臺 Immunefi 的白帽黑客支付 3500 ALPHA 賞金,獎勵其報告的 Homera V2 前端上的一個錯誤,目前該漏洞已被修復,不會直接影響資金安全。[2022/3/23 14:13:37]

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

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

動態 | 莫斯科區塊鏈投票系統在使用被發現存在嚴重漏洞:據Cnbeta消息,法國安全研究人員Pierrick Gaudry發現(PDF)計劃在下個月使用的莫斯科區塊鏈投票系統存在嚴重漏洞,能根據公鑰計算出私鑰。該私鑰和公鑰被用于在選舉中的加密用戶投票。莫斯科信息技術部門承諾將解決該問題,該部門發言人承認 256x3的私鑰長度不夠安全,他們計劃將密鑰長度改為1024位。但1024位顯然還是太弱,Gaudry認為密鑰長度至少應該2048 位。[2019/8/22]

規則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:DEPDEPOPOSHORDEP價格PostCoinTHOR幣

火必下載
數字貨幣:經濟日報:數字藏品亟待完善監管

近幾年,被稱為“NFT”的數字藏品火遍全球。從實踐看,如果把數字藏品僅當作線上交易的文創商品,由市場監管部門和知識產權部門監管,那是不夠的.

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

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

1900/1/1 0:00:00
TPS:金色觀察 | Jump Crypto:一個分析1層公鏈的框架

2022年3月30日,JumpCrypto副總裁RahulMaganti發文總結了一個簡潔但功能強大的,分析L1公鏈的框架.

1900/1/1 0:00:00
加密貨幣:金色早報 | 環球音樂集團為其BAYC #5537申請4個商標

頭條 ▌環球音樂集團為其BAYC#5537申請4個商標?????4月5日消息,環球音樂集團已提交四項與其此前購買的BAYC#5537有關的商標注冊申請.

1900/1/1 0:00:00
NOW:Web 3.0的未來之路

“因為稀有才是珍貴的,而水是最便宜的,但最好的。”——柏拉圖,《歐西德摩斯》30多年前,第一個網頁是在歐洲核子研究中心所創建的,由TimBerners-Lee爵士和其他科學家想象構建.

1900/1/1 0:00:00
WEB:金融科技的多樣性:10位年輕女性如何在Web3中逆襲

本文由”老雅痞laoyapicom“授權轉載目前,與許多其他行業一樣,加密貨幣世界由男性主導,對女性創始人的投資仍然很少.

1900/1/1 0:00:00
ads