Reino: Errors

Los errores y su tratamiento representan una clase de API. Los errores relacionados con el tratamiento de errores son tan comunes que se merecen una sección por sí mismos. Tal como sucede con los "abusos de la API", hay dos formas de presentar una vulnerabilidad de seguridad relacionada con los errores: la más común es tratar los errores inadecuadamente (o no llegar a hacerlo). La segunda es producir errores que dan demasiada información (a posibles atacantes) o que son difíciles de tratar.

Denial of Service: External Call

Abstract
Una función llama a un contrato externo dentro de una declaración de bucle que puede resultar en una denegación de servicio.
Explanation
Una llamada realizada a un contrato externo puede fallar, lo que podría causar una denegación de servicio dentro del contrato de llamada si el fallo no se maneja correctamente. Ello puede dejar el contrato no disponible para su uso posterior.

Esto es especialmente relevante cuando la llamada externa se ejecuta dentro de una declaración de bucle y aún más cuando se trata de pagos, donde suele ser mejor permitir que los usuarios retiren fondos en lugar de enviarles fondos.

Ejemplo 1: El siguiente código utiliza una instrucción de bucle for para reembolsar a todas las direcciones involucradas mediante el uso de send llamada externa.


function refundAll() public {
for(uint x; x < refundAddresses.length; x++) {
require(refundAddresses[x].send(refunds[refundAddresses[x]]));
}
}
References
[1] Standards Mapping - CIS Azure Kubernetes Service Benchmark 2
[2] Standards Mapping - CIS Amazon Elastic Kubernetes Service Benchmark 5
[3] Standards Mapping - CIS Amazon Web Services Foundations Benchmark 3
[4] Standards Mapping - CIS Google Kubernetes Engine Benchmark normal
[5] Standards Mapping - Common Weakness Enumeration CWE ID 703
[6] Standards Mapping - Smart Contract Weakness Classification SWC-113
desc.structural.solidity.swc113