简介
核心要点:
本期报告收录 2 起发生在 Ethereum 和 Solana 上的安全事件,总损失约 $1.35M。 Solana 上的 DeFiTuna 损失约 $570K,根本原因是头寸(position)健康检查在债务非零时仍将资产价值为零的头寸视为健康。攻击者通过可控的 swap 路由和自建的低流动性池制造了触发该缺陷的条件。 Ethereum 上的 BarnBridge 损失约 $776K,攻击者利用已弃用但仍保留权限的治理系统通过了恶意提案,凸显了协议停运时未撤销治理权限的风险。
过去一周(2026/07/13 - 2026/07/19),以下 2 起安全事件被收录,总损失约 $1.35M,涉及 Ethereum 和 Solana。
表 1:本周收录的安全事件概览
DeFiTuna:头寸健康检查在债务非零时仍将资产价值为零的头寸判定为健康;攻击者通过可控的 swap 路由和自建的低流动性池触发该缺陷,创建坏账头寸。 BarnBridge:已弃用的治理系统被攻击者利用,修改了关键协议配置并转走了用户授权的资金。
本周看点:DeFiTuna
根本原因是头寸健康检查中的零值逻辑缺陷:资产价值为零、债务高达约 $570K 的头寸被判定为健康。攻击者通过将 swap 路由至自建的低流动性池触发了该缺陷,但健康检查本应拦截由此产生的坏账。
2026 年 7 月 16 日,Solana 上支持杠杆 spot 头寸的借贷协议 DeFiTuna 被攻击,损失约 $570K 的 USDC [1]。根本原因是健康检查中零值分支的缺陷:当头寸资产价值为零且债务非零时,仍被判定为健康。攻击者以零抵押开立杠杆头寸,从协议金库借出 USDC,并将 swap 路由到攻击者控制的低流动性池中,导致头寸仅收到极微量的目标代币。精度截断将头寸价值归零,而健康检查将零值头寸视为健康,从而接受了约 $570K 的坏账。
背景
DeFiTuna 是 Solana 上一个支持保证金交易的借贷协议。用户可以通过提供一种代币作为抵押、从协议金库借款、再将借入资金 swap 为目标代币的方式开立 spot 头寸。头寸建立后,协议会根据债务情况检查其是否健康。
在 DeFiTuna 的 spot 市场中,两种池代币分别称为 token A 和 token B。在本次被攻击的市场中,token A 为 TUNA,token B 为 USDC。
USDC 为抵押代币(collateral_token)。用户存入 USDC 作为保证金,从 DeFiTuna 金库借入更多 USDC,借入的 USDC 随后被 swap 为 TUNA。 TUNA 为头寸代币(position_token),即 swap 后头寸持有的资产。最终效果是以 USDC 债务为资金来源的 TUNA 杠杆做多。 Vault 账户持有出借方的流动性,是借入资金的来源。 AMM 池提供 TUNA/USDC 交易对的市场流动性和价格参考。
DeFiTuna 通过 Jupiter(Solana 上的 swap 聚合器)路由头寸 swap。Swap 路径以 Jupiter 路由数据和路由账户的形式传入 DeFiTuna 指令。由于调用方提供这些账户,调用方可以控制 swap 使用哪个池。Swap 执行前,DeFiTuna 会将正常市场池价格与预言机进行比较做预检。
漏洞分析
存在缺陷的程序为 DeFiTuna(tuna4u...nogD)。
根本原因是头寸健康检查中错误的零值分支。Swap 完成后,DeFiTuna 将持有的 TUNA 折算为 USDC 计价。当 TUNA 余额足够小,折算后的 USDC 价值向下取整为零时,total 字段变为 0。健康检查逻辑将 total == 0 视为健康状态,且未要求 debt == 0。
图:健康检查中的零值分支
图:头寸价值折算逻辑
攻击分析
两个设计特性使攻击者得以控制借入资金的去向。其一,DeFiTuna 接受调用方提供的 Jupiter RouteV2 数据,但未根据预言机价格和借款金额自行计算最低可接受的 TUNA 输出量。其二,swap 前的预言机检查仅验证 DeFiTuna 的正常市场池,不涉及 Jupiter 路由实际使用的池。
图:可控的 swap 路由与预言机检查范围
注:项目方认可的事后分析 [1] 认为攻击者创建的池初始价格接近合法预言机价格。链上证据表明该池初始化在极端价格;预检通过是因为验证的是独立的正常市场池,而非攻击者控制的池。
以下分析基于交易 4x33Dq...EXj1。攻击者执行了多笔交易,此处以该笔为例说明核心手法。
图:攻击者创建 Fusion 池
图:池初始化在极端价格
图:挂出小额卖单(一)
图:挂出小额卖单(二)
图:以零抵押借出 570,000 USDC
图:预言机检查仅验证正常市场池
图:资金流入攻击者控制的 Fusion 池
图:头寸仅收到微量 TUNA
图:头寸价值向下取整为零
图:坏账头寸通过健康检查
结论
根本原因是健康检查的 total == 0 分支在债务非零的情况下仍将头寸判定为健康。攻击者通过控制路由和流动性制造了触发该缺陷的条件,但健康检查是本应阻止坏账的最后一道防线。
最直接的修复是拒绝 total == 0 且 debt > 0 的头寸,因为资产为零但有未偿债务的头寸不可能是健康的。此外,协议应根据预言机价格和借款金额自行计算最低可接受的 swap 输出,不依赖调用方提供的路由参数。将预言机/价格检查绑定到实际 swap 使用的池,或对 swap 输出进行协议计算的下限验证,可以防止通过未经验证的池绕过检查。
参考资料
[1] DeFiTuna Post-Incident Statement。https://x.com/DeFiTuna/status/2078083602911261066
本周其它事件
BarnBridge
2026 年 7 月 15 日,Ethereum 上的收益分配协议 BarnBridge 被攻击,损失约 $776K 的 USDC [1]。根本原因是已弃用的治理合约仍保留修改关键协议配置的权限。攻击者获取了足够的投票权通过恶意提案,替换了协议组件的 controller,随后利用新 controller 转走了用户授权的 USDC。
背景
BarnBridge 是一个 DAO 治理的协议,将用户资金分配到不同的借贷市场以产生收益。投票权由质押的 BOND 数量和锁定期决定。创建提案需要至少占总投票权 1% 的投票权。提案需满足 40% 的最低法定人数,且获得至少 60% 的参与票数支持方可通过。提案提交后需经历两天预热期、三天投票期和两天排队期,之后才能执行。
漏洞分析
根本原因是 BarnBridge 在协议停运后,治理合约仍保留修改关键协议配置的权限。治理系统控制着 CompoundProvider 的 Controller 分配,而用户此前已授权 CompoundProvider 使用其 USDC。由于 BarnBridge 已停运,BOND 总质押量和活跃参与度大幅下降,使得恶意提案的通过变得极为容易。
攻击分析
以下分析基于交易 0xd191fe...895afb。
攻击者花费约 0.335 ETH 购入约 32,795 枚 BOND,随后存入并锁定其中 32,000 枚,获得了约 43% 的总投票权。
图:提交恶意提案
图:全部投票权投赞成票
图:将 Controller 替换为攻击者合约
图:转走用户授权的 USDC
结论
协议停运时,治理合约应撤销或永久禁用修改安全关键配置的能力,尤其是管理员、controller 和资金提取权限。具体措施包括:撤销治理合约对下游合约的管理员角色、将所有权转移至销毁地址,或执行一个最终提案禁用升级功能并将 controller 引用设为不可变的安全值。将治理权限留在已停运的协议上会形成低成本攻击面:随着参与度下降,达到法定人数所需的资本也同比降低。
参考资料
[1] Phalcon Alert: BarnBridge Exploit。https://x.com/Phalcon_xyz/status/2077243530280587721
关于BlockSec
推荐阅读👇
推荐站内搜索:最好用的开发软件、免费开源系统、渗透测试工具云盘下载、最新渗透测试资料、最新黑客工具下载……




发表评论