智能合约审计-tx.origin漏洞
2020年5月4日 星期一
描叙:tx.origin是solidity中的一个全局变量,它能够遍历调用栈并返回最初发送调用(或事务)的账户的地址,使用tx.origin变量进行身份验证,会导致合约受到网络钓鱼攻击。
核心问题:使用tx.origin全局变量绕过限制,获取一定的权限。
2020年5月4日 星期一
描叙:tx.origin是solidity中的一个全局变量,它能够遍历调用栈并返回最初发送调用(或事务)的账户的地址,使用tx.origin变量进行身份验证,会导致合约受到网络钓鱼攻击。
核心问题:使用tx.origin全局变量绕过限制,获取一定的权限。
2020年4月28日 星期二
描叙:程序在运行过程中,因为多个事件的次序异常而造成对同一系统资源的竞争访问,可能导致程序运行出错。
核心问题:检查是否存在多个并发执行的事件、多个事件需要共享访问相同的对象、某些需要对共享对象进行写操作。
2020年4月13日 星期一
描叙:智能合约开发中,在程序中使用随机数较好的伪随机数是很难的。很多看似无法被预言的随机数种子或变量,实际被预言的难度很低。
核心问题:一旦在智能合约中使用了随机性很差的随机数作为关键变量,就面临着随机数被预言的攻击风险。
2020年3月22日 星期日
描述:拒绝服务漏洞(DOS)智能合约无法按照设定的方式被调用
核心问题:智能合约中的拒绝服务是一个致命的漏洞,因为漏洞导致的拒绝服务一般为永久性的,无法恢复
2020年3月9日 星期一
描述:未检查低级别调用的返回值,在solidity中的低级别调用与其他函数调用不同,如果调用中发生了异常并不会将异常传递,而只是返回true或false。因此程序中必须对低级别调用的返回值进行检查,而不能期待其出错后促使整个调用回滚。
核心问题:对低级别调用的函数没有对返回值进行检查。
2020年1月15日 星期三
描述:变量在参与运算的过程中,运算结果超出了变量类型所能表示的范围,导致实际存储的计算结果出错
核心问题:非预期的整数溢出将导致智能合约运行出错,影响合约的可靠性和安全性
2020年1月11日 星期六
描述:以太坊智能合约中使用block.timestamp来向合约提供当前区块的时间戳,并且这个变量通常被用于计算随机数、锁定资金等。但是区块的打包时间并不是系统设定的,而是可以由矿工在一定的幅度内进行自行调整。因此,一旦时间戳使用不当,则会引起漏洞
核心问题:矿工操纵时间戳生成对自己有利的随机数,或者来解除合约的时间限制
2020年1月9日 星期四
描述:合约没有设置合理的访问控制模型,以及没有对合约有效的校验导致访问控制漏洞的发生
核心问题:public的恶意使用(本次案例合约为例)
2020年1月8日 星期三
描述:漏洞合约中某个函数中,使用call()方法发送eth,若eth的接收者为一个合约地址,则会触发该合约的fallback()函数。若该合约是攻击者的恶意合约,攻击者可以在fallback()函数中重新调用漏洞合约的上述函数,导致重入攻击
核心问题:重要的合约变量在“重入”的过程中没有被修改,从而绕过了限制