Back to Blog

~$135万损失:BarnBridge、DeFiTuna | BlockSec周报

Code Auditing
July 22, 2026
10 min read
Key Insights
  • 本报告收录了以太坊和 Solana 上 2 起值得关注的安全事件,涉及总损失约 135 万美元。

  • Solana 上的 DeFiTuna 损失约 57 万美元,原因是仓位健康检查将零值仓位视为健康状态,而忽略了未偿还的债务。攻击者利用用户可控的交换路由以及另一个低流动性资金池,创造出触发该缺陷的条件。

  • 以太坊上的 BarnBridge 损失约 77.6 万美元,攻击者利用一个已被弃用但仍处于活跃状态的治理系统,通过了一项恶意提案,凸显了在协议弃用期间保留治理权限所带来的风险。

过去一周(2026/07/13 - 2026/07/19),以下 2 起重大安全事件值得关注,涉及以太坊和 Solana 上约 135 万美元的总损失。

日期 事件 类型 预估损失
2026/07/15 BarnBridge 治理机制不当 ~$776K
2026/07/16 DeFiTuna 健康检查缺陷 ~$570K
  • DeFiTuna:仓位健康检查在存在非零债务的情况下,将零资产价值视为健康状态;攻击者通过控制的交换路由和单独的低流动性资金池触发了该缺陷,造成坏账仓位。
  • BarnBridge:一个已废弃的治理系统被利用,用于修改关键协议配置并转走用户已授权的资金。

Web3 最佳安全审计机构

在上线前验证设计、代码和业务逻辑

本周重点:DeFiTuna

根本原因是仓位健康检查中存在有缺陷的零值分支:一个资产价值为零、未偿债务约 $570K 的仓位被判定为健康状态。攻击者通过将交换路由到单独的低流动性资金池来触发该缺陷,但健康检查本应是捕获由此产生的坏账的控制手段。

2026 年 7 月 16 日,Solana 上支持杠杆现货仓位的借贷协议 DeFiTuna 遭到攻击,损失约 $570K 的 USDC [1]。根本原因是仓位健康检查中存在有缺陷的零值分支,即便资产价值为零、债务为非零时,该分支仍将仓位判定为健康。攻击者以零抵押品开设了一个杠杆仓位,从协议金库借入 USDC,并将交换路由至攻击者控制的低流动性资金池,导致仓位仅收到可忽略不计的目标代币数量。精度截断随后将仓位价值四舍五入为零,健康检查将该仓位判定为健康,从而造成约 $570K 的坏账。

背景

DeFiTuna 是 Solana 上支持保证金交易的借贷协议。用户可以通过提供一种代币作为抵押品、从协议金库借款,并将借入资金兑换为目标代币来开设现货仓位。随后将对所形成的仓位与债务进行比较,以判断其是否处于健康状态。

在 DeFiTuna 现货市场中,两种资金池代币分别称为代币 A 和代币 B。在被攻击的市场中,代币 A 为 TUNA,代币 B 为 USDC

  • USDC 为抵押代币(collateral_token)。用户存入 USDC 作为保证金,从 DeFiTuna 金库借入额外的 USDC,借入的 USDC 随后被兑换为 TUNA
  • TUNA 为仓位代币(position_token),即兑换后仓位所持有的资产。其净效果是以 USDC 债务为资金来源,对 TUNA 进行杠杆做多。
  • 金库账户持有贷款方流动性,是借入资金的来源。
  • AMM 资金池为 TUNA/USDC 交易对提供市场流动性和价格参考。

DeFiTuna 通过 Jupiter(一个 Solana 交换聚合器)路由仓位交换。交换路径以 Jupiter 路由数据和路由账户的形式提供给 DeFiTuna 指令。由于调用方提供这些账户,调用方可控制交换所使用的资金池。在执行交换前,DeFiTuna 会通过将正常市场资金池价格与预言机价格进行比较,执行交换前价格检查。

漏洞分析

存在漏洞的程序是 DeFiTuna(tuna4u...nogD)。

根本原因是仓位健康检查中存在有缺陷的零值分支。交换完成后,DeFiTuna 通过将持有的 TUNA 换算为 USDC 来对仓位进行估值。如果 TUNA 余额足够小,向下取整为零,则 total 字段变为 0。健康检查逻辑将 total == 0 视为健康状态,而不要求 debt == 0

攻击分析

两项设计属性使攻击者得以控制借入资金的路由去向。第一,DeFiTuna 接受调用方提供的 Jupiter RouteV2 数据,而未根据预言机价格和借入金额自行推导最小可接受的 TUNA 输出量。第二,交换前预言机检查仅验证正常的 DeFiTuna 市场资金池,而非 Jupiter 路由实际使用的资金池。

注意: 项目团队认可的事后分析 [1] 将攻击者创建的资金池描述为在接近合法预言机价格处初始化。链上证据显示该资金池以极端价格初始化;交换前检查之所以通过,是因为它验证的是单独的正常市场资金池,而非攻击者控制的资金池。

以下分析基于交易 4x33Dq...EXj1。攻击者执行了多笔攻击交易,此笔交易展示了核心技术手法。

  • 第一步:攻击者创建了一个新的 Fusion TUNA/USDC 资金池。该资金池使用真实的 TUNAUSDC 铸币地址,但与正常的 DeFiTuna 市场资金池相互独立。该资金池以接近刻度 208636 的极端价格初始化,将 TUNA 的定价设为每枚 TUNA 约 10.49 亿 USDC。在此价格下,即使极少量的 TUNA 也能在交换中吸收数十万 USDC
  • 第二步:攻击者在新资金池中挂出两个小额卖方限价订单。每个订单存入 0.000526 TUNA,合计 0.001052 TUNA。由于资金池价格极高,这一极小量的 TUNA 供给在交换执行时可以吸收全部借入的 USDC 金额。
  • 第三步:资金池准备就绪后,攻击者以 TUNA 为仓位代币、USDC 为抵押代币,开设了一个 DeFiTuna 现货仓位。攻击者提供 0 USDC 作为抵押品,并从 DeFiTuna 的 USDC 金库借入 570,000 USDC
  • 第四步:交换前,DeFiTuna 将正常市场资金池价格与预言机价格进行比较。正常资金池的即时价格接近预言机价格,因此检查通过。该检查仅验证正常的 DeFiTuna 市场资金池,并未验证 Jupiter 路由将使用的 Fusion 资金池。
  • 第五步:交换按照攻击者提供的 Jupiter 路由执行,将资金导入攻击者控制的 Fusion 资金池,最小输出量实际上被设为零。扣除协议手续费后,569,601 USDC 被路由至攻击资金池,而 DeFiTuna 仓位仅收到 494TUNA 原始单位(0.000494 TUNA)。
  • 第六步:交换完成后,该仓位持有约 570,000 USDC 的债务,以及仅为尘埃量的 TUNA。当 DeFiTuna 将该 TUNA 余额换算为 USDC 价值时,结果向下取整为 0。健康检查将 total == 0 视为健康状态,因此该坏账仓位被接受。
  • 第七步:攻击者提取了积累在攻击者控制的 Fusion 资金池中的 USDC。两笔提取金额几乎相等,与第二步中创建的两个限价订单仓位相对应。

结论

根本原因在于健康检查的 total == 0 分支无论是否存在未偿债务,均将仓位判定为健康。攻击者控制的路由和流动性创造了触发该缺陷的条件,但健康检查才是本应防止坏账产生的最终控制手段。

最直接的修复方案是拒绝任何 total == 0debt > 0 的仓位。存在未偿债务的零值仓位永远不应被视为健康。此外,协议应根据预言机价格和借入金额独立推导最小可接受的交换输出量,而不依赖调用方提供的路由参数。将预言机/价格检查绑定到实际交换资金池,或根据协议计算的下限验证交换输出,可防止交换前检查通过路由至未经验证的资金池而被绕过。

参考资料

开始使用 Phalcon Explorer

深入解析交易,明智决策

免费立即体验

本周更多事件

BarnBridge

2026 年 7 月 15 日,以太坊上的收益分配协议 BarnBridge 遭到攻击,损失约 $776K 的 USDC [1]。根本原因是已废弃的治理合约仍保留修改关键协议配置的权限。攻击者获取了足够的投票权,通过了一项恶意提案,替换了某协议组件的控制器,随后利用新控制器转走了用户已授权的 USDC

背景

BarnBridge 是一个由 DAO 治理的协议,将用户资金分配至不同的借贷市场以产生收益。投票权由质押的 BOND 数量和锁定时长决定。提交提案需要至少相当于总投票权 1% 的投票权。提案须满足最低法定人数 40%,且赞成票须占参与投票总票数的至少 60% 方可通过。提案提交后,需经过两天的预热期、三天的投票期和两天的排队期,方可执行。

漏洞分析

根本原因是已废弃的治理合约在协议废弃后,仍保留修改关键协议配置的权限。该治理系统控制着 CompoundProviderController 分配,而 CompoundProvider 是用户此前已授权可支出其 USDC 的合约。由于 BarnBridge 已被废弃,质押的 BOND 总量和活跃参与度大幅下降,使得恶意提案的通过变得极为容易。

攻击分析

以下分析基于交易 0xd191fe...895afb

攻击者花费约 0.335 ETH 购入约 32,795 枚 BOND,随后存入并锁定 32,000 枚 BOND,获得约 43% 的总投票权。

  • 第一步:攻击者部署了一个代理合约并提交了恶意提案。经过两天的预热期后,攻击者投入全部投票权予以支持,同时满足了法定人数和批准要求。
  • 第二步:攻击者将提案加入队列。两天排队期结束后,攻击者执行该提案,将 CompoundProviderController 设置为攻击者的代理合约。
  • 第三步:攻击者升级了代理合约的逻辑,并调用 _takeUnderlying(),利用约 50 名用户的未到期 USDC 授权,将其 USDC 转入 CompoundProvider。随后攻击者调用 transferFees() 将资金转至攻击者地址,获利约 $776K 的 USDC

结论

若 DAO 或协议正在被废弃,其治理合约应放弃或永久禁用修改安全关键配置的能力,尤其是管理员、控制器和资金提取权限。具体措施包括:撤销治理合约对下游合约的管理员角色、将所有权转移至销毁地址,或执行最终提案以禁用升级功能并将控制器引用设置为不可变的安全值。在已废弃的协议上保留治理权限会造成低成本攻击面:随着参与度下降,达到法定人数所需的资金也会成比例减少。

参考资料

Sign up for the latest updates
COLDCARD事件:当钱包的"随机"助记词并不随机
Security Insights

COLDCARD事件:当钱包的"随机"助记词并不随机

COLDCARD固件存在静默构建集成漏洞,导致比特币种子生成回退至软件随机数生成器,弱随机性使钱包种子可被离线恢复。由于漏洞存于种子本身,固件更新无法修复;截至2026年8月7日,已核实损失达1,405 BTC(约9100万美元),私下估计高达2,055 BTC。

~$8800万损失:COLDCARD与LULA漏洞利用事件 | BlockSec周报
Security Insights

~$8800万损失:COLDCARD与LULA漏洞利用事件 | BlockSec周报

2026年7月27日至8月2日,两起安全事件共造成约8800万美元损失。COLDCARD硬件钱包固件存在熵值缺陷:构建守卫仅检查RNG配置宏是否存在而非是否启用,导致种子生成回退至确定性软件路径,攻击者借此恢复受影响种子并分批盗取至少1370枚BTC(约8800万美元)。BNB链上LULA代币因业务逻辑漏洞损失约57.8万美元,攻击者触发特权函数`recycle()`,从PancakeSwap V2池提取LULA并重置储备,耗尽流动性。

通讯简报 - 2026年7月
Security Insights

通讯简报 - 2026年7月

2026年7月,三起最大DeFi事件共造成约6790万美元损失,涉及Arbitrum和Solana。AFX Trade因供应链攻击导致验证者签名权被盗,损失约2415万美元;Ostium的OLP金库因预言机基础设施被攻破,攻击者提交恶意价格,损失约2375万美元;BonkDAO攻击者花费440万美元获取足够投票权,通过恶意国库转账提案,损失约2000万美元。三起事件均表明协议安全边界远超智能合约代码本身。

Best Security Auditor for Web3

Validate design, code, and business logic before launch. Aligned with the highest industry security standards.

BlockSec Audit