ETH Kipu
  • Ethereum Developer Pack
  • Módulo 1
    • Intro a Smart Contracts
      • Fundamentos de Blockchain
        • Antecedentes
        • Bitcoin
        • Qué es Blockchain
        • Conceptos Clave en Blockchain
        • Cómo funciona la Blockchain
        • Tipos de Blockchain
        • Modelos de Consenso
      • El nuevo Internet
        • Web 3
        • Elementos Fundamentales
        • Impacto de Ethereum en Diversos Sectores
      • Wallets
        • Componentes de una wallet
        • Tipos de Wallet
        • Códigos mnemónicos
      • Ethereum 101
        • Smart Contracts
        • Cuentas
          • Tipos de cuentas
          • Contenido de cuentas
        • Transacciones
          • Componentes
          • Ciclo de vida
        • Gas
        • Solidity
        • EVM
          • La máquina de estados
          • Opcodes
          • Cómo funciona la EVM
          • Clientes de ejecución
          • DApps
      • Blockchain Explorer
        • Funciones de un blockchain explorer
        • Beneficios de utilizar un blockchain explorer
      • Remix
        • Características de Remix
        • Workspaces o espacios de trabajo
        • Cargar y compilar un contrato
        • Desplegar en la máquina virtual de Remix (Remix VM)
        • Interactuando con funciones
        • Desplegar en una red pública
      • Crea tu primer Smart Contract
  • Módulo 2
    • Fundamentos de Solidity
      • Hello World
      • Tipos de Datos
      • Funciones
      • Variables
        • Ejercicio 1
      • Operadores
        • Ejercicio 2
      • Constructor
        • Ejercicio 3
      • Convenciones de nomenclatura
      • Tipos de almacenamiento para variables
      • Estructuras de Control
        • Ejercicio 4
      • Modificadores
      • Eventos
        • Ejercicio 5
      • Tipos de Referencia
        • Arrays
          • Ejercicio 6
        • Mappings
          • Ejercicio 7
        • Structs
          • Ejercicio 8
      • Address Payable
      • Cómo reciben Ether los contratos y funciones
      • Transferencias de Ether
      • Conceptos Avanzados
        • Codificación ABI
        • Hashing
        • This
        • Herencia
        • Abstract
        • Interface
        • Llamadas entre contratos
        • EVM
        • ABI
        • Bytecode
        • Opcodes
  • Módulo 3
    • Estándares, Librerías y Patrones
      • Buenas Prácticas de Diseño
      • Patrones de Diseño
      • EIP y ERC
      • ERC-20
      • ERC-721
      • Open Zeppelin
      • Crea un Token ERC-20
      • Almacenamiento Descentralizado: IPFS
      • Crea un Token ERC-721
      • DeFi
  • Módulo 4
    • Toolkit para desarrollo en Ethereum
      • Requisitos para el módulo 4
        • Terminal
        • Git y Github
        • Node.js y npm
        • Visual Studio Code para Solidity
      • Toolkit
        • JSON-RPC
        • Ethers.js
          • Ejercicio
        • Hardhat
          • Despliegue de un contrato en Hardhat
          • Despliegue de un contrato en una red pública
        • Scaffold-ETH
          • Características
          • Cómo instalar Scaffold-ETH
  • Módulo 5
    • Seguridad, Pruebas y Auditoría
      • Pruebas
        • Importancia de realizar pruebas
        • Métodos para probar contratos inteligentes
          • Pruebas automatizadas
          • Pruebas manuales
        • Conceptos importantes en testing
        • Herramientas para testing
        • Testing con Hardhat
        • Recursos adicionales
      • Seguridad
        • Una mentalidad distinta de diseño
        • Principais vulnerabilidades em contratos inteligentes
          • Ataque de reentrância (Reentrancy attack)
          • Ataque de repetição (Replay attack)
          • Manipulação de Oráculos de Preços (Price Oracle Manipulation)
          • Falta de Controle de Acesso (Missing Access Control)
          • Manipulação de Recompensas (Reward Manipulation)
          • Falha na Inicialização (Failure to Initialize)
          • Front-running
          • Invariant Breaks (Ruptura de invariantes)
          • Mishandling of ETH (Mal manejo de ETH)
          • Denial of Service (DoS - Denegación de Servicio)
          • Integer overflow and underflow (desbordamiento y subdesbordamiento de enteros)
          • Phishing y Typosquatting
        • Recursos adicionales
      • Auditoría de smart contracts
        • Proceso de Auditoría
        • Herramientas
        • Cómo prepararse para una auditoría
        • El test Rekt
        • Retos
        • Recursos adicionales
  • Contribuye
    • Kipu Explorer
Powered by GitBook
On this page

Was this helpful?

  1. Módulo 5
  2. Seguridad, Pruebas y Auditoría
  3. Seguridad
  4. Principais vulnerabilidades em contratos inteligentes

Falta de Controle de Acesso (Missing Access Control)

Essa vulnerabilidade ocorre quando funções críticas dentro de um contrato inteligente não estão devidamente protegidas por restrições de acesso. Isso permite que qualquer usuário, mesmo não autorizado, execute essas funções, o que pode resultar na manipulação de dados do contrato, apropriação indevida de fundos ou interrupção do seu funcionamento.

Exemplo: Imagine um contrato inteligente que gerencia um fundo comum, onde várias pessoas podem depositar e sacar recursos. O contrato possui uma função withdrawAllFunds que permite retirar todos os fundos e transferi-los para um endereço específico.

Se essa função não for protegida por um controle de acesso, qualquer usuário poderá chamá-la e indicar seu próprio endereço, retirando todos os fundos do contrato sem restrições — o que resultaria na perda de todos os recursos depositados por outros usuários.

contract VulnerableContract {
    address public owner;
    uint public totalFunds;

    constructor() {
        owner = msg.sender;
    }

    function deposit() external payable {
        totalFunds += msg.value;
    }

    function withdrawAllFunds(address payable _to) external {
        require(totalFunds > 0, "No funds available");
        _to.transfer(totalFunds);
        totalFunds = 0;
    }
}

Neste exemplo, a função withdrawAllFunds não possui nenhum controle de acesso, portanto qualquer pessoa pode executá-la, mesmo que não seja o proprietário do contrato.

Mitigação:

  1. Implementar Modificadores de Acesso: A solução mais direta é aplicar modificadores que restrinjam o acesso a funções críticas apenas a usuários autorizados, como o dono do contrato ou administradores específicos. Em Solidity, isso pode ser feito com um modificador onlyOwner:

    modifier onlyOwner() {
        require(msg.sender == owner, "Not the contract owner");
        _;
    }
    
    function withdrawAllFunds(address payable _to) external onlyOwner {
        require(totalFunds > 0, "No funds available");
        _to.transfer(totalFunds);
        totalFunds = 0;
    }

    Com esse modificador, apenas o proprietário do contrato poderá chamar withdrawAllFunds.

  2. Testes e Simulações: Realize testes rigorosos que simulem tentativas de acesso não autorizado a funções críticas. Isso garante que os mecanismos de segurança estejam funcionando corretamente e evita falhas em ambientes reais.

PreviousManipulação de Oráculos de Preços (Price Oracle Manipulation)NextManipulação de Recompensas (Reward Manipulation)

Last updated 25 days ago

Was this helpful?

Usar Bibliotecas de Controle de Acesso: Utilize bibliotecas bem testadas e auditadas, como , para gerenciar permissões de forma segura e estruturada. Essas bibliotecas permitem a criação de papéis (roles) e atribuição de permissões específicas a cada função.

OpenZeppelin AccessControl