Ruaro N, Gritti F, Meng D, et al. Approve Once, Regret Forever: On the Exploitation of Ethereum’s Approve-TransferFrom Ecosystem[C]//34th USENIX Security Symposium (USENIX Security 25). USENIX Association, 2025: 1281-1298.
在以太坊的 DeFi 生态中,用户为了使用借贷、交易等服务,通常需要授权(approve)第三方合约代为管理自己的代币。然而,一旦被授权的合约存在漏洞,攻击者不仅可以窃取合约本身持有的资产,还能盗走所有曾授权该合约的用户资产。发表于 USENIX Security 2025 的这项研究,系统性地揭示了这类被称为 ACT(Approved Controllable TransferFrom)的漏洞,并提出了端到端的检测与利用生成系统 OSPREY,在整个以太坊生态中发现了超过 340 万美元潜在风险。
一、研究背景:Approve-TransferFrom 机制的信任困境
ERC20 等代币标准引入了授权机制来支持间接代币转移。代币持有者调用 approve 函数,允许某个”消费者”(spender)地址代为转移一定数量的代币;消费者随后可通过 transferFrom 函数将代币从授权者账户转出。这一机制是 DeFi 协议(如借贷平台、去中心化交易所)正常运作的基础——用户无需将资产直接转入协议合约,降低了因协议被攻破而导致全部资产丢失的风险。
但授权机制本身带来了新的攻击面。如果被授权的合约包含一个可被攻击者操纵的外部调用(CALL 指令),攻击者可以迫使该合约向任意代币合约发起 transferFrom 调用,将授权用户的代币转移到攻击者钱包。这就是 ACT 漏洞的核心:被信任的”代理人”被攻击者操纵成了”糊涂代理”(confused deputy)。自 2020 年以来,至少有 22 起公开攻击事件利用了此类漏洞,造成超过 6500 万美元的损失。
二、问题定义:ACT 漏洞的三个必要条件
论文明确定义了 ACT 漏洞需要同时满足的三个条件:
(R1)该合约必须曾被至少一个代币授权为消费者。
(R2)该合约必须包含一个(部分)可控的函数调用,攻击者能够操纵该调用使其执行有效代币的 transferFrom 函数,将非攻击者用户的代币转移到攻击者地址。
(R3)该可控函数调用能被任意区块链用户成功执行,即不受访问控制保护。
这一定义的关键在于”部分可控”——不同于以往研究关注所有参数均可控的通用任意调用漏洞,ACT 漏洞中攻击者可能只需要控制关键参数的有限部分即可实施攻击。
三、OSPREY 系统架构:五阶段检测流水线
OSPREY 采用静态分析、符号执行和具体执行相结合的方法,构建了五阶段检测流水线。
第一阶段(授权过滤):通过分析以太坊历史交易中的 ERC20 Approval 事件日志,重建所有曾获得代币授权的合约集合。论文共收集了超过 7800 万条授权事件,识别出 424,676 个曾作为消费者的账户。
第二阶段(链下可控性分析):使用符号执行引擎对授权合约进行分析,在完全符号化的区块链环境下,判断合约中是否存在可被操纵为 transferFrom 调用的 CALL 指令。分析对调用目标、函数选择器、from/to/value 参数施加约束条件,识别出 32,582 个候选合约。
第三阶段(链上可控性验证):在具体的区块链状态下,结合符号执行与具体执行验证漏洞是否真实可利用。为了处理实际执行中的复杂场景,OSPREY 设计了两个关键机制——合成受害用户(自动部署具有代币余额和授权的测试账户)和合成辅助合约(当辅助合约地址可控时,根据符号约束自动生成返回预期值的合约)。最终确认 410 个合约确实存在可利用的 ACT 漏洞。
第四阶段(漏洞利用生成):结合第一阶段获取的授权信息和第三阶段的成功攻击路径,为每个脆弱合约自动生成针对所有受影响用户的概念验证攻击。
第五阶段(影响评估):通过 Uniswap 交易所估算被盗资产的市场价值。
对于无法自动生成利用但仍可能存在风险的合约,OSPREY 根据执行中止的位置区分高置信度警告(执行到达 transferFrom 之后才中止)和低置信度警告(执行在到达 transferFrom 之前中止),为人工审计提供优先级指引。

四、实验结果:大规模检测与已知攻击验证
在全量以太坊分析中,OSPREY 从 424,676 个授权合约出发,经过逐层过滤,最终确认 410 个合约存在可利用的 ACT 漏洞,自动生成了 778 个完整的概念验证攻击,涉及 120 种不同代币和 275 个受害授权者,潜在财务影响超过 340 万美元。其中最严重的单个漏洞影响达 140 万美元。
在已知攻击数据集上,论文收集了 14 起真实 ACT 攻击事件。OSPREY 成功检测到其中 13 起(1 起因符号分析超时未能检测),为 5 起自动生成了完整利用,为其余 8 起发出了高或低置信度警告。值得注意的是,OSPREY 自动生成的最优攻击方案在多个案例中发现了比真实攻击者多盗取 570 万美元资产的机会,说明实际攻击者并未充分利用漏洞。
与现有工具 PrettySmart 和 JACKAL 的对比表明,OSPREY 在检测效果上大幅领先。PrettySmart 仅通过静态污点分析标记潜在可控调用,误报率高达 92%;JACKAL 仅检测所有参数均可控的调用,覆盖面有限。OSPREY 通过对 ACT 场景的专门建模和部分可控性分析,在检测数量和验证能力上均表现出显著优势。
五、拓展性:ERC721 与 Permit2
论文进一步验证了 OSPREY 的方法对其他代币标准和授权机制的适用性。
针对 ERC721(NFT)标准的分析发现了 18 个存在可利用 ACT 漏洞的合约,其中 17 个在撰写论文时仍可被利用。针对 Uniswap 的 Permit2 授权机制的分析同样发现了 1 个可利用的脆弱合约。这证明了 OSPREY 的方法论可以推广到任意具有授权机制的代币标准。
六、总结与启示
这项研究揭示了以太坊 approve-transferFrom 生态中一个被低估但影响深远的安全问题。用户的一次授权操作,可能在未来某个时刻因被授权合约的漏洞而导致资产被盗——真正是”授权一次,后悔终生”。OSPREY 系统通过将链上授权状态分析与程序分析深度结合,实现了从漏洞发现到利用生成的全自动化,为 DeFi 生态的安全审计提供了重要工具。对于普通用户而言,定期检查和撤销不必要的代币授权仍然是保护资产安全的基本操作。
论文链接:https://www.usenix.org/conference/usenixsecurity25/presentation/ruaro
代码仓库:https://github.com/ucsb-seclab/osprey