Skip to content
KitploitKITPLOIT
HerramientasBlog
Log in
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

FeedsContactoPrivacidad© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
SoliditySecurity — Seguridad de Solidity | Kitploit
Herramientas/GitHubGitHub/al1ex/soliditysecurity
Análisis de VulnerabilidadesAnálisis de CódigoAprendizaje y EducaciónRecursos Curados
GitHubal1ex/soliditysecurity

SoliditySecurity

Seguridad de Solidity

Ver Repositorio
3512hace 5 añosAún no revisado

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir

What's this

Esta publicación pretende ser una introducción relativamente profunda y actualizada que detalla los errores pasados cometidos por desarrolladores de Solidity, con el fin de evitar que los futuros desarrolladores repitan la historia.

Table of Contents

1. Reentrancia

  • La Vulnerabilidad
  • Técnicas de Prevención
  • Ejemplo del Mundo Real: The DAO

2. Desbordamiento Aritmético (Overflow/Underflow)

  • La Vulnerabilidad
  • Técnicas de Prevención
  • Ejemplos del Mundo Real: PoWHC y Desbordamiento en Transferencia por Lotes (CVE-2018-10299)

3. Ether Inesperado

  • La Vulnerabilidad
  • Técnicas de Prevención
  • Ejemplos del Mundo Real: Desconocido

4. Delegatecall

  • La Vulnerabilidad
  • Técnicas de Prevención
  • Ejemplos del Mundo Real: Parity Multisig Wallet (Segundo Hackeo)

5. Visibilidades por Defecto

  • La Vulnerabilidad
  • Técnicas de Prevención
  • Ejemplo del Mundo Real: Parity MultiSig Wallet (Primer Hackeo)

6. Ilusión de Entropía

  • La Vulnerabilidad
  • Técnicas de Prevención
  • Ejemplo del Mundo Real: Contratos PRNG

7. Referencia a Contratos Externos

  • La Vulnerabilidad
  • Técnicas de Prevención
  • Ejemplo del Mundo Real: Honeypot de Reentrancia

8. Ataque de Dirección/Parámetro Corto

  • La Vulnerabilidad
  • Técnicas de Prevención
  • Ejemplo del Mundo Real: Desconocido

9. Valores de Retorno de CALL No Comprobados

  • La Vulnerabilidad
  • Técnicas de Prevención
  • Ejemplos del Mundo Real: Etherpot y King of the Ether

10. Condiciones de Carrera / Front Running

  • La Vulnerabilidad
  • Técnicas de Prevención
  • Ejemplos del Mundo Real: ERC20 y Bancor

11. Denegación de Servicio (DOS)

  • La Vulnerabilidad
  • Técnicas de Prevención
  • Ejemplo del Mundo Real: GovernMental

12. Manipulación de la Marca de Tiempo del Bloque

  • La Vulnerabilidad
  • Técnicas de Prevención
  • Ejemplo del Mundo Real: GovernMental

13. Constructores con Cuidado

  • La Vulnerabilidad
  • Técnicas de Prevención
  • Ejemplo del Mundo Real: Rubixi

14. Punteros de Almacenamiento No Inicializados

  • La Vulnerabilidad
  • Técnicas de Prevención
  • Ejemplos del Mundo Real: Honeypots: OpenAddressLottery y CryptoRoulette

15. Puntos Flotantes y Precisión Numérica

  • La Vulnerabilidad
  • Técnicas de Prevención
  • Ejemplo del Mundo Real: Ethstick

16. Autenticación con tx.origin

  • La Vulnerabilidad
  • Técnicas de Prevención
  • Ejemplo del Mundo Real: Desconocido

Peculiaridades de Ethereum

  • Ether sin Clave
  • Direcciones de un Solo Uso
  • Airdrops de Transacción Única

Lista de Hacks/Bugs Interesantes Relacionados con Cripto

Referencias / Lista de Lecturas Adicionales

  • Ethereum Wiki - Seguridad
  • Solidity Docs - Consideraciones de Seguridad
  • Consensus - Mejores Prácticas para Contratos Inteligentes de Ethereum
  • Historia de las Vulnerabilidades de Seguridad de Ethereum, Hacks y sus Correcciones
  • Decentralized Application Security Project (DASP) Top 10 de 2018
  • Una Encuesta de Ataques a Contratos Inteligentes de Ethereum
  • Seguridad de Contratos Inteligentes de Ethereum
  • Lecciones Aprendidas del Concurso Underhanded Solidity

1. Reentrancia

Una de las características de los contratos inteligentes de Ethereum es la capacidad de llamar y utilizar código de otros contratos externos. Los contratos también suelen manejar ether y, como tal, a menudo envían ether a diversas direcciones de usuarios externos. La operación de llamar a contratos externos, o enviar ether a una dirección, requiere que el contrato realice una llamada externa. Estas llamadas externas pueden ser secuestradas por atacantes, quienes fuerzan al contrato a ejecutar código adicional (es decir, a través de una función fallback) , incluidas llamadas de vuelta a sí mismo. Así, la ejecución del código "re-entra" en el contrato. Ataques de este tipo se utilizaron en el infame hackeo de The DAO.

Para más información sobre ataques de reentrancia, consulte Ataque de Reentrancia en Contratos Inteligentes y Consensus - Mejores Prácticas para Contratos Inteligentes de Ethereum.

La Vulnerabilidad

Este ataque puede ocurrir cuando un contrato envía ether a una dirección desconocida. Un atacante puede construir cuidadosamente un contrato en una dirección externa que contenga código malicioso en la función fallback. Por lo tanto, cuando un contrato envía ether a esta dirección, invocará el código malicioso. Típicamente, el código malicioso ejecuta una función en el contrato vulnerable, realizando operaciones no esperadas por el desarrollador. El nombre "reentrancia" proviene del hecho de que el contrato malicioso externo llama de vuelta a una función en el contrato vulnerable y "re-entra" en la ejecución del código en una ubicación arbitraria del contrato vulnerable.

Para aclarar esto, considere el siguiente contrato vulnerable, que actúa como una bóveda de Ethereum que permite a los depositantes retirar solo 1 ether por semana.

EtherStore.sol:```solidity contract EtherStore {

uint256 public withdrawalLimit = 1 ether;
mapping(address => uint256) public lastWithdrawTime;
mapping(address => uint256) public balances;

function depositFunds() public payable {
    balances[msg.sender] += msg.value;
}
Descargar herramienta