Reino: Code Quality

Una mala calidad del código lleva a un comportamiento no predecible. Desde la perspectiva de un usuario, muchas veces también supone una usabilidad limitada. Pero para un atacante es una oportunidad para atacar al sistema de formas insospechadas.

Solidity Bad Practices: Default Function Visibility

Abstract
Una función no especifica un modificador de acceso explícito.
Explanation
Al desarrollar un contrato inteligente de Solidity, los desarrolladores pueden configurar el modificador de acceso de una función para controlar quién puede invocarla. Si un desarrollador no especifica un modificador de acceso, la función se establece por defecto en pública, lo que permite que un actor malicioso llame a la función sin autorización.

Ejemplo 1: El siguiente código no configura el modificador de acceso en ambas funciones y, por lo tanto, cualquiera puede invocarlas, lo que permite a un usuario eludir la llamada a require.


function withdrawWinnings() {
require(uint32(msg.sender) == 0);
_sendWinnings();
}

function _sendWinnings() {
msg.sender.transfer(this.balance);
}
References
[1] Enterprise Ethereum Alliance Code Linting
[2] Standards Mapping - CIS Azure Kubernetes Service Benchmark 5
[3] Standards Mapping - CIS Amazon Elastic Kubernetes Service Benchmark 5
[4] Standards Mapping - CIS Amazon Web Services Foundations Benchmark 3
[5] Standards Mapping - CIS Google Kubernetes Engine Benchmark normal
[6] Standards Mapping - Common Weakness Enumeration CWE ID 710
[7] Standards Mapping - Smart Contract Weakness Classification SWC-100
desc.structural.solidity.swc100