買比特幣 買比特幣
Ctrl+D 買比特幣
ads
首頁 > ADA > Info

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

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

金色晨訊 | 以太坊君士坦丁堡升級因“可重入”漏洞延期 51%雙花攻擊所得的ETC已歸還完畢:1.南非或將開始跟蹤加密貨幣交易。

2.以太坊君士坦丁堡升級因“可重入”漏洞延期。

3.美國立法者提出新法案 為部分加密初創公司提供“安全港”。

4.2018年中國區塊鏈專利申請量領跑全球 達到2913件。

5.保加利亞政府對加密貨幣交易利潤征收10%的稅款。

6.IBM使用區塊鏈平臺跟蹤金屬行業的供應鏈。

7.印度政府將于1月17日批準創業激勵計劃并與區塊鏈基金會合作。

8.慢霧: 51%雙花攻擊所得的所有ETC已歸還完畢。

9.Ripple:僅2015年8月之前的私鑰易受攻擊。[2019/1/17]

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

programs/jet/src/instructions/init_deposit_account.rs

動態 | FATF:緊急解決虛擬貨幣的洗錢和恐怖融資漏洞問題:6.27-29在巴黎舉行的會議上,反洗錢金融行動特別工作組(FATF)代表們討論了FATF的綜合工作計劃,緊急解決虛擬貨幣的洗錢和恐怖融資漏洞問題。FATF將繼續積極監測并了解犯罪分子如何利用虛擬貨幣洗錢,以及轉移資金支持恐怖活動。 FATF同意啟動一項關于虛擬貨幣相關調查實踐項目,以便在日益增長的風險下能協助執法。FATF已開始審查指導標準,確定是否有必要進行修改,以確認適用虛擬貨幣,同時考慮到FATF對不同國家的監管辦法會有不同結果,將促進更一致的監管方法。FATF將于九月舉行閉門會議,討論FATF標準如何適用于虛擬貨幣。[2018/7/2]

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

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

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

EOS眾多社區成員對投票受阻表達看法 或因上線前被發現漏洞:據Coindesk消息,針對主網投票難以達到15%的現狀,EOS SW/Eden成員Vahid Toosi稱,大莊家正在場外守候觀望,他們想看看別的莊家如何投票,以隨時改變自己的決定。缺乏專業投資者參投讓很多投資者選擇觀望。

EOS Cafe Calgary的Syed Jafri稱,大多數人都在等待審查確認安全。

Multicoin Capital的Samani稱,他們有的一項策略是讓投資者把私鑰存儲在冷錢包中。現在唯一能支持投票的是熱錢包,直到冷錢包能投票,我們才會參與投票,他確信很多持幣大戶也是這么想的。而Jari并不認為事關冷熱錢包,而是因為上線前爆出了幾個“史詩級”漏洞,用戶想確認鏈是安全的,建立信任也是緩慢的。[2018/6/12]

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

EOSIO Dawn 4.2 版本發布,重點還是漏洞修復和穩定性提升:據金色財經合作媒體IMEOS報道,EOSIO Dawn 4.2版本在Github發布,本次版本的更新旨在對漏洞進行修復和穩定性的提升。更新內容主要有:eosio.system合約賬戶分離;chain插件配置更新;producer插件增加管理rpc接口;不再默認生成genesis.json;BIOS BOOT過程文檔更新。更多關于最新版本Dawn的消息,IMEOS將全力跟進。[2018/5/26]

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

網傳神秘開發者直播挑戰幣安安全漏洞:網傳神秘開發者將于3月20日全程直播正面挑戰幣安安全漏洞,該神秘開發者的微博賬號為“程序員的快樂”,目前幣安對此事暫無回應。[2018/3/18]

規則 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:COUCCOACCUNTCOU幣SUCCORACCELUNT Chain

ADA
以太坊:Bankless:4個角度告訴你 為什么PoS優于PoW_以太坊最新價格行情平臺

今年晚些時候,工作量證明(PoW)以太坊區塊鏈將與現有的權益證明(PoS)信標鏈(Beacon)「合并」.

1900/1/1 0:00:00
DATA:金色觀察 | 50家世界頂級數據初創公司一覽_DATA價格

在“大數據”概念誕生十多年后,數據仍然是大型企業和初創企業中最重要、增長最迅猛的創新驅動因素之一.

1900/1/1 0:00:00
UNI:大規模協作的元宇宙(一)_元宇宙app官方版下載網易云

我憧憬中的元宇宙是完全可以匹敵現實世界,與現實世界平行的一個虛擬世界。所謂的匹敵現實世界意味著我們有可能除了在現實生活中剛需的吃喝拉撒睡以外,其它的一切活動都完全在這個虛擬世界中,甚至有可能我們.

1900/1/1 0:00:00
DAO:快速進階NFT話術手冊_區塊鏈

世界都在為加密而沸騰, DeFi熱潮退去后,更多的關注使NFT市場逐步走向成熟,作為一名nerds或者未來可能成為一名NFT愛好者的你,隨著NFT項目的普及,是不是越是深入接觸了解.

1900/1/1 0:00:00
GEN:空手套利1.13億美金 這個閃電貸策略讓穩定幣變成“狂野西部”_穩定幣

5大要點: MIM-UST 套利策略已在過去四個月中產生超過 1.13 億美元的利潤。本質上是一種無需資本投資的閃電貸的高級形式,僅支付gas費用就可以獲得 650 倍的回報,并且無需像三明治套.

1900/1/1 0:00:00
OPTI:NFT如何更好地進行價值捕獲_OptionRoom Governance Token

NFT原發于金融領域,在加密貨幣早期,FT的金融屬性帶來來圈內最早一波的非原教旨群體(加密朋克)。然而很長一段時間,其他領域的從業者都只是一只腳跨進來的姿勢,猶豫不決.

1900/1/1 0:00:00
ads