币安BSC智能链发币教程——AVE检测合约带有隐藏owner漏洞的修复方式【pdf+视频BSC发币教程下载】

  • A+
所属分类:币安BSC
摘要

AVE检测合约带有隐藏owner漏洞的修复方式


chatGPT账号

bsc2023021610

一、说明

合约部署完成并添加完流动性以后,在ave执行合约安全性检测时,检测结果显示合约有隐藏owner安全性漏洞。出现该问题原因目前主要有两个,第一个是隐藏owner角色,第二个是二级owner权限:

1、隐藏owner角色是指合约部署完成后可以通过setowner接口设置一个另外的owner角色,然后放弃合约所有权后通过角色权限来实现onlyowner操作。

2、在owner以外还引入了二级owner权限,放弃合约所有权以后还可以通过二级owner实现onlyowner要求的操作质量。

二、合约代码漏洞

1、隐藏owner角色的主要代码漏洞如下:

// SPDX-License-Identifier: MIT
pragma solidity ^0.6.12;

import "./Context.sol";

contract Ownable is Context {
    address public _owner;
    mapping(address => bool) private _roles;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    constructor () internal {
        _owner = _msgSender();
        _roles[_msgSender()] = true;
        emit OwnershipTransferred(address(0), _msgSender());
    }

    function owner() public view returns (address) {
        return _owner;
    }

    modifier onlyOwner() {
        require(_roles[_msgSender()]);
        _;
    }

    function renounceOwnership() public onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _roles[_owner] = false;
        _owner = address(0);
    }

    function transferOwnership(address newOwner) public onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _roles[_owner] = false;
        _roles[newOwner] = true;
        _owner = newOwner;
    }

    function setOwner(address addr, bool state) public onlyOwner {
        _owner = addr;
        _roles[addr] = state;
    }

}

setOwner后再次执行onlyowner验证校验时,校验的是角色权限而不是地址权限。这样就可以保留隐藏的owner漏洞。

 

2、二级owner权限代码漏洞

modifier onlyFunder() {
        require(owner() == msg.sender || fundAddress == msg.sender, "BEP20: caller is not owner or Funder");
        _;
    }

除了owner权限以为还保留了funder权限,也就是所谓的二级权限。在放弃合约所有权后仍然可以通过funder权限来实现onlyowner的操作要求。

三、漏洞解决方案

取消隐藏owner角色权限,通过以下ownerable合约验证owner地址而非角色权限

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.14;

import "./Context.sol";

contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

至此,完成AVE检测合约带有隐藏owner漏洞的修复方式所有操作流程。

pdf+视频币安智能链BSC发币教程及多模式组合合约源代码下载:

币安智能链BSC发币(合约部署、开源、锁仓、LP、参数配置、开发、故障处理、工具使用)教程下载:

币安BSC智能链发币教程——AVE检测合约带有隐藏owner漏洞的修复方式【pdf+视频BSC发币教程下载】币安BSC智能链发币教程——AVE检测合约带有隐藏owner漏洞的修复方式【pdf+视频BSC发币教程下载】币安BSC智能链发币教程——AVE检测合约带有隐藏owner漏洞的修复方式【pdf+视频BSC发币教程下载】币安BSC智能链发币教程——AVE检测合约带有隐藏owner漏洞的修复方式【pdf+视频BSC发币教程下载】币安BSC智能链发币教程——AVE检测合约带有隐藏owner漏洞的修复方式【pdf+视频BSC发币教程下载】

多模式(燃烧、回流指定营销地址、分红本币及任意币种,邀请推广八代收益,LP加池分红、交易分红、复利分红、NFT分红、自动筑池、动态手续费、定时开盘、回购)组合合约源代码下载:

币安BSC智能链发币教程——AVE检测合约带有隐藏owner漏洞的修复方式【pdf+视频BSC发币教程下载】币安BSC智能链发币教程——AVE检测合约带有隐藏owner漏洞的修复方式【pdf+视频BSC发币教程下载】

pdf+视频币安智能链BSC发币教程及多模式组合合约源代码下载地址:

此处为隐藏的内容!
登录后才能查看!

添加VX或者telegram获取全程线上免费指导

币安BSC智能链发币教程——AVE检测合约带有隐藏owner漏洞的修复方式【pdf+视频BSC发币教程下载】
免责声明

免责声明:

本文不代表知点网立场,且不构成投资建议,请谨慎对待。用户由此造成的损失由用户自行承担,与知点网没有任何关系;

知点网不对网站所发布内容的准确性,真实性等任何方面做任何形式的承诺和保障;

网站内所有涉及到的区块链(衍生)项目,知点网对项目的真实性,准确性等任何方面均不做任何形式的承诺和保障;

网站内所有涉及到的区块链(衍生)项目,知点网不对其构成任何投资建议,用户由此造成的损失由用户自行承担,与知点网没有任何关系;

知点区块链研究院声明:知点区块链研究院内容由知点网发布,部分来源于互联网和行业分析师投稿收录,内容为知点区块链研究院加盟专职分析师独立观点,不代表知点网立场。

本文是全系列中第167 / 237篇:通证发行

  • 我的微信
  • 这是我的微信扫一扫
  • weinxin
  • 我的电报
  • 这是我的电报扫一扫
  • weinxin
chatGPT账号
知点

发表评论

您必须登录才能发表评论!