自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(12)
  • 收藏
  • 关注

翻译 智能合约漏洞——链属性的弱随机性来源(Weak Sources of Randomness from Chain Attributes)

在以太坊中,某些应用程序依赖随机数生成来保证公平性。然而,以太坊中随机数的生成非常困难,有几个陷阱值得考虑。使用 block.timestamp、blockhash 和 block.difficulty 等链属性似乎是个好主意,因为它们通常会产生伪随机值。然而,以太坊是完全确定的,所有可用的链上数据都是公开的。链属性既可以预测也可以操纵,因此不能用于随机数生成。

2024-09-14 09:27:07 3

翻译 智能合约漏洞——意外的变量隐藏(Shadowing State Variables)

从上面示例可以看出SubContract继承自SuperContract,变量a被定义了两次不同的值。现在假设我们使用'a'来执行SubContract中的函数,从SuperContract中继承的功能将不再工作,因为'a'的值已被修改。为了避免这个漏洞,重要的是我们要检查整个智能合约系统的歧义性。检查编译器警告也很重要,因为只要它们在智能合约中,它们就可以标记这些歧义。在solidity中使用两次相同的变量是可能的,但有可能造成副作用,这在处理多个合约时尤其困难。

2024-09-14 09:24:19 127

翻译 智能合约漏洞——委托调用给不受信任的被调用者(Delegatecall to Untrusted Callee)

当用户A通过合约B来call合约C的时候,执行的是合约C的函数,上下文(Context,可以理解为包含变量和状态的环境)也是合约C的:msg.sender是B的地址,并且如果函数改变一些状态变量,产生的效果会作用于合约C的变量上。delegatecall是一种特殊的调用,当用户A通过合约B来delegatecall合约C的时候,执行的是合约C的函数,但是上下文仍是合约B的:msg,sender是A的地址,并且如果韩式改变一些状态变量,产生的效果会作用于合约B的变量上。

2024-09-14 09:21:53 4

翻译 智能合约漏洞——不支持操作码(Unsupported Opcodes)

像一些区块链zkSync Era,BNB Chain,Polygon,Optimism和Arbitrum兼容EVM和它的操作码。操作码支持在这些链中可能会有所不同。如果在智能合约开发和部署期间没有考虑到这一点,可能会导致错误和问题。

2024-09-14 09:17:54 7

翻译 智能合约漏洞——未检查返回值(Unchecked Return Values)

call()没有gas限制,最为灵活,是最提倡的方法;这样当没有检查返回值是,会出现一个常见的陷阱,因为开发人员希望失败是自动revert交易,但实际并没有。比如如果一个合约使用.send()而没有检查返回值,调用失败后仍会执行交易,这样会导致意想不到的行为。.call()和.send()在调用成功或失败是会返回一个bool值,所以这两种方法执行失败后不会revert,而是返回bool值false。在solidity中,开发者可能通过.send()、.call()、.transfer()来执行外部调用。

2024-09-14 09:12:31 3

翻译 智能合约漏洞——不安全的低级调用(Unsafe Low-Level Call)

在solidity中,你可以使用低级调用如:address.call(),address.callcode(),address.delegatecall()和address.send()。或者你可以使用合约调用如:ExternalContract.doSomething()。低级调用是有效地或任意地进行合约调用地好方法,但也要注意到它潜在的风险。

2024-09-14 09:07:27 2

翻译 智能合约漏洞——通过tx.origin授权(Authorization Through tx.origin)

tx.origin(原始交易发起者的外部地址)是一个全局变量,它返回发送交易的地址。重要的是千万不要使用tx.origin,因为另一个合约会使用fallback函数来调用你的合约并获得授权,授权地址存储在tx.origin中。如果有人现在欺骗你向TxAttackWallet合约地址发送ETH,攻击者可以检查tx.origin找到发送交易的地址来窃取你的资金。上述我们可以看出TxUserWallet通过tx.origin授权了transferTO()。

2024-09-12 18:09:41 21

翻译 智能合约漏洞——时间戳依赖(Timestamp Dependence)

当使用时间戳执行合约中的关键功能,特别是当操作涉及资金转移时,有三个主要考虑的因素。

2024-09-12 14:35:05 51

翻译 智能合约漏洞——整数上溢和下溢(Integer Overflow and Underflow)

在solidity中,整数类型有最大值和最小值。当整型变量的值超过可存储在该变量类型的最大值时,就会发生整数溢出。类似地,当整型变量的最小值低于该变量类型的最小值时,就会发生整数下溢。例如,uint8类型的最大值为255,当将256存入uint8类型时,会发生上溢,值被设置为0。当存储的值为257时,值被设置为1,以此类推。同样地,如果将-1存储在uint8类型变量中时,这个变量的值将被设置为255,这样会发生下溢。

2024-09-11 20:19:59 18

翻译 智能合约漏洞——重入漏洞(Reentrancy Vulnerability)

重入漏洞是调用外部合约时最严重的威胁之一,被调用的智能合约可能会夺取对操作流的控制,这意味着被调用的合约可以在当前智能合约中实施调用函数预料之外的更改。这种操作通常通过重定向控制流来实现,从而有效地将被调用方转换为调用方。这个循环可以重复,也就意味着恶意合约可以一次又一次地进入系统,这就是重入漏洞。

2024-09-09 21:08:54 86

翻译 智能合约漏洞——Gas不足攻击(Insufficient Gas Griefing)

假设forwarder以最小的gas调用forward,仅允许Relayer合约成功但由于gas费耗尽错误导致外部调用revert(gas足够交易执行但不够调用成功)。在这种情况下,用户的交易不会被执行且用户的签名是无效的。主要影响执行外部调用而不检查成功的返回值的智能合约。在这种攻击中,对手可能仅提供足够的gas来确保顶层函数执行成功,同时确保外部调用由于gas耗尽而失败。因此,一旦完成forward函数的执行,提交的数据在已执行的映射中被标记为已执行,从而防止任何人再次提交相同的数据。

2024-09-09 20:55:41 38

翻译 智能合约漏洞——悲伤攻击(Griefing Attack)

这里潜在的悲伤攻击是任何人都可以调用deposit函数和重置lastDeposit时间戳,这样会导致greifing攻击者往合约中存入很小的数额(1wei),这样会重置lastDeposit时间戳。攻击者可以在延迟期结束之前提交交易来重置时间戳实现悲伤攻击,或者攻击者可以抢先、预测和抢占受益人对withdraw函数的调用,从而创建一个更具效益的拒绝服务攻击。这类攻击通常与业务逻辑有关,旨在破环智能合约系统的运行,尽管攻击者无法直接获利,但会给智能合约的运行带来负面影响。

2024-09-08 21:05:43 30

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除