- beforeInitialize/afterInitialize
- beforeModifyPosition/afterModifyPosition
- beforeSwap/afterSwap
- beforeDonate/afterDonate
- 某个locker合约来自官方的代码库,或者由用户部署。在这种情况下,我们可以将交互视为通过路由器进行。
- 某个locker合约和 Hook 集成到同一个合约中,或由第三方实体控制。对于这种情况,我们可以将交互视为通过Hook进行。在这种情况下,Hook既扮演了locker合约的角色,又负责处理回调。
- 威胁模型 I:Hook 本身是良性的,但存在漏洞。
- 威胁模型 II:Hook 本身就是恶意的。
- 第一种 hook, 保管用户资金。在这种情况下,攻击者可能会攻击这个 hook 来转移资金,造成资产损失。
- 第二种 hook, 存储用户或其他协议依赖的关键状态数据。在这种情况下,攻击者可能会试图改变关键状态。当其他用户或协议使用错误状态时,可能会带来潜在风险。
- 首先,hook并未验证用户打算交互的资金池。这可能是一个含有虚假代币并执行有害逻辑的恶意资金池。
- 其次,一些关键的hook函数允许任意的外部调用。
- 托管型 Hook(Managed Hooks):hook 不是入口点。用户必须通过路由器(可能由 Uniswap 提供)与 hook 进行交互。
- 独立型 Hook(Standalone Hooks):hook 是入口点,允许用户直接与之交互。
- 可升级的代理(可以被直接攻击);
- 带有自毁逻辑。在联合调用 selfdestruct 和 create2 的情况下可能被攻击。