废弃协议BarnBridge被盗86万美元:攻击者仅花2243美元

blockful_io 发布于 2026-07-17 18:08 阅读 13

2026年7月,一名攻击者仅花费约2243美元购买BOND代币,通过控制已废弃的BarnBridge DAO的治理投票,成功窃取了约86万美元的用户资金。攻击利用了三个关键漏洞:协议的治理合约仍可被调用且投票门槛极低;被废弃的智能合约仍保留着从用户钱包转移资产的权限;用户多年前授权的代币额度从未撤销。文章详细描述了攻击过程、后续的夺权战以及此类事件的普遍性,指出协议废弃不等于安全,必须主动撤销所有权限。

图像

一个休眠的协议,如果仍然持有生效的代币授权和活跃的管理员权限,那它就没有退休。它是一个没有过期时间的漏洞悬赏。

2026年7月15日,一笔以太坊交易从51个钱包中提取了77.4万美元,并将其发送到一个匿名地址。那些钱包没有一个签署了那笔交易,也没有一个被黑。它们只是多年前使用过BarnBridge产品,并且从未撤销授予该产品的权限。

这笔钱并非通过通常意义上的智能合约漏洞离开的,而是从DAO的正门离开的,由一场几乎无人反对的投票打开:一个废弃DAO内部的治理攻击。

BarnBridge是什么,以及它为何仍然有效

图像

BarnBridge 界面

BarnBridge 于 2020 年推出,是一个用于代币化和对冲 DeFi 收益的协议。其旗舰产品 SMART Yield 允许用户存入稳定币,然后将这些稳定币路由到 Compound 和 Aave 等借贷市场以赚取利息。在 2023 年与美国证券交易委员会达成和解后,团队逐步关闭了产品。

然而,合约从未停止工作。这是首先要理解的事情:在以太坊上,“关闭一个产品”是一个商业决策,而不是链上事件。已经部署的代码仍然可以被调用,而 BarnBridge 留下了几个仍在运行的部分。

BarnBridge 由一种名为 BOND(0x0391D2021f89DC339F60Fff84546EA23E337750f)的代币治理。持有者将他们的 BOND 锁定到一个协议称为 Barn(0x10e138877df69Ca44Fdc68655f86c88CDe142D7F)的质押合约中,并获得投票权。任何拥有足够投票权的人都可以向治理合约(0x4cAE362D7F227e3d306f70ce4878E245563F3069)提交提案,如果获得足够多的投票权支持,该提案将被排队,等待一段延迟时间,然后在链上执行。

每个 SMART Yield 市场由三个相互通信的合约构成。有一个代表用户份额的池代币。有一个 Provider(提供者),即实际持有资金并代表用户与 Compound 或 Aave 交互的合约。还有一个 Controller(控制器),即管理费用和收益提取等设置的合约。后两者之间的关系是整个故事的核心:Provider 服从其 Controller。Provider 上转移资金的函数只能由其注册为控制器的地址调用。Provider 认为谁是其 Controller,谁就能访问并移动资金。更改这个指针,你就改变了谁在控制该金库。

在以太坊上,合约不能拿走你的代币,除非你先授予它权限。这种权限被称为批准或授权——你告诉代币合约“这个特定地址被允许转移最多这么多余额”。从那时起,被批准的合约就可以调用 transferFrom 拉取你的代币,而无需再次请求。批准很方便,而且它们具有很强粘性。大多数人一次性批准大额数量,使用产品,然后从未想过他们留下的常设权限。当用户存入 SMART Yield 时,他们批准了 Provider 合约转移他们的稳定币。多年后,许多这些批准仍然有效,仍然指向一个休眠 DAO 所控制的合约。

将这三个事实放在一起,风险的全貌就自行显现了。一个几乎被废弃的 DAO 仍然有权重新定义谁控制金库合约,而这些金库合约仍然持有转移他人资金的实时权限。唯一缺少的是有人愿意将这两者连接起来。

攻击:如何开始的,成本有多低,以及如何进行的

这次攻击不需要零日漏洞或巧妙的可重入攻击。它只需要一个法定人数,而在一个已死的协议中,达到法定人数成本很低。

图像

攻击从开始到结束:从在 Uniswap 上购买代币到执行允许从 BarnBridge 用户提取资金的提案。

由于 BOND 持有者没有理由在一个没有产品的协议中继续质押,几乎没有人这样做。在总供应量 10,000,000 BOND 中,攻击发生时只有大约 213,848 个 BOND 质押在 Barn 中,约占供应量的 2.14%。这个数字很重要,因为 BarnBridge 的法定人数是根据质押金额来衡量的,而不是根据总供应量。

两个匿名钱包正是利用了这一点。第一个钱包 0xf908610e9174c7cd6e9dfd371e238be4511297a1 提交了提案 #14。第二个钱包 0xa8ce49a57400445c6a4118ae3460ed4e46c815b8 提交了提案 #15。它们共同持有大约 198,092 投票权,约占 Barn 中所有质押代币的 92.6%。质押数据清楚地说明了它们为何能以如此低的成本达到这一点。BarnBridge 在提案创建后的一个短暂的“预热”窗口后获取投票快照,并且它提供了一个锁仓乘数,可以将锁定时间较长的代币的投票权近乎翻倍,而它必须达到的法定人数是用普通、未加乘的 BOND 来衡量的。

在提案 #15 之前的窗口期间,Barn 中的质押从大约 146,010 增加到 213,848,而第二个攻击者的投票权从大约 4,000 跃升到 135,659。攻击者在一个空房间里质押,并以法定人数公式无法跟上的投票权进行投票。

图像

与 BarnBridge Governor 的交易。在此之前,与该合约的最后一次交互发生在 2023 年。

我们可以为那个房间定个确切的价格。这两个钱包拥有的每一枚 BOND 都来自同一个来源:Uniswap V2 池(BOND 与 USDC 配对,0x6591c4bcd6d7a1eb4e537da8b78676c1576ba244),在投票前的几天内通过七笔交易购买。它们总共获得了 100,633 BOND,流入该池购买它的 USDC 总计正好为 2,243 美元。这就是夺取 DAO 的全部成本,大约 2,000 美元,花在了别人都不想要的代币上。

这些提案本身被写得看起来很无聊。提案 #14 带有一个单一操作,描述为一般的“迁移代理实现”。提案 #15 带有十个操作,描述为“迁移控制器代理”。对照合约解码后,每个操作都调用一个名为 yieldControllTo(address) 的函数,选择器为 0x5bb78d55。这是 SMART Yield Controller 的一个合法部分,是将 Provider 的控制权交给新控制器的机制。这正是它作为伪装如此有效的原因。

传递到该函数的地址正是伪装结束的地方。

提案 #14 将控制权移交给 0x66c6f3b4b4b458e6d764759ecf122484ebef7580,提案 #15 将十个 Provider 移交给 0x851e47f37e20712407990556376a7124de5c3d4a。两者都是代理合约,意味着其逻辑存在于另一个地址并且可以由管理员更改的合约。我们直接从存储中读取了这两个代理的管理员槽。第一个代理的管理员是 0xf908610e…97a1,第二个的管理员是 0xa8ce49a5…15b8——即两个攻击者钱包本身。控制这些代理的人可以随时更改它们的行为,因此即使安装的逻辑看起来无害,攻击者也可以在控制后进行修改。

提案 #14 以 63,824.17 投票权赞成通过,而所需法定人数为 58,404.32,没有一票反对。它通过了时间锁,并在 2026 年 7 月 15 日 02:35:11 UTC 的区块 25,535,097 处执行。一旦执行,位于 0xdaa037f99d168b552c0c61b7fb64cf7819d78310 的 USDC Provider 就不再听从 BarnBridge,而是开始听从攻击者的代理。

图像

金库换了新主人后,扫荡就是机械性的。几分钟后,在交易 0xd191fead1b9a2244f2837560f35d4fc865404914d229bfcb0172d1a7a9895afb 中,攻击者调用了恶意代理,该代理又使用了 Provider 仍有效的权限对每个受害者调用 transferFrom。交易收据在一个地方讲述了整个故事:52 个 USDC 转账事件,其中 51 个从受害者那里将资金转入 Provider,最后一个转账将整堆资金转移到攻击者手中。金额精确到美分。51 名受害者总共损失了 774,943 美元,同样数量的资金进入了攻击者的钱包。单笔最大损失约为 12.5 万美元。

提案 #15 是续集,于第二天早上上演。它于 2026 年 7 月 16 日 09:28:58 UTC 执行,将另外十个 Provider(涵盖 Compound 和 Aave 市场上的 USDC、DAI、USDT、GUSD 和 RAI)重新分配给了攻击者运行的一个控制器。大约四分半钟后,一笔单一扫荡交易将大约 85,000 美元的 USDC、DAI 和 USDT 拉入了第二个攻击者钱包。收益只是第一次的一小部分,因为在这些市场上,大多数批准已经变少或在警报发出后的几个小时内被撤销,而 GUSD 和 RAI 市场则一无所获。两个提案加起来,攻击者带走了大约 860,686 美元。

这次盗取并非一次性的、已经过去的事件。被劫持的控制器仍然听从攻击者,因此任何仍然开放的批准,或者以前用户通过将资金移回仍被批准的地址而重新暴露的批准,都可能再次被扫荡。这并不是假设,因为第一次突袭几小时后,攻击者又回来从原始市场上拉走了另外 500 美元的 USDC,这些 USDC 是重新出现的。唯一可靠有效的防御是每个用户直接控制的:撤销批准。

经济账是值得仔细思考的部分。一笔 2,200 美元的购买单次扫荡就回收了 77.4 万美元,大约是投入的 345 倍回报。而提案 #15 仍排在其后,准备对剩余的市场执行同样的手法。

BarnBridge 治理攻击中的夺取成本与被盗金额对比。大约花费 2,243 美元购买 BOND;提案 #14 中被盗取 774,943 美元。

后续:争夺剩余资产的战斗

图像

过去几个小时内,BarnBridge 治理中出现了三个提案。

这些盗取事件并没有结束故事。它们开启了第二个故事,就在治理合约内部,三个新提案现在正处在其预热窗口中,即提案在投票开始前需要等待的两天持有期。

提案 #16 来自收到第一批盗取资金的同一个钱包。这是攻击者试图获取一切仍存在的东西:它的十个 action 对 Barn 和 DAO 的质押池调用了 transferOwnershiptransferDAO,并且每一个都将攻击者自己的地址指定为新所有者。

提案 #17 和 #18 来自另外两个钱包,0x01c3dbd90a0d639ca6c9f6a11928056168d72c89 和 0xb971770cd53b839004fdfcaf4cd2f5b39342cd9a,其中一个的标题简单地写着“救援”。提案 #17 将两个被劫持的 SMART Yield 控制器重新分配给一个新的合约;提案 #18 将 Barn 和这些池的所有权移交给 0x01c3dbd90a0d639ca6c9f6a11928056168d72c89。

这个标签看起来像是一个白帽试图从攻击者手中夺回 DAO。但是,一个将质押合约和每个池的所有权集中到一个匿名地址的“救援”,在链上与一个试图抢夺第一个攻击者尚未拿走的东西的竞争对手是无法区分的。

图像

与攻击者竞争的钱包拥有 1.5 倍的票数,但黑客仍有时间购买更多代币来增加他的投票权。

我们可以衡量的是投票情况,而且投票很接近。为了资助反击行动,有人向 Barn 注入了新的 BOND,总质押量几乎翻倍,从约 213,848 增加到约 363,849 BOND。“救援”方现在控制着大约 249,854 投票权,而攻击者拥有 197,792——领先,但并非压倒性的。

图像

这个已死代币突然出现了买盘:BOND 本周上涨约 124%,单日上涨近 149%,至约 0.038 美元,因为双方都在购买决定谁拥有废墟的选票。攻击者最初以每枚约 0.022 美元的价格夺取的 DAO,现在正以几乎翻倍的价格被争夺。

“救援”提案是否能通过取决于一个门槛和一个时钟。BarnBridge 要求提案的“赞成”票数超过所有投票的 60%,因此单纯的领先是不够的:要击败一个投反对票的对手,一方至少需要总票数的 60%,大约是对手权重的 1.5 倍。以 249,854 对 197,792 计算,“救援”阵营的占比约为 55.8%,领先,但如果攻击者投反对票,则仍未达到门槛。

这使得每个提案的快照成为关键时刻,因为投票权是在提案创建时间加上两天预热窗口时冻结的,而不是在执行日。这些快照尚未到来:提案 #16 在 2026 年 7 月 17 日 19:11 UTC 冻结,提案 #17 在 7 月 18 日 01:37 UTC,提案 #18 在 7 月 18 日 10:52 UTC。在此之前,这是一场开放的军备竞赛,由谁在时钟停止前质押更多 BOND 来决定胜负。

使其成为可能的漏洞

人们很容易将此归类为“治理攻击”然后继续前进,但这个标签抹平了几个不同的失败层层叠加的事实。

第一个是与实时质押Hook的法定人数。将法定人数设定为当前质押代币的 40%,在一个活跃的协议中是合理的,但在一个已死的协议中是鲁莽的。随着参与度流失,控制 DAO 的门槛也随之下降,直到几千美元就能买到一个绝对多数。更糟糕的是,锁定代币授予的投票权几乎可以翻倍,而法定人数的分母计算的是没有该乘数的代币。在预热窗口期间质押的攻击者,以膨胀的权重投票,而目标却无法跟上。

第二个是对仍然持有资金的合约拥有实时管理权限。逐步关闭产品并没有切断 DAO 重新分配 Provider 控制器的能力。治理系统在很久没有人关注它之后,仍然对真实余额拥有真实、可行使的权力。能够移动资金的权力必须要么被积极捍卫,要么被刻意销毁。BarnBridge 两者都没做。

第三个是遗留的批准本身。如果没有常设的授权,被劫持的控制器将继承一个空金库。这是失败中存在于用户钱包而不是协议代码中的一部分,而且这部分仍在燃烧。

第四个是没有任何紧急制动。理论上,BarnBridge 允许社区通过一种称为废除的机制取消恶意提案,但废除需要超过所有投票权的一半同意。在一个攻击者已经控制绝大多数活跃质押的协议中,这个门槛是无法达到的。没有守护者,没有安全委员会,没有拥有否决权的多签钱包,没有独立的当事方可以拉下一个杠杆就阻止一个已排队的提案。时间锁延迟的存在正是为了争取防御时间,但它却为一个结构上无法到来的防御争取了时间。

更大的问题:被抛弃的治理和协议

https://x.com/blockful_io/status/2066982101342179378 BarnBridge 并非个例。它是今年一直在吸走资金的一种模式的治理版本。

2026 年 6 月,一名攻击者从 Aztec Connect(一个自 2023 年 3 月起已被废弃的隐私桥)中拉走了大约 210 万美元。团队无能为力,因为他们已于 2024 年 4 月放弃了管理员密钥,并且合约是不可变的。同月,Raydium 通过已被弃用、前端已断开多年的 AMM 池损失了大约 134 万美元,而旧的 DxSale 锁定器在大约 1,400 个池中被盗约 730 万美元。每个案例的核心情节都是相同的:一个每个人都在心理上认为已经退休的产品,实际上仍在链上运行,仍然持有价值,并且仍然可以被任何愿意去查看的人调用。

Blockful 在 Aztec 被盗后发出的警告直接指出了病因:“旧合约继续成为黑客的目标。当协议不再维护时,它们就变得更有吸引力。”一个仍有资金的被遗弃合约并非休眠状态。它是一个开放的漏洞悬赏,支付给最先发现漏洞的人,没有委员会批准奖励,也没有办法追回资金。

BarnBridge 给这个教训加上了一个令人不安的转折。Aztec 的合约无法修复,因为它们的密钥已被扔掉。BarnBridge 的合约可以被利用,因为它们的密钥仍插在插座上,由一个过于空旷而无法防御的 DAO 持有。放弃控制和保留控制都失败了,原因相反。关键不在于哪个错误更糟。关键在于“我们停止了维护”并不是一种安全态势,而放弃或忽视都不能替代有意的退役。

关闭一个协议应该像启动一个协议一样严谨。这意味着撤回或冻结闲置余额,解除任何仍能转移资金的管理权力,开展真正的活动让用户撤销常设批准,并在任何实时权限仍然存在时,至少保持对提案创建的最低限度监控。如果法定人数要跟踪实时质押,就需要一个下限,不会在房间空无一人时降到零。而且,只要任何地方的批准仍然指向协议合约,该协议就仍然欠用户一个在攻击进行中阻止它的方法。

对于 BarnBridge 用户来说,立即行动是明确且紧迫的。如果你曾经存入过 SMART Yield,请检查你的代币批准,并撤销任何指向 Provider 合约的批准,优先处理 USDC、DAI、USDT、GUSD 和 RAI,以防提案 #15 在 7 月 16 日变得可执行。使用你信任的工具,例如 revoke.cash 或区块浏览器上的代币批准页面,忽略任何在回复中声称可以“帮助”追回资金的人。

所有这一切背后令人不安的事实是,一个协议并不会因为团队离开而消亡。它只有在其最后一个生效的批准被撤销、其最后一个危险权力被解除时才会消亡。在那之前,它仍然在链上,仍然持有钥匙,并且仍然是某个人的机会。

BarnBridge 界面

  • 原文链接: x.com/blockful_io/status...
  • 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~

相关文章

0 条评论