界: Errors

エラーとエラー処理は、API のクラスを表しています。エラー処理に関連するエラーは、非常に一般的であるため、独自の特別な分野を用意する必要があります。API の悪用と同様に、エラーに関連するセキュリティ脆弱性を引き起こす方法は 2 つあります。最も一般的な方法は、エラーを適切に処理しない (またはまったく処理しない) ことです。もうひとつは、(可能性のある攻撃者に) 過剰な情報を与えるエラーか、処理が困難なエラーを生成することです。

Denial of Service: External Call

Abstract
関数が loop ステートメント内で外部コントラクトを呼び出しており、Denial of Service が発生する可能性があります。
Explanation
外部コントラクトへの呼び出しは失敗する可能性があり、その失敗が正しく処理されないと、呼び出し元コントラクト内で Denial of Service が発生する可能性があります。その場合、コントラクトを今後使用できなくなる可能性があります。

これは、外部呼び出しが loop ステートメント内で実行される場合に特に関係するほか、支払処理を扱う場合 (通常、ユーザーに資金をプッシュするのではなく資金を引き出してもらう方が良い場合) にさらに関係します。

例 1: 次のコードは、for loop ステートメントを使用して、関係するすべてのアドレスを 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