比特幣價格 比特幣價格
Ctrl+D 比特幣價格
ads

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

Author:

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

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

相關信息

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

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

一地址通過adidas NFT智能合約漏洞繞過限購搶到330個NFT,獲利約60萬美元:12月24日消息,據Sprise聯合創始人Montana Wong在推特上透露,雖然阿迪達斯此前設定adidas NFT銷售上限為每人最多2件,但有人利用漏洞繞過此限制在單次交易中購買了330個。

據悉,在銷售活動啟動之前幾個小時部署了一個新智能合約,該智能合約執行后可以生成165 個子智能合約,每個子智能合約能給分別從阿迪達斯的智能合約中鑄造2 個 NFT,然后再將它們轉移到創建者的主ETH 地址上。由于每個子智能合約都有一個唯一地址,因此創建者能夠繞過每人 2 個NFT銷售限制,將 NFT 發送到創建者的主地址后,子智能合約會自動銷毀。這個智能合約的創建者一共支付了 27.3 ETH的 gas 費用來執行相關交易,另外還支付了 66 ETH來購買adidas NFT,理論上目前該智能合約創建者已經獲利約60萬美元。[2021/12/24 8:02:33]

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

Cream 漏洞分析:攻擊者通過數額巨大的cySUSD從IronBank借入WETH等資產:TheBlock研究分析師@Frank Researcher在推特分析了CreamFinance推出的零抵押跨協議貸款Iron Bank被盜約3750美元資產的過程,具體為:1.攻擊者使用Alpha Homora從Iron Bank借入sUSD,每次借入資金都是上次借款的兩倍。2.攻擊者通過兩筆交易來完成任務,每次將資金借給Iron Bank獲得cySUSD。3.在某些時候,攻擊者從Aavev2獲得了180萬美元的USDC閃電貸款,并使用Curve將USDC換成了sUSD。4.攻擊者把sUSD借給Iron Bank,使得他們可以繼續獲得cySUSD。5.一些sUSD用于償還閃電貸款。6.此外,1000萬美元的閃電貸款也被用來增加cySUSD的數量。7.最終,攻擊者獲得了數額巨大的cySUSD,這讓他們可以從Iron Bank借到任何資產。8.隨后攻擊者借到了13.2萬枚WETH、360萬枚USDC、560萬枚USDT、420萬枚DAI。9.穩定幣已轉入Aavev2,隨后向Iron Bank部署者轉入1000ETH、向Homora部署者轉入1000ETH,向Tornado轉入220ETH、向Tornadogrant轉入100ETH,還有大約1.1萬枚ETH在攻擊者錢包地址中。[2021/2/13 19:42:00]

programs/jet/src/instructions/init_deposit_account.rs

FTX聯合創始人:Blockfolio被黑其競爭對手所為 已修復該漏洞:2月9日晚間,針對此前加密資產管理工具Blockfolio被黑一事,FTX聯合創始人SBF發推文稱此事件為其競爭對手所為,但未透露該競爭對手的名字。根據SBF的說法,Blockfolio已完成對此事的調查,該公司已修復了引發該情況的漏洞。FTX首席執行官承諾將圍繞Blockfolio的非交易協議改善安全基礎架構,以防止將來發生類似事件。此前消息,加密貨幣價格追蹤應用Blockfolio被黑客攻擊,用戶手機應用程序收到來自偽裝成項目方發送的轉移資金相關推送信息。據悉,加密交易所FTX已以1.5 億美元價格收購了Blockfolio。[2021/2/10 19:23:28]

動態 | 漏洞預警:數萬Teltonika路由器存在遠程命令執行漏洞:近日,安全研究院監測到網絡上出現了 Teltonika路由器遠程命令執行漏洞。該漏洞是由于RUT9XX路由器設備中某些文件存在接受外部輸入的參數,而且這些參數在接收用戶輸入后,并沒有檢查其中是否有敏感字符,而是直接帶入命令執行函數。攻擊者只需要往存在漏洞的頁面直接提交含有引號、分號等敏感字符的數據,就可以使程序執行攻擊者的命令,使這些路由設備變成肉雞,成為僵尸網絡中的一員,亦或者是擠占設備 CPU進行挖礦,造成大量經濟損失。目前尚未確認在中國的 Teltonkia設備。[2018/10/18]

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

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

突發 | OKEx已進行技術排查 不存在USDT\"假充值漏洞\": OKEx針對USDT“假充值”漏洞的安全排查發布公告稱,針對知名安全審計機構慢霧科技發現的USDT“假充值”漏洞,OKEX已第一時間跟慢霧科技了解漏洞情況并進行了技術排查,OKEx并不存在此漏洞,用戶資產安全不會受到任何影響。[2018/6/28]

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

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

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

規則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:USDPOSPOSIHORcusd幣多少錢一個pos幣也會集中POSI幣3X Short Ethereum Classic Token

狗狗幣價格
NFT:多圖預警:忌跟風mint 三分之一的NFT都會爛在手里_int幣價格

原文:Nansen 作者:DarrenLim,JavierGonzalez,LouisaChoeNFTMinter的行為可以被視作短期市場走勢的信號.

1900/1/1 0:00:00
NFT:NFT、Web3和元宇宙正在改變科學家進行研究的方式_區塊鏈

?科學家可以利用區塊鏈工具,如智能合約和代幣,以改善不同利益相關者之間的科學合作。這種所謂的去中心化科學運動,簡稱DeSci,結合了區塊鏈和Web3技術來改進科學研究.

1900/1/1 0:00:00
加密貨幣:晚間必讀5篇:Yuga Labs發文親述:BAYC起源及40億美元估值里程_區塊鏈dapp開發一個多少錢

1.金色觀察丨YugaLabs發文親述:BAYC起源及40億美元估值里程YugaLabs于2021年4月推出BoredApeYachtClub,不到一年時間起估值達到40億美元.

1900/1/1 0:00:00
THE:金色觀察|扒一扒BAYC融資4.5億美元啟動的元宇宙項目Otherside_ALAB幣

YugaLabs今日宣布以40億美元估值完成新一輪4.5億美元融資。本輪融資由a16z領投,參投的機構中除了加密貨幣市場常見的AnimocaBrands、FTXVentures、Coinbase.

1900/1/1 0:00:00
比特幣:出資500萬美元“綠化”比特幣 Ripple聯合創始人為何激起社區抗議?_PLENTYCOIN

周二,Ripple的聯合創始人ChrisLarsen發起了一場改變比特幣代碼的運動,呼吁減少比特幣對環境的影響,這在加密界引起了極大爭議.

1900/1/1 0:00:00
加密貨幣:美財長耶倫態度軟化?稱加密貨幣創新「可能有好處」_sec幣圈

美國財政部長珍妮特?耶倫從來都不是加密貨幣的支持者。在擔任美聯儲主席后,她曾在2018年說過一句話:自己“不喜歡”比特幣,原因是該網絡上的交易缺乏,而且據稱非法交易過多.

1900/1/1 0:00:00
ads