Page 352 - 《软件学报》2026年第1期
P. 352
揭晚晴 等: 智能合约与 DeFi 协议漏洞检测技术综述 349
智能合约层漏洞: 智能合约是构成 DeFi 协议的基础, 其漏洞是指合约代码本身存在的缺陷. 智能合约层漏洞
的具体类型包括状态转换类漏洞、编码错误类漏洞、访问控制类漏洞和数值计算类漏洞.
DeFi 协议层漏洞: DeFi 协议由一组合约组成, 其漏洞与 DeFi 应用及其场景特性密切相关. DeFi 协议层漏洞
的具体类型包括价格操纵漏洞、辅助工具漏洞、权限控制漏洞和治理漏洞.
2.1 智能合约层漏洞类型
根据智能合约执行过程中不同的安全需求和常见攻击向量, 本文将智能合约层的漏洞特征归纳为 25 种主要
的漏洞类型, 并将这些漏洞类型按其表现形式分为 4 类, 包括状态转换与调用安全、编码错误、访问控制和业务
逻辑. 其中, 状态转换与调用安全、编码错误以及访问控制均为智能合约传统安全漏洞, 而业务逻辑则为智能合约
业务逻辑漏洞. 我们将漏洞分类、漏洞类型、漏洞描述和相应的检测工具整理在表 1 中.
表 1 智能合约层漏洞与检测工具
漏洞分类 漏洞名称 漏洞描述 检测工具来源于以下文献
操作码定价不当, 导致智能合约在执行时消耗的Gas过低,
定价不当的操作码 暂无检测工具, 定义见[29]
增加了潜在的攻击面
由于编译器版本过时、本身的缺陷或误操作, 导致生成字
编译器错误 [30–32]
节码时引入缺陷
当函数将区块时间戳作为执行关键操作的条件时, 攻击者
时间戳依赖漏洞 [5,30,33–43]
操控时间戳来影响合约行为
合约执行过程中递归调用或深度链式调用超过了EVM允
调用栈溢出漏洞 [44,45]
许的调用栈深度限制
通过消耗智能合约的资源 (如计算、存储或Gas), 使合约
拒绝服务漏洞 [36,46–49]
无法正常处理其他用户的请求
直接调用未经验证或不可信的合约, 导致意外的行为或被
状态转换 直接调用不可信的合约 [50]
攻击
对外部合约函数存在递归调用, 导致合约的资金被多次转
重入漏洞 [33,34,37–43,49,51–55]
出或状态被不正确地多次更改
合约A可以在其当前执行环境中执行合约B的代码, 导致
委托调用漏洞 [30,33,37,38,40,56–58]
合约A的状态和权限等被恶意篡改
Tx.Origin验证漏洞 使用Tx.Origin作为智能合约身份验证依据, 导致授权不当 [32,36,39,40,42,47,59,60]
由于状态变量之间的相互关联性, 开发者在更新一个变量
不一致状态更新 时可能会忘记同步更新关联变量或更新错误, 导致统计错 [54,61,62]
误或资金损失
业务流程未确保必要的业务级原子性, 导致并发操作对相
原子性违规 [54,62]
同状态变量产生冲突
未能正确处理执行过程中出现的异常情况, 导致合约逻辑
异常处理不当 [30,37,39,40,46,52,63–67]
中断、状态不一致或资金损失
由于编码错误, 合约中的资产被意外锁定或冻结, 无法正
资产锁定或冻结 [35,38,40,57,66,68,69]
常使用
缺乏编码逻辑或 缺乏必要的逻辑验证或一致性检查, 导致不合理的操作或 [59,64,65,68–70]
一致性检查 被攻击
发送少于20字节的地址, 而合约代码没有进行长度检查,
短地址漏洞 暂无检测工具, 定义见[71]
导致交易参数错误地解析和拼接
编码错误
未知函数调用漏洞 没有正确实现fallback函数或没有妥善处理未定义的调用, [47,72]
导致资金丢失或非预期调用
存在未限制执行次数或消耗大量Gas的循环或递归操作,
无界或Gas费用高的操作 [5,42,45,54,57,69,73,74]
导致交易因超出Gas限制而失败
由于错误地使用或处理数据类型, 导致程序行为不符合预
类型混乱漏洞 [47,75]
期的漏洞
将一种数据类型错误地转换为另一种不兼容的类型, 从而
类型转换错误 [49,54,65]
导致程序行为异常

