Skip to content

Commit e036114

Browse files
committed
Add study notes for 2025-08-14
1 parent 0f5011e commit e036114

1 file changed

Lines changed: 102 additions & 0 deletions

File tree

Free-EntropyMXZ.md

Lines changed: 102 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,108 @@ web3初学者,做过一些学习项目,涉及defi,zkp,web3+ai,希望
1515
## Notes
1616

1717
<!-- Content_START -->
18+
# 2025-08-14
19+
20+
# Web3 审计课程总结:重要漏洞发现
21+
22+
以下是对Web3审计课程中讨论的三个关键漏洞(Incorrect Fee Structure、DoS Dividends、Swap Margin)的总结,基于讲者的思路,梳理问题本质、攻击路径、影响及解决方案。全程用中文,确保清晰易懂。
23+
24+
## 1. Incorrect Fee Structure(不正确的费用结构)
25+
26+
### 问题描述
27+
28+
在Key Finance协议中,奖励复合(reward compounding)机制存在漏洞,允许攻击者通过三明治攻击(sandwich attack)窃取质押奖励。核心问题是:
29+
30+
- **无费用或锁定期**:质押和取消质押无需成本或时间限制。
31+
- **奖励分配基于瞬时快照**:奖励通过`updateAllRewards`函数更新,分配按调用时的质押比例计算,不考虑质押时间。
32+
33+
### 攻击路径
34+
35+
攻击者(如Bob)监控mempool,在奖励更新前一刻质押大额资金(例如10000 GMX Key),获取奖励后立即取消质押并卖出。例如:
36+
37+
- Alice质押100(持续一周),Bob质押10000(仅1秒)。
38+
- 总质押10100,产生1%利润(101单位奖励)。
39+
- Alice得:101 \* (100/10100) ≈ 1单位;Bob得:101 \* (10000/10100) ≈ 100单位。
40+
41+
Bob贡献极少(仅1秒),却拿走99%奖励,严重稀释长期质押者(如Alice)的收益。
42+
43+
### 影响
44+
45+
- **奖励稀释**:长期质押者的收益被短期投机者抢夺,破坏激励机制。
46+
- **无风险套利**:攻击者无需承担资产价格风险,成本极低。
47+
- **协议吸引力下降**:用户因收益低而失去质押动力,可能导致流动性不足。
48+
49+
### 解决方案
50+
51+
- **锁定期**:要求质押持续一定时间(如7天)。
52+
- **收取费用**:对质押/取消质押加费用,增加攻击成本。
53+
- **时间加权奖励**:奖励按质押时间\*金额分配,类似“points per share”模型。
54+
- **平滑奖励更新**:奖励随时间累积(如GMX的P&L计算),避免阶梯式更新。
55+
56+
## 2. DoS Dividends(分红机制的DoS攻击)
57+
58+
### 问题描述
59+
60+
协议的`distributeDividends`函数使用无界for循环遍历`users`数组,为每个用户分配分红。攻击者可通过创建大量地址(每个mint 1 wei)无限膨胀`users`数组,导致分红函数gas超限,交易失败。
61+
62+
### 攻击路径
63+
64+
- **添加用户**`mint`函数在余额为0时将地址push到`users`数组。
65+
- **膨胀数组**:攻击者创建数千地址,分别mint 1 wei,使数组巨大。
66+
- **触发DoS**:调用`distributeDividends`时,循环遍历所有用户,耗尽block gas limit。
67+
68+
### 影响
69+
70+
- **协议瘫痪**:分红无法分发,影响正常用户。
71+
- **用户信任下降**:协议功能受阻,可能导致用户流失。
72+
73+
### 解决方案
74+
75+
- **Points per Share模型**:不逐个计算用户分红,用全局`dividendPerToken`记录每token分红。
76+
- 计算公式:`dividendPerToken = totalDividends / totalSupply`
77+
- 用户领取:`balance * (currentDividendPerToken - userLastDividendPerToken)`
78+
- **优势**:只需更新单一存储变量,适用于所有持有者,避免循环。
79+
80+
## 3. Swap Margin(交换保证金操纵AMM)
81+
82+
### 问题描述
83+
84+
在IVX期权协议中,`swapMargin`函数允许用户在portfolio中将保证金(如USDC)换成另一支持token(如DAI),但未验证交换后position是否可清算(liquidatable)。攻击者可通过Uniswap交换,指定极低amountOut并三明治自己,抽取portfolio几乎所有价值。
85+
86+
### 攻击路径
87+
88+
- 用户卖期权给AMM,收取premium。
89+
- 调用`swapMargin`,在Uniswap交换保证金,指定amountOut=0,前跑/后跑自己,抽取价值。
90+
- 重复操作,提取99%保证金,留下破产position,协议清算时承担损失。
91+
92+
### 影响
93+
94+
- **资金流失**:攻击者拿走保证金+premium,协议损失资金。
95+
- **不公平机制**:攻击者在亏损时撤回保证金,盈利时正常关闭,形同“无风险”操作。
96+
- **协议风险**:清算破产position导致流动性池受损。
97+
98+
### 解决方案
99+
100+
- **后置验证**:交换后检查position是否可清算,若是则revert。
101+
- **限制amountOut**:确保交换输出足够维持position健康。
102+
- **类比perpetuals**:类似GMX,需确保用户不能主动使position破产。
103+
104+
## 总结
105+
106+
这三个漏洞反映了DeFi协议设计中的常见问题:
107+
108+
- **Incorrect Fee Structure**:缺少费用或锁定期,导致奖励分配不公。
109+
- **DoS Dividends**:无界循环使协议易受gas攻击。
110+
- **Swap Margin**:缺少后置验证,允许用户操纵保证金提取。
111+
112+
审计时需关注:
113+
114+
- 奖励机制是否考虑时间权重。
115+
- 循环是否可被膨胀。
116+
- 用户操作是否可能导致协议损失。
117+
118+
通过引入锁定期、费用、时间加权模型、单一存储变量或后置验证,可有效防范这些漏洞。
119+
18120
# 2025-08-13
19121

20122
# Web3 升级模式与 Eternal Storage 学习笔记

0 commit comments

Comments
 (0)