本文详细分析了Polter Finance的安全漏洞及其导致的1200万美元损失,探讨了该平台的操作机制、缺陷及攻击过程。文章深入剖析了价格预言机系统的不足,以及如何通过闪电贷操纵价格,从而导致平台流动性被抽空。作者总结了漏洞的根源,并给出了改进建议,强调了独立安全审计的重要性。
Polter Finance 是一个去中心化、非托管的协议,旨在借贷数字资产。它使用流动性池,用户可以存入资产以赚取利息或以其抵押品进行借贷。该协议基于与 GEIST 平台相同的智能合约,该平台以前在 Fantom 区块链上运行,但进行了修改,例如禁用闪电贷以解决已知的安全漏洞。
该平台采用以 $POLTER 代币为中心的代币激励模型,向参与者分配代币,以提供流动性、借贷或质押。其机制包括动态利率调整、赚取奖励的归属以及保持偿付能力的清算系统,以确保借款者负责。是什么导致了 Polter Finance 系统的漏洞,这个问题是理解从该平台抽走1200万美元的攻击的核心。
存入 Polter Finance 的资产被汇集到每种代币类型的单一储备中。借款人从这些储备中获取流动性,借款人支付的利息在存款人和质押者之间分配。
借款人必须抵押资产以访问流动性。借贷限额由针对每种资产的贷款价值比率(Loan-to-Value, LTV)决定。例如,某项LTV为30%的资产允许借贷高达抵押品价值的30%。借款人的持仓通过“健康因子”进行监控,该因子指示他们贷款的偿付能力。
Polter 使用与每个资产池的使用率相关联的动态利率模型:
使用率 (U):
利率曲线:每个池有两段线性曲线。在最优使用点以下,利率缓慢增长,以鼓励借贷。超过此点,利率急剧上升以激励存款并减少借贷。
健康因子低于1的借款人变得有资格被清算:
健康因子计算:
清算机制:清算人偿还借款人的一部分债务,并索取相应价值的抵押品,以及处罚费用。
$POLTER 代币是协议激励结构的核心。代币根据参与指标分配,例如存款规模、借贷使用率和质押贡献。奖励经过3个月的归属期,以鼓励长期参与。
在深入了解攻击的细节之前,重要的是要强调 Polter Finance 团队的一个重大安全疏忽。该项目没有对其平台进行独立的安全审计,而是依赖于另一个项目 Geist Finance 的审计报告,这是他们所分叉的代码库。
在审计页面上,Polter Finance 表示:
尽管从一个信誉良好的项目分叉代码可以作为起点,但仅依赖原始项目的审计是远远不够的,原因有几个:
2024年11月16日,运行于 Fantom 网络上的去中心化借贷协议 Polter Finance 遭遇了一次重大攻击,导致约1200万美元的损失。攻击者利用去中心化金融中的常见漏洞:价格预言机操控。该攻击特别针对了 Polter Finance 对 SpookySwap V2 和 V3 流动性池中 BOO 代币价格数据的依赖。
通过执行闪电贷以操纵这些流动性池,攻击者人为地抬高了 BOO 代币的价格。这使得他们能够以最小的 BOO 数量作为抵押存入,并借出价值远高于实际抵押品价值的资产,最终有效地抽空多个借贷池。
要保护你的项目免受漏洞影响,你可以探索我们的 区块链安全服务。
核心问题源于 Polter Finance 定价预言机系统中的缺陷,这是 Polter Finance 黑客攻击的核心漏洞,特别是在 ChainlinkUniV2Adapter
合约中,该合约被 AaveOracle
使用。预言机未能验证重大价格波动,并且缺乏对闪电贷操控的保护措施。攻击者利用这一点:
攻击者通过从 SpookySwap 的 V2 和 V3 流动性池中提取大量闪电贷来启动攻击:
闪电贷是无需抵押的贷款,必须在同一交易中还款。它们通常用于套利机会,但如果没有适当的保护措施,也可能被用来操纵链上数据。
通过借入这些大量的 BOO 代币,攻击者暂时从池中移除了显著的流动性。这一举动严重减少了池中的 BOO 储备,导致代币配对的不平衡。
自动做市商 (AMM) 模型:
基于 AMM 的去中心化交易所(如 SpookySwap)中代币的价格由恒定乘积公式决定:
当储备 xxx(BOO 代币)因闪电贷显著减少时,BOO 相对于代币 B 的价格急剧上升,以维持恒定的 kkk。这导致了流动性池中 BOO 的价格被人为抬高。
利用被操控的现货价格,攻击者在 Polter Finance 的借贷池中仅存入 1 BOO 代币 作为抵押。
由于预言机中的逻辑缺陷,AaveOracle
使用的错误价格源将 1 BOO 代币评估为约 1.37 万亿 美元的被抬高价值,而不是其实际市场价值。
这使得攻击者拥有了过于高估的抵押品,从而能够借出大量资产。
ChainlinkUniV2Adapter
合约被用于获取当前的 BOO 代币价格。然而,它缺乏检查因闪电贷而导致的剧烈价格波动的保护措施。
该适配器中的 _fetchPrice
函数直接从流动性池中检索 BOO 的当前价格,而没有任何机制来检测或防止突然的价格操控。
getRoundData() 函数用于检索历史价格数据,但也未能验证重大价格变化。
它依赖于 _getPriceAndTimestamp()
,该函数仅返回当前的操控价格,而未对其合法性或与以前值的比较进行评估。此外,getRoundData()
使用硬编码的 answeredInRound
值,绕过动态价格验证机制。
因此,在返回前,没有验证操控的价格。此外,函数中的硬编码 answeredInRound = 2
值没有考虑价格数据是否对当前轮次准确,从而进一步允许错误价格未经检查地通过。
latestRoundData()
函数原本旨在返回最新的价格信息,但由于攻击者的闪电贷造成流动性转移,却提供了被抬高的虚假价格。它缺乏机制来验证检索到的价格(answer
)的准确性,未受操控。
getRoundData()
和 latestRoundData()
函数旨在保持 BOO 代币的定价一致和准确,但未能考虑闪电贷引发的重大价格偏差。攻击者通过提供最小的抵押,同时利用被抬高的价格源,来利用这一漏洞。
prevChainlink0Response 机制的目的是通过在 _chainlinkPriceChangeAboveMax
函数中比较当前价格与先前价格,以标记超过特定阈值的价格变化,但该函数无法有效运行,因为其硬编码 roundId
和历史价格数据无关,因此无法获取有效的前一价格:
然而,由于 getRoundData()
中硬编码的 roundId
,该机制无法获取有效的先前价格,使得比较无效,从而允许抬高的价格绕过预言机的检查。
roundId
:getRoundData()
函数始终返回 roundId
为 2
,导致无法通过递减 roundId
获取以往价格数据。roundId
始终为 2
,使用 _currentRoundId - 1
(结果为 1
)尝试获取前一轮数据时失败,因为适配器不支持获取 roundId
为 2
以外的数据。PriceFeedV2
合约中的 _chainlinkPriceChangeAboveMax
函数无法检测到因闪电贷操控所致的异常价格飙升。这一失误使得1 BOO 代币的人为抬高价格能够绕过预言机的检查,从而导致抵押品价值计算出错。
攻击者继续利用被抬高的抵押品借出wFTM 代币。通过维持操控价格,他们能够继续循环借贷,毫无阻碍地抽走流动性池中的资金。由于预言机合约无法检测这些重复的借贷,任由其价格验证逻辑失效。
攻击者最终利用 BOO 代币的被抬高价格借出 9,134,844 wFTM,截至目前约抽走了 1200万美元 从 Polter Finance 借贷池。
成功从 Polter Finance 借出资产后,攻击者随即偿还闪电贷。通过将借来的 BOO 代币归还至 SpookySwap V2 和 V3,他们恢复了流动性池的储备,并使 BOO 代币的价格恢复到其实际市场价值。闪电贷结清后,攻击者保留了借到的 wFTM 代币及在攻击中获得的其他资产。
针对 Polter Finance 的此次攻击源于重大的安全疏忽,主要是缺乏独立的安全审计。Polter Finance 没有对其平台进行全面审计,而是依赖 Geist Finance 的审计报告,后者是他们分叉的代码库。这一做法显然不够充足,因为即便是小的修改,例如禁用闪电贷功能,都可能引入新的漏洞。独立审计可能会识别出其预言机系统中的被利用的弱点。
要防止攻击,Polter Finance 应该在其价格预言机中实施强有力的验证机制。ChainlinkUniV2Adapter
合约缺乏对闪电贷导致的剧烈价格波动的保护措施。引入时间加权平均价格(TWAP)或使用可靠的价格源,如 Chainlink 提供的去中心化预言机网络,能够降低临时价格操控的影响。此外,负责提取价格数据的函数应包含检查机制,以比较新价格与历史数据,并拒绝异常值。
通过进行独立的安全审计,并提高其预言机的验证过程,Polter Finance 本可以发现并解决这些漏洞。这些措施将显著降低价格操控攻击的风险,从而保护协议和用户资产的安全。
Polter Finance 利用事件的直接后果是损失了约 1200万美元 的借贷池资金。这一重大财务损失影响了平台及其用户,导致用户资产大量缩水。由于这一严重的漏洞揭示了 Polter Finance 安全基础设施中的关键脆弱性,这可能会对用户信任产生负面影响,并损害该协议的声誉。这一事件可能使用户重新评估 Polter Finance 的安全性和可靠性。
在事件发生后,Polter Finance 迅速采取措施以减轻损失并与社区沟通。他们的反应包括几项关键步骤:
2. 联系攻击者:团队就此事件向个人发出了链上呼吁,旨在协商资金的归还或达成友好解决。
3. 与安全专家合作:Polter Finance 积极与网络安全机构合作,调查事件并寻求解决方案。
4. 法律行动:Polter Finance 就此次事件正式报案,并将此进展分享给了社区。
阅读我们的 Deltaprime DeFi 利用事件 和 Ronin Network 利用事件 文章,以便随时了解 DeFi 安全动态。
地址
- 原文链接: threesigma.xyz/blog/polt...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!