注意合约安全与链上风险

作者:Beosin

2024 年 11 月 17 日,据 Beosin Alert 监控预警发现 FTM 链上借贷协议 Polter Finance 遭受攻击,攻击者通过闪电贷操纵项目合约中代币价格进行获利。Beosin 对本次事件第一时间进行了漏洞分析和资金追踪。

详细攻击步骤:

(1) 攻击者部署攻击合约 (0xa21451ac32372c123191b3a4fc01deb69f91533a)

,并使用该合约在 UniswapV2 Pair (0xEc7178F4C41f346b2721907F5cF7628E388A7a58) 上执行闪电贷。攻击者借用了几乎所有可用的 BOO 代币,只留下了 1,000,000 个 BOO 代币。

(2) 本次事件被攻击的 LendingPool 合约 (0xd47ae558623638f676c1e38dad71b53054f54273) 使用 0x6808b5ce79d44e89883c5393b487c4296abb69fe 作为预言机,该预言机使用的是近期部署的喂价合约(0x80663edff11e99e8e0b34cb9c3e1ff32e82a80fe)。这种喂价机制是有缺陷的,并且依赖于易被操纵的 UniswapV2 Pair 的代币储备来进行价格计算

(3)  这个喂价合约使用可被攻击者用于闪电贷的 uniswapV2_pair(0xEc71)合约中的代币储备来计算价格,因此这里存在价格操纵攻击漏洞

(4) 在闪电贷之后,token1_in_pair 的储备下降到只有 100 万 BOO 代币,导致其计算后的价格比原来增加了 1.373 × 10¹⁸倍。这使得攻击者可以借出远远超过其抵押品价值的资产。

原来的代币价格
闪电贷后错误的价格

(5) 攻击者使用存款功能向 LendingPool 中存入 1 个 BOO 代币。由于价格被操纵,该单个 BOO 代币的价值被放大了 1.373 × 10¹⁸倍。

(6) 攻击者利用操纵后的代币价格来借出大量其它资产。在调用 borrow 函数,攻击者通过了合约中的价格验证,因为该函数错误地验证了被操纵的 BOO 代币价格。

被盗资金追踪:

Beosin Trace 对被盗资金进行追踪发现:被盗资金被攻击者转换成 FTM 代币,然后跨链到 ETH 链,将所有资金都存放在 ETH 链上。以下是 ARB 链和 ETH 链上的资金流动过程示意图。

Beosin Trace 部分被盗资金流向图

在经历了一系列跨链代币兑换的损耗后,存放在 ETH 链总额约为 776 万 USDT。以下是存放被盗资金的地址:

11 月 20 日,攻击者持续向 Tornado Cash 转移了超过 2625 枚 ETH,如下图所示。Beosin Trace 已将黑客相关地址加入黑地址库,后续将持续追踪

据 Beosin Trace 分析,被盗资金已存入 Tornado Cash

免责声明:作为区块链信息平台,本站所发布文章仅代表作者及嘉宾个人观点,与 Web3Caff 立场无关。文章内的信息仅供参考,均不构成任何投资建议及要约,并请您遵守所在国家或地区的相关法律法规。