合约结构
问题报告
总计问题:

交易顺序
漏洞详情 修复建议

交易顺序依赖攻击

在以太坊中打包区块的矿工会选择哪些交易将包含在该区块中,攻击者可以观察事务池中是否存在可能包含问题解决方案的事务,从而获取数据并且操作打包交易。


递归调用
漏洞详情 修复建议

重入攻击

智能合约在进行外部调用时,这些外部调用可被攻击者劫持,通过回调函数迫使合约执行恶意代码"重新进入"合约。

漏洞详情 修复建议

拒绝服务

针对以太坊智能合约的DOS攻击,其目的就是使智能合约功能在一段时间或者永久无法正常运行,或者使智能合约中的Ether冻结永远无法提取。


错误编码
漏洞详情 修复建议

函数默认可见性

在合约代码中必须严格检查是否存在函数可见性为默认配置public。

漏洞详情 修复建议

整数溢出漏洞

在以太坊虚拟机(EVM)中为整数指定固定大小的数据类型,未检测用户输入直接带入执行计算,结果数字超出存储它们的数据类型允许的范围,导致安全漏洞。

漏洞详情 修复建议

未检查返回值

严格检查函数及执行语句的返回值。

漏洞详情 修复建议

存储变量未初始化

在合约中未初始化的外部指针(引用)会默认指向起始地址,如果不加以初始化,直接进行赋值,0地址上的状态变量就会被覆写,导致变量覆盖漏洞。

漏洞详情 修复建议

tx.origin的错误使用

在智能合约中使用tx.origin全局变量进行身份验证会使合约容易受到类似网络钓鱼的攻击。

漏洞详情 修复建议

Selfdestruct函数的错误使用

使用 selfdestruct() 函数可以无视目标合约中存在的任何代码,强制将 Ether 发送给任一目标合约,包括没有任何可支付函数的合约,这将导致拒绝服务等转账安全风险。

漏洞详情 修复建议

状态变量的默认可见性

合约中状态变量的默认可见性为public全部可见,不当的方法参数可能导致不安全的合约行为,为了避免这种情况,合同必须检查所有事务参数是否满足所需的先决条件。

漏洞详情 修复建议

错误的构造函数名

在合约中如果构造函数在声明时出错,构造函数将变成了一个普通函数,那么,合约将存在重大安全风险。

漏洞详情 修复建议

assert使用错误

在合约中使用错误的异常处理将导致交易失败风险。

漏洞详情 修复建议

使用废弃函数

在合约中使用新版本编译器不推荐或者不支持的函数方法和运算符将导致编译错误或者安全问题 。

漏洞详情 修复建议

影子变量

在复杂的合约系统中,不同合约可以继承相同名称的状态变量,如果使用不当,将导致安全问题产生。


盗币风险
漏洞详情 修复建议

以太币任意提取

由于访问控制设计缺陷或不足,攻击者可以从合约账户任意提取以太币。

漏洞详情 修复建议

签名重放

有时需要在智能合约中执行签名验证,以实现更好的可用性或节省gas, 恶意用户可以在没有签名验证的情况下攻击合约,并获得由多次处理的另一个用户发送的消息事务从而导致消息重放。

漏洞详情 修复建议

重复转账

由于合约的设计缺陷,攻击者可重复转账,造成资产损失。


危险输入
漏洞详情 修复建议

恶意合约调用

delegatecall函数方法允许智能合约在运行时从不同的地址动态加载代码,当调用恶意的合约时将导致安全威胁。

漏洞详情 修复建议

时间戳依赖

智能合约通常需要访问当前时间戳以触发与时间相关的事件,但是区块的时间戳可被修改,所以开发人员不应该依赖时间戳进行相关事件处理。

漏洞详情 修复建议

错误的签名验证

如果签名是签名消息散列的一部分,则在合同级别执行签名验证的系统可能容易受到攻击。 恶意用户可以创建有效签名以重放先前签名的消息。

漏洞详情 修复建议

随机数缺陷

在以太坊中创建足够强大的随机性源是非常具有挑战性的,因为旷工可对其进行监控和修改,使用`blockhash`,`block.difficulty`和其他字段也是不安全的。