# 由于捐赠后，用户账本的健康状态符合清算条件

By [Euler Financ](https://paragraph.com/@euler-financ) · 2023-04-14

---

4 月 4 日，Euler Labs 在推特上表示，经过成功协商，攻击者已归还了所有盗取资金。

**漏洞分析**

在本次攻击中，Etoken 合约的 donateToReserves 函数没有正确检查用户实际持有的代币数量和捐赠后用户账本的健康状态。攻击者利用这个漏洞，捐赠了 1 亿个 eDAI，而实际上攻击者只质押了 3000 万个 DAI。

由于捐赠后，用户账本的健康状态符合清算条件，借贷合约被触发清算。清算过程中，eDAI 和 dDAI 会被转移到清算合约。但是，由于坏账额度非常大，清算合约会应用最大折扣进行清算。清算结束后，清算合约拥有 310.93 M 个 eDAI 和 259.31 M 个 dDAI。

此时，用户账本的健康状态已恢复，用户可以提取资金。可提取的金额是 eDAI 和 dDAI 的差值。但池子中实际上只有 3890 万 DAI，所以用户只能提取这部分金额。

**事件概要**

2 月 1 日，加密协议 BonqDAO 遭到价格操控攻击，攻击者铸造了 1 亿个 BEUR 代币，然后在 Uniswap 上将 BEUR 换成其他代币，ALBT 价格下降到几乎为零，这进一步引发了 ALBT 宝库的清算。按照黑客攻击时的代币价格，损失高达 8800 万美元，但是由于流动性耗尽，事件实际损失在 185 万美元左右。

**漏洞分析**

本次攻击事件攻击者共进行了两种方式的攻击，一种是控制价格大量借出代币，另一种是控制价格清算他人财产从而获利。

BonqDAO 平台采用的预言机使用函数 ‘getCurrentValue’ 而不是 ‘getDataBefore’。

黑客通过质押 10 个 TRB 代币（价值仅约 175 美元）成为了价格报告者，并通过调用 submitValue 函数修改预言机中 WALBT 代币的价格。价格设置完成之后，攻击者调用 Bonq 合约的 createTrove 函数，创建 trove 合约，并向该合约中抵押了 0.1 个 WALBT 代币进行借款操作。正常来说，借款额度应该是小于 0.1 个 WALBT 的价格，从而保证抵押率维持在一个安全的范围，但是在本合约的借贷过程中，计算抵押物价值的方式是通过 TellorFlex 合约来进行实现的。而在上一步，攻击者已经把 WALBT 价格拉得异常高，导致攻击者在本次借款中，借出了 1 亿枚 BEUR 代币。

攻击者在第二笔交易中将 WALBT 价格设置得异常低，从而使用少量的成本将其他用户所抵押的 WALBT 代币清算出来。

事件概要

2 月 17 日，Avalanche平台的 Platypus Finance 因函数检查机制问题遭到攻击，损失约 850 万美元。然而攻击者并没有在合约中实现提现功能，导致攻击收益存放在攻击合约内无法提取。

2 月 23 日，Platypus 表示，已经联系了 Binance 并确认了黑客身份，并表示将至少向用户偿还 63% 的资金。

2 月 26 日，法国国家警察已经逮捕并传唤了两名攻击 Platypus 的嫌疑人。

漏洞分析

攻击原因是 MasterPlatypusV 4 合约中的 emergencyWithdraw 函数检查机制存在问题，仅检测了用户的借贷额是否超过该用户的 borrowLimitUSP（借贷上限），而没有检查用户是否归还债务的情况。

攻击者首先通过 AAVE 合约闪电贷借出 4400 万枚的USDC存入 Pool 合约中，然后 mint 了 4400 万枚 LP-USDC。接着攻击者调用 borrow 函数借出了 4179 万枚 USP，下一步立马调用了 EmergencyWithdraw 函数。

Beosin：2023年Q1全球Web3区块链安全态势报告

在 EmergencyWithdraw 函数中有一个 isSolvent 函数来验证借贷的余额超过可借贷最大值，返回 true 就可以进入 transfer 操作，而没有考虑验证负债金额是否已经偿还的情况。所以攻击者可以在没有偿还债务的情况下直接调用成功提取出之前质押的 4400 万枚 LP-USDC。

事件概要

2 月 17 日，Avalanche平台的 Platypus Finance 因函数检查机制问题遭到攻击，损失约 850 万美元。然而攻击者并没有在合约中实现提现功能，导致攻击收益存放在攻击合约内无法提取。

2 月 23 日，Platypus 表示，已经联系了 Binance 并确认了黑客身份，并表示将至少向用户偿还 63% 的资金。

2 月 26 日，法国国家警察已经逮捕并传唤了两名攻击 Platypus 的嫌疑人。

漏洞分析

攻击原因是 MasterPlatypusV 4 合约中的 emergencyWithdraw 函数检查机制存在问题，仅检测了用户的借贷额是否超过该用户的 borrowLimitUSP（借贷上限），而没有检查用户是否归还债务的情况。

攻击者首先通过 AAVE 合约闪电贷借出 4400 万枚的USDC存入 Pool 合约中，然后 mint 了 4400 万枚 LP-USDC。接着攻击者调用 borrow 函数借出了 4179 万枚 USP，下一步立马调用了 EmergencyWithdraw 函数。

Beosin：2023年Q1全球Web3区块链安全态势报告

在 EmergencyWithdraw 函数中有一个 isSolvent 函数来验证借贷的余额超过可借贷最大值，返回 true 就可以进入 transfer 操作，而没有考虑验证负债金额是否已经偿还的情况。所以攻击者可以在没有偿还债务的情况下直接调用成功提取出之前质押的 4400 万枚 LP-USDC。

---

*Originally published on [Euler Financ](https://paragraph.com/@euler-financ/4KIqXxJKaV0xL0Dz2ejF)*
