火星链 火星链
Ctrl+D收藏火星链

ACC:漏洞随笔:通过Jet Protocol任意提款漏洞浅谈PDA与Anchor账号验证

作者:

时间: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 团队开发的,可以精简很多账号验证及跨合约调用逻辑。

CZ:Binance钱包和Trust Wallet不受Libbitcoin Explorer 3.x相关漏洞影响:8月11日消息,CZ在社交平台上表示,支持自托管钱包,但前提是自己了解操作。Libbitcoin Explorer 3.x版本的加密货币钱包存在的漏洞源于32位助记词的随机数生成器,这在现代破解技术(如GPU)面前并不足够随机。Trustwallet和Binance 钱包并未在助记词生成中使用此方法。[2023/8/11 16:20:36]

Anchor 是如何工作的呢?我们可以从 Jet Protocol 的一段代码说起:

programs/jet/src/instructions/init_deposit_account.rs

这里的 deposit_account 账号就是用于存储 LP 代币数据的账号,用户在首次使用时,需要调用合约生成该账号,并支付一定的存储费用。

TRON多重签名漏洞使超过5亿美元的资产面临风险,目前该漏洞已被披露并修复:金色财经报道,区块链安全公司 DWallet Labs 发现 TRON 多重签名账户中的一个零日漏洞使超过 5 亿美元的数字资产面临风险,此漏洞允许多重签名帐户的任何签名者(具有任何权重)完全克服 TRON 提供的多重签名安全性,无论帐户中定义的阈值和签名者数量如何。目前该漏洞已被披露并修复,因此现在没有用户资产处于风险之中。[2023/5/30 11:48:33]

而这里的 #[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,可以理解成自动赋予一个确定性的值。

Convex Finance披露vlCVX合约存在漏洞:3月5日消息,Convex Finance发布博客表示,投票锁定的CVX(vlCVX)合约存在漏洞,用户存款是安全的,不存在任何风险。针对该漏洞,团队部署了新的vlCVX合约,并表示为了将用户迁移到新的vlCVX合约,所有当前锁定的 CVX 都已从旧合约中解锁。任何已投票锁定其CVX的人都必须从“锁定 CVX ”页面撤回其代币并重新锁定新合约。[2022/3/5 13:38:25]

使用 PDA,程序可以以编程方式对某些地址进行签名,而无需私钥。同时,PDA 确保没有外部用户也可以为同一地址生成有效签名。这些地址是跨程序调用的基础,它允许 Solana 应用程序相互组合。这里用的是 "deposits" 字符 + reserve 账号公钥 + depositor 账号公钥作为 seeds,bump 则是在用户调用时传入。

规则 3:#[account(token::mint = <target_account>, token::authority = <target_account>)]

美国监管机构认为稳定币绕过监管漏洞,正在研究如何监管稳定币:9月20日消息,美国监管机构认为稳定币绕过监管漏洞,可能会从以下几个方面监管稳定币,分别为:把稳定币指定为系统风险;称稳定币为证券;视稳定币为货币市场共同基金;像监管银行一样监管稳定币;美联储正在研究与稳定币有竞争性质的中央银行数字货币 (CBDC)。

此外,全球性监管机构金融稳定委员会正在研究建立稳定币相关的标准和计划,可能会在 2023 年出台相关监管。(纽约时报)[2021/9/20 23:37:37]

这是一个 SPL 约束,用于更简便地验证 SPL 账号。这里指定 deposit_account 账号是一个 token 账号,它的 mint 权限是 deposit_note_mint 账号,authority 权限是 market_authority。

Account 的宏定义还有很多,这里略表不提,详细可以考虑文档:https://docs.rs/anchor-lang/latest/anchor_lang/derive.Accounts.html

动态 | apt/apt-get远程代码执行漏洞爆光,“中间人”攻击强势来袭:降维安全实验室(johnwick.io)近日关注到Linux发行版Debian/Ubuntu的apt/apt-get易遭受HTTP“中间人”攻击(CVE-2019-3462)。该漏洞允许“中间人”在正在安装任何包的机器上以root权限执行任意代码,降维安全提示,为避免自己在更新过程中被攻击,请将自己的apt/apt-get升级至最新版。尚未升级到最新版的用户,请在更新时禁用HTTP重定向来缓解此攻击。具体操作是,在bash中执行以下命令:sudo apt update -o Acquire::http::AllowRedirect=false && sudo apt update -o Acquire::http::AllowRedirect=false[2019/1/24]

有了这些前置知识,我们就可以直接来看漏洞代码:

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 开发者,注意对账号体系进行严密的审查。

标签:UNTACCCCOCOUEncountrbacc币怎么样SUCCOR价格CouponBay

以太坊最新价格热门资讯
DEF:朱嘉明:数字经济和非同质时代——NFT

编者按:2022年3月26日, ForeChain与零壹智库主办“数字藏品的全球趋势与中国创新——全球数字藏品年度报告发布会”.

1900/1/1 0:00:00
PLUS:金色趋势丨以史鉴今 BTC月线级别的反弹即将结束?

量比价先行,对于成交量研究的重要性不言而喻,上图为BTC月线走势,下方为量平滑异同移动平均线,该指标用于衡量量能的发展趋势,属于量能趋向指标.

1900/1/1 0:00:00
AND:百度“希壤”恶评如潮?但我看到了元宇宙商业的四大模式

虚拟人、数字藏品、XR硬件设备、游戏社交教育文旅医疗……你负责推荐产品,我们来搞定体验,联系我们,让更多人看到你。 图:希壤官方宣传图4月2日,时隔2个月,希壤APP迎来了它的最新版更新,感人.

1900/1/1 0:00:00
P2E 2.0: 设计能够自我进化的游戏经济体

P2E 2.0: 设计能够自我进化的游戏经济体在我之前的文章《P2E是不可持续的--寻求下一个Axie Infinity》中,我预测初代P2E游戏经济很可能在短期内崩盘.

1900/1/1 0:00:00
NFT:你知道吗?炒鞋的那帮人 现在去炒数字藏品了

「炒鞋、炒手办潮玩早没那么火热了,现在圈子里都是炒数字藏品了。」球鞋玩家老刘介绍着。在 2019 年 9 月,Supreme 19 FW 的开季赠品伞兵玩具在二级市场上被炒至 2000 多元的消.

1900/1/1 0:00:00
NFT:web3:颠覆互联网还是白日梦一场?

围绕web3的这场论战或许是近些年科技圈爆发的最大的一场:一边是技术乌托邦派、提供各种web3服务的公司及其风险投资人.

1900/1/1 0:00:00