具有不受限制的操作的DoS:此漏洞首先从 Govern Mental 合约中观察到[7]。 未经检查的呼叫返回值:此漏洞也称为处理错误的异常。它有两个变体,称为gas-less 发送和unchecked发送。当不检查低级调用的返回值时会出现这种情况,即使函数调用抛出错误[8],执行也可能会继续。 未初始化的存储指针:回顾下,在Solidity中,合约状态变量始终从插槽0开始连续放置在存储中。对于复合局部变量(例如,struct,array或mapping),将引用分配给未占用的对象存储中的插槽以指向状态变量。 错误的构造函数名称:此漏洞最初是从Rubixi合约[9]中观察到的,该构造函数的名称不正确,它使任何人都可以成为合约的所有者。在Solidity 0.4.22版之前,声明与合约名称相同的函数被视为合约构造函数,该函数仅在创建合约时执行。 类型转换:此漏洞最早在[10]中发现。以Solidity语言编写的合约可以通过直接引用被调用方合约的实例来调用另一个合约。 过时的编译器版本:当合约使用过时的编译器时会发生,其中包含错误,因此使已编译的合约易受攻击。通过使用最新的编译器可以防止此漏洞。 简短地址:此漏洞最早在[11]中实现,并进行了广泛讨论。 以太币丢失给孤立地址:以太币失去到孤立发生在汇款时,以太坊仅检查接收者地址的长度不超过160位,而不检查接收者地址的有效性。 如果将钱发送到一个不存在的孤立地址,则以太坊会自动注册该地址,而不是终止交易。 由于该地址未与任何EOA或合约帐户相关联,因此没有人可以提取已转移的资金,这实际上是丢失的。 此漏洞是由EVM不能孤立保护引起的。 在撰写本文时,只能通过手动确保收件人地址的正确性来防止此漏洞。 调用堆栈深度限制:此漏洞是由EVM的执行模型不足引起的,并且已被EIP-150的硬分叉所消除,该硬叉重新定义了外部调用的耗油量规则,使其不可能达到1,024 in调用堆栈深度。 低估操作码:首先从两次DoS攻击中发现了此漏洞[12] [13]。 交易顺序依赖(又名前端运行):这是指并发性问题,即区块链的即将到来的状态取决于交易的执行顺序,但是由矿工决定。 时间依赖关系:当合约在执行关键操作(例如汇款)时将block.timestamp用作触发条件的一部分或作为可由恶意矿工操纵的随机性来源时,会发生此漏洞。该漏洞是由以太坊引起的,它只要求时间戳大于其母块的时间戳并且在当前时钟的900秒以内。 产生随机性:例如,许多赌博和彩票合约都是随机选择中奖者,通常的做法是根据一些初始私有种子(例如block.number,block.timestamp,block。难易度或blockhash)生成伪随机数。但是,这些种子由矿工完全控制,这意味着恶意矿工可以操纵这些变量使自己成为赢家。此漏洞是由可操纵的entropy源引起的。 (责任编辑:admin) |