【ERC20安全审计】——23、条件竞争漏洞刨析

文章前言

以太坊节点汇集交易并将其形成块,一旦矿工解决了共识机制那么这些交易就被认为是有效的,解决该区块的矿工也会选择来自该矿池的哪些交易将包含在该区块中,至于优先选取那些交易打包通常是由gasPrice交易决定的,在这里有一个潜在的攻击媒介就是攻击者可以观察事务池中是否存在可能包含问题解决方案的事务,如果存在那么可以通过修改或撤销攻击者的权限或更改合约中的对攻击者不利的状态,从这个事务中获取数据并创建一个更高级别的事务gasPrice并在原始之前将其交易包含在一个区块中,从而获利

条件竞争

下面给出一个示例合约:

contract FindThisHash {
    bytes32 constant public hash = 0xb5b5b97fafd9855eec9b41f74dfb6c38f5951141f9a3ecd7f44d5479b630ee0a;

    constructor() public payable {} // load with ether

    function solve(string solution) public {
        // If you can find the pre image of the hash, receive 1000 ether
        require(hash == sha3(solution)); 
        msg.sender.transfer(1000 ether);
    }
}

这个合约包含1000个ether,找到并提交正确答案的用户将得到这笔奖励,当一个用户找出答案并调用solve函数把答案作为参数发起函数调用,然而不幸的是攻击者可以观察交易池中任何人提交的答案,他们看到这个解决方案后检查它的有效性,然后提交一个远高于原始交易的gasPrice的新交易,解决该问题的矿工可能

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

FLy_鹏程万里

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值