CPI中的風險: CPI Guard 與 Arbitrary CPI

閱讀時間約 5 分鐘

CPI 全名叫做 Cross Program Invocation,它可以讓Solana的program直接呼叫另一個Program中的instruction,這個功能可以讓程式有更高的可組合性。可以把CPI想像成一個API在被呼叫的時候又去呼叫另外一個API。

圖示如下:

CPI Guard

在Token 2022中新增了一個extension叫做 CPI Guard,它的作用是預防某些濫用CPI的行為。聽起來有點抽象,那麼實際上是在預防什麼呢?


基本上當user使用dapp時有三種方法轉移user資產到dapp端:

  1. 在transaction中加入transfer instruction
  2. 在transaction中加入一個 approve instruction,隨後使用Program的授權進行CPI transfer
  3. 在transaction中加入一個不透明指令,在使用者授權之下進行CPI transfer

前兩種方式是安全的,user都會知道program想對他做什麼。

第一種相當於直接跟使用者說:“商品 10 元請付錢”; 第二種相當於我們去餐廳結帳時將信用卡給服務生,他們只能刷我們餐費的金額; 第三種方式是問題的所在,因為Program(dapp) 後面的CPI call是不透明的,使用者如果又對program進行授權,program將可以對user的token進行任意操作,相當於你將信用卡交給路人。

CPI Guard禁止了一系列跨program間instruction的呼叫來避免這類濫用發生。

Arbitrary CPI

雖與CPI Guard不同,但提到CPI濫用攻擊時這也是重要的一個安全性議題,在此一起討論。

可先參考這一篇了解Solana Account Model: SPL Token & Token Ext - Part 1: 簡介Account Model

在進行CPI呼叫的時候通常會傳入一個Program ID來代表目標地址,但我們無法確保這個地址的Program真的是我們想要使用的Program。這個呼叫可能被攻擊者導向其他惡意程式,產生未預期的執行結果。

以這個範例來說:

#[program]
pub mod arbitrary_cpi_insecure {
use super::*;

pub fn cpi(ctx: Context<Cpi>, amount: u64) -> ProgramResult {
solana_program::program::invoke(
&spl_token::instruction::transfer(
ctx.accounts.token_program.key,
ctx.accounts.source.key,
ctx.accounts.destination.key,
ctx.accounts.authority.key,
&[],
amount,
)?,
...
)
}
}
#[derive(Accounts)]
pub struct Cpi<'info> {
source: AccountInfo<'info>,
destination: AccountInfo<'info>,
authority: AccountInfo<'info>,
token_program: AccountInfo<'info>,
}

這個program的第六、七行用cpi呼叫了token program裡面的 transfer instruction

// transfer instruction​
pub fn transfer(
token_program_id: &Pubkey,
source_pubkey: &Pubkey,
destination_pubkey: &Pubkey,
authority_pubkey: &Pubkey,
signer_pubkeys: &[&Pubkey],
amount: u64,
)

但是我們無法保證第24行token_program的Account在傳入時真的是SPL Token的帳戶地址​。避免利用這個漏洞的攻擊發生開發者應該加一段針對地址正確性的檢查動作。

讀者可以在這一個commit中看到commiter新增了spl-token program id 檢查 -- 一個check_program_account() 函式來確保Program ID真的代表使用者預期呼叫的Program。


文中有任何的錯誤或想法歡迎在下方討論!

Reference

3會員
7內容數
留言0
查看全部
發表第一個留言支持創作者!
ppe ha的沙龍 的其他內容
上一篇提到要在Solana上鑄造新的token需要使用到token program,功能較為陽春。隨著各種新需求的增加同時兼顧安全性的目的,一個新的token program - token 2022 (另名token extension)被開發出來,發佈在一個新的地址上。 Token 2022在
SPL 是 Solana Program Library的簡稱,是一個用來在Solana上創造fungible/non-fungible token的工具,內含多個Program Account。 有別於以往在Ethereum上,每當想創造新的token就需要寫一個智能合約,SPL有點像是API的
簡介如何使用Solana Pay API整合商店頁面進行支付
Solana Pay是基於Solana區塊鏈開發的支付協議,允許使用加密貨幣進行支付。文章介紹了Solana Pay的優勢和功能,下一篇文章將簡單介紹其API的機制與實作。
上一篇提到要在Solana上鑄造新的token需要使用到token program,功能較為陽春。隨著各種新需求的增加同時兼顧安全性的目的,一個新的token program - token 2022 (另名token extension)被開發出來,發佈在一個新的地址上。 Token 2022在
SPL 是 Solana Program Library的簡稱,是一個用來在Solana上創造fungible/non-fungible token的工具,內含多個Program Account。 有別於以往在Ethereum上,每當想創造新的token就需要寫一個智能合約,SPL有點像是API的
簡介如何使用Solana Pay API整合商店頁面進行支付
Solana Pay是基於Solana區塊鏈開發的支付協議,允許使用加密貨幣進行支付。文章介紹了Solana Pay的優勢和功能,下一篇文章將簡單介紹其API的機制與實作。
你可能也想看
Google News 追蹤
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
“所有人寫的程式會變成指令 每一道指令是由CPU執行 而CPU所能理解的指令類型有限”
Thumbnail
本文介紹了ICT/SMC的基礎概念和多種模型,並探討了三種常見的價格行為。透過圖表分析,深入解析價格運作的原理及交易意圖,並提供了相應的交易策略和建議。
Thumbnail
在IT世界中,持續整合(CI)和持續部署(CD)已成為提高開發效率和確保高質量軟件交付的重要實踐。本文將探討CI/CD的基本概念,介紹市場上的主流工具,並提供實施這一流程的指南和最佳實踐。
Thumbnail
本專欄將提供給您最新的市場資訊、產業研究、交易心法、潛力股介紹,以上內容並非個股分析,還請各位依據自身狀況作出交易決策。歡迎訂閱支持我,獲得相關內容,也祝您的投資之路順遂! 每年 $990 訂閱方案👉 https://reurl.cc/VNYVxZ 每月 $99 訂閱方案👉https://reu
Thumbnail
當下週大家焦點都在關注週三CPI數據公佈與Fed的利率決策會議和點陣圖上時, 也許有一些短期賺快錢的機, 量化金融策略就是找出一些短, 中, 長期的投資機會, 並應用投資工具(個股期權或槓桿)提升報酬率與資產累積
Thumbnail
  解釋CBAS的文章很多,講到細節的也不少,谷哥大神也不難爬到,可以簡單視為可轉債的買權。 這裡用比較直白的個人經驗來做分享:   1、這是一種只能做多的有槓桿效應的投資工具,因為他不像一般權證有認售,基本上他就是認購性值的可轉債的衍生性金融商品。   2、他像權證,有時
Thumbnail
金融業需遵守金檢規則,建立API分級協助和管理程序確保API合規,使用OAuth 2.0和API KEY授權功能降低風險,實行API認證和金鑰機制保障資料安全。監控API使用,建立控制機制,選擇優良的APIM,提供全面的API管理和安全。
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
“所有人寫的程式會變成指令 每一道指令是由CPU執行 而CPU所能理解的指令類型有限”
Thumbnail
本文介紹了ICT/SMC的基礎概念和多種模型,並探討了三種常見的價格行為。透過圖表分析,深入解析價格運作的原理及交易意圖,並提供了相應的交易策略和建議。
Thumbnail
在IT世界中,持續整合(CI)和持續部署(CD)已成為提高開發效率和確保高質量軟件交付的重要實踐。本文將探討CI/CD的基本概念,介紹市場上的主流工具,並提供實施這一流程的指南和最佳實踐。
Thumbnail
本專欄將提供給您最新的市場資訊、產業研究、交易心法、潛力股介紹,以上內容並非個股分析,還請各位依據自身狀況作出交易決策。歡迎訂閱支持我,獲得相關內容,也祝您的投資之路順遂! 每年 $990 訂閱方案👉 https://reurl.cc/VNYVxZ 每月 $99 訂閱方案👉https://reu
Thumbnail
當下週大家焦點都在關注週三CPI數據公佈與Fed的利率決策會議和點陣圖上時, 也許有一些短期賺快錢的機, 量化金融策略就是找出一些短, 中, 長期的投資機會, 並應用投資工具(個股期權或槓桿)提升報酬率與資產累積
Thumbnail
  解釋CBAS的文章很多,講到細節的也不少,谷哥大神也不難爬到,可以簡單視為可轉債的買權。 這裡用比較直白的個人經驗來做分享:   1、這是一種只能做多的有槓桿效應的投資工具,因為他不像一般權證有認售,基本上他就是認購性值的可轉債的衍生性金融商品。   2、他像權證,有時
Thumbnail
金融業需遵守金檢規則,建立API分級協助和管理程序確保API合規,使用OAuth 2.0和API KEY授權功能降低風險,實行API認證和金鑰機制保障資料安全。監控API使用,建立控制機制,選擇優良的APIM,提供全面的API管理和安全。