20251217 Yearn攻击事件中,协议错设地址,黑客为何自断一臂操控价格?

摘要:背景信息 20251217,Yearn 距离上次被攻击不到一个月,又被攻击了。这次被攻击的是自动化收益优化金库 yTUSD。攻击的原因是因为 yTUSD 协议错误配置了相关的衍生品代币地址,导致攻击者可以通过该代币操纵 share 价格,套
背景信息 20251217,Yearn 距离上次被攻击不到一个月,又被攻击了。这次被攻击的是自动化收益优化金库 yTUSD。攻击的原因是因为 yTUSD 协议错误配置了相关的衍生品代币地址,导致攻击者可以通过该代币操纵 share 价格,套取超额的 yTUSD 代币。 Exploit TX:https://app.blocksec.com/explorer/tx/eth/0x78921ce8d0361193b0d34bc76800ef4754ba9151a1837492f17c559f23771c43 项目背景 yTUSD 是一个自动化收益优化金库(Yield Vault)专门用于 TUSD(TrueUSD)稳定币的收益优化。 主要功能: 用户存入 TUSD,获得 yTUSD 代币作为存款凭证 合约自动将资金分配到收益最高的 DeFi 借贷协议中 随着时间推移,yTUSD 的价值会因利息累积而增长 合约集成了4 个主流借贷协议: dYdX-去中心化保证金交易协议 Compound- 去中心化借贷协议 Aave- 去中心化借贷协议 Fulcrum (bZx)- 保证金交易与借贷协议 Trace 分析 攻击者首先进行了一大堆的代币兑换,在一堆的衍生品代币之间换过来换过去,感兴趣的读者可以深入查看。主要执行攻击的环节在 trace 的8370-10485 之间,攻击者在闪电贷的 callback 函数中进行了这次攻击。 通过 UniswapV3 闪电贷出 165305 sUSDe,调用 uniswapV3SwapCallback 通过 sUSD+sUSDe 把 165305 sUSDe 兑换成 215192 sUSD 通过 iSUSD 把 2125192 sUSD 兑换成 213848 iSUSD 通过 yTUSD.deposit 将 1169030 TUSD 兑换成 732294 yTUSD 把 213848 iSUSD 发送到 yTUSD 通过 yTUSD.withdraw 销毁 769318 yTUSD 赎回 1414919 TUSD 调用 yTUSD.rebalance 销毁 yTUSD 持有的 213848 iSUSD,赎回 215192 sUSD 发送 0.00000001 TUSD 给 yTUSD 通过 yTUSD.deposit 将 1000 TUSD 兑换成 117004400475278030 yTUSD 代码分析 在用户 yTUSD 协议进行 deposit/withdraw 操作时,会通过 _calcPoolValueInToken() 来计算兑换的比例。 _calcPoolValueInToken()函数 _calcPoolValueInToken()函数用于计算以 TUSD 计价的整个金库的总价值 返回值为以下内容的总和: 存入 Compound 的 TUSD 价值 存入 Fulcrum 的 TUSD 价值 存入 dYdX 的 TUSD 价值 存入 Aave 的 TUSD 价值 合约中持有的 TUSD 其中 _balanceFulcrumInToken() 函数是通过计算 yTUSD 持有多少对应 iToken 的数量,再乘上 rate 来得出对应的 TUSD 价值。 但是!本该是 Fulcrum 对应 TUSD 的代币,被错误设置为了 iSUSD 代币。
阅读全文