Reino: Errors

Os erros e o processamento de erros representam uma classe de API. Erros relacionados com o processamento de erros são tão comuns que merecem um domínio próprio. Assim como no “abuso de API”, há duas formas de introduzir uma vulnerabilidade de segurança relacionada com erros. A primeira, e mais comum, é processar os erros indevidamente (ou não os processar). A segunda é produzir erros que revelem muitas informações (a possíveis invasores) ou que sejam difíceis de processar.

Denial of Service: External Call

Abstract
Uma função chama um contrato externo dentro de uma instrução de loop que pode resultar em Negação de serviço.
Explanation
Uma chamada feita para um contrato externo pode falhar, o que poderá causar uma Negação de serviço dentro do contrato de chamada se a falha não for tratada corretamente. O que pode deixar o contrato indisponível para uso posterior.

Isso é especialmente relevante quando a chamada externa é executada dentro de uma instrução de loop e ainda mais quando se lida com pagamentos, em que geralmente é melhor permitir que os usuários retirem fundos em vez de enviar fundos para eles.

Exemplo 1: O código a seguir usa uma instrução de loop for para reembolsar todos os endereços envolvidos usando a chamada externa send.


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