2025年6月,一个地址开始往Venus协议的智能合约里打钱。不是投资,不是质押,就是单纯转账。连续9个月,链上记录清清楚楚,社区有人标记过这个地址,团队回复说"去中心化嘛"。
215万美元就这么没了。攻击者没用什么高深技术,用的漏洞在Venus自己的审计报告里躺了3年——Code4rena的审计员早就写过:"直接转账可能绕过供应上限"。团队标记为"已知晓,不修复"。
Compound分叉协议的供应上限,本质上是个门卫。它只查正门(mint函数),不查后门(直接ERC-20转账)。攻击者从后门溜进去,把THEN(THE)代币直接打进vTHE合约,合约的底层资产余额涨了,但vToken供应量没变。
汇率公式是死的:exchangeRate = (底层资产余额 + 总借款 - 储备金) / vToken总供应量。分子变大,分母不动,汇率就虚高。每个持币人突然多了借债额度,而供应上限的检查函数还在睡大觉。
第一道防线:供应上限成了摆设
标准实现里,mintInternal函数会校验:totalSupply + mintAmount ≤ supplyCap。但直接转账走的是另一条路——IERC20(THE).transfer(address(vTHE), amount)。没有cap检查,没有权限控制,就是简单粗暴地增加余额。
Venus的修复方案现在看很直白:供应上限必须盯紧合约的实际底层余额,而不是只算mint出来的量。getCashPrior()函数能读到原始token余额,这个数和记账的supply之间但凡有缺口,就该拉闸。
但2023年的审计建议被归类为"设计选择"而非"安全漏洞"。换句话说,团队觉得用户不会这么干。9个月后,攻击者证明他们会。
第二道防线:预言机成了帮凶
攻击者的操作是循环的:买THEN→直接捐给合约→汇率膨胀→借出更多资产→再买THEN。这个循环把THEN的市场价格一起往上推,预言机如实上报了被操纵的价格。
这里有个设计悖论:预言机的职责是反映市场,但市场本身可以被捐赠攻击扭曲。Venus用的不是时间加权平均价(TWAP),价格更新跟着现货走。攻击者在短时间内集中操作,预言机几乎实时反馈了虚高价格。
社区事后复盘时提到,THEN的链上流动性深度本可以作为一个警示指标——当抵押品价格涨幅远超流动性池深度时,系统应该自动下调抵押系数。这个机制不存在。
第三道防线:清算机器人集体失效
254个清算机器人参与了围猎,8048笔交易试图拆解这个头寸。结果?215万美元坏账留在账上。THEN的价格从0.51美元崩到0.22美元,速度超过了清算系统的反应极限。
Compound分叉的清算机制有个隐性假设:价格变动是连续的、可预测的。但捐赠攻击制造的是跳跃式失真——汇率和价格在短时间内同步暴涨,等机器人算清账,抵押品价值已经覆盖不了债务。
更尴尬的是,攻击者的头寸结构经过精心设计,清算激励不足以覆盖滑点和gas成本。机器人在算经济账,攻击者在算博弈论。
这不是Venus第一次踩这个坑
2022年,Venus在BNB Chain的XVS市场出过类似问题。当时也是供应上限被绕过,也是预言机价格被操纵,也是清算不及时留下坏账。那次损失更大,但修复方案没触及根本——只是加了更多参数,没改架构。
Compound分叉协议有个通病:它们继承了代码,也继承了假设。Compound设计于2018年,那时的DeFi还没经历过成熟的MEV生态、没见识过专门的清算机器人军团、更没遇到过把"直接转账"当武器的攻击者。
供应上限的设计初衷是限制单一资产的风险敞口。但当上限只检查mint路径时,它就变成了一个心理安慰——告诉用户"我们控制了集中度",实际上后门大开。
其他协议在干什么
Aave V3的供应上限实现略有不同,它跟踪的是"可清算的底层资产",但同样没有处理直接转账的边界情况。Euler Finance在2023年漏洞后重构了架构,把捐赠攻击纳入了威胁模型,但用的是白名单机制——只接受特定合约的转账,牺牲了一部分可组合性。
最激进的方案来自Morpho Blue,它干脆取消了供应上限的概念,改用风险隔离的独立市场。每个市场有自己的清算人集合和预言机,一个市场出问题不会传染全局。代价是流动性碎片化,用户得自己选市场参数。
Venus选择的中间路线——保留Compound架构,打补丁——在THEN市场上暴露了极限。三个补丁(供应上限检查、预言机TWAP、清算激励调整)都没打对位置,或者说,打得太晚。
215万买来的教训
攻击者的完整时间线现在完全公开:2025年6月开始小额测试,10月加大剂量,2026年3月15日11:00 UTC正式收网。每一步都在链上,每个地址都被标记过。Venus团队在Discord里的回复记录还在:"我们注意到了,正在评估。"
评估了9个月,直到坏账产生。
这个案例最讽刺的点在于:攻击成本几乎为零。不需要闪电贷,不需要复杂的合约交互,就是买币、转账、借贷、循环。技术含量最低的一步——直接ERC-20转账——恰恰是防御系统完全没考虑的场景。
现在Venus的修复方案包括:监控getCashPrior()与记账supply的偏差、引入TWAP预言机、设置价格变动阈值触发暂停。这些都是2022年XVS事件后社区提议过的,当时被优先级更高的功能排期挤掉了。
DeFi协议的安全预算怎么分配?是花3个审计周期找逻辑漏洞,还是花1个周期检查"用户会不会直接转账"?Venus的选择给出了答案,也付出了价格。
254个清算机器人、8048笔交易、9个月的预警窗口——这些数字本该构成足够厚的安全垫。但当架构假设与现实行为错配时,数量优势转化不成防御深度。攻击者只需要找到一个系统没定义的行为,就能让整个防御网络过载。
Compound分叉协议的下一个大考会是什么?也许是EIP-4844之后的blob交易降低了链上数据成本,让更复杂的汇率操纵变得经济;也许是跨链桥接资产让"直接转账"的边界更加模糊。Venus的215万坏账,会成为教科书案例,还是会被下一个协议重复?
热门跟贴