📗
owasp-smart-contract-top-10-ja
  • OWASP Smart Contract Top 10 ja
  • OWASP スマートコントラクト Top 10 日本語版
    • リーダー
  • OWASP スマートコントラクト Top 10 2025 日本語版
    • OWASP スマートコントラクト Top 10 2025
    • SC01:2025 - 不適切なアクセス制御 (Improper Access Control)
    • SC02:2025 - 価格オラクル操作 (Price Oracle Manipulation)
    • SC03:2025 - ロジックエラー (Logic Errors)
    • SC04:2025 - 入力バリデーションの欠如 (Lack of Input Validation)
    • SC05:2025 - 再入可能性 (Reentrancy)
    • SC06:2025 - チェックされていない外部呼び出し (Unchecked External Calls)
    • SC07:2025 - フラッシュローン攻撃 (Flash Loan Attacks)
    • SC08:2025 - 整数オーバーフローとアンダーフロー (Integer Overflow and Underflow)
    • SC09:2025 - 安全でないランダム性 (Insecure Randomness)
    • SC10:2025 - サービス拒否 (Denial Of Service)
  • OWASP スマートコントラクト Top 10 2023 日本語版
    • OWASP スマートコントラクト Top 10 2023
    • SC01:2023 - 再入攻撃 (Reentrancy Attacks)
    • SC02:2023 - 整数オーバーフローとアンダーフロー (Integer Overflow and Underflow)
    • SC03:2023 - タイムスタンプの依存性 (Timestamp Dependence)
    • SC04:2023 - アクセス制御の脆弱性 (Access Control Vulnerabilities)
    • SC05:2023 - フロントランニング攻撃 (Front-running Attacks)
    • SC06:2023 - サービス拒否攻撃 (Denial of Service (DoS) Attacks)
    • SC07:2023 - ロジックエラー (Logic Errors)
    • SC08:2023 - 安全でないランダム性 (Insecure Randomness)
    • SC09:2023 - ガス制限の脆弱性 (Gas Limit Vulnerabilities)
    • SC10:2023 - チェックされていない外部呼び出し (Unchecked External Calls)
Powered by GitBook
On this page
  • 説明:
  • 事例 :
  • 影響:
  • 対策:
  1. OWASP スマートコントラクト Top 10 2023 日本語版

SC09:2023 - ガス制限の脆弱性 (Gas Limit Vulnerabilities)

説明:

Ethereum や他のブロックチェーンプラットフォームでは、スマートコントラクトが実行するすべての操作で、計算処理の単位である一定量のガスを消費します。ブロックガス制限は一つのブロックで使用できるガスの最大量です。スマートコントラクトの機能が、その実行を完了するためにブロックガス制限を超えるガスを必要とする場合、トランザクションは失敗します。このタイプの脆弱性は、反復回数が固定されておらず、任意に大きくなる可能性がある配列やリストなどの動的なデータ構造を反復処理するループで特によく見られます。

事例 :

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

contract TokenTransfer {
    mapping(address => uint256) public balances;

    function transfer(address _to, uint256 _amount) public {
        require(balances[msg.sender] >= _amount, "Insufficient balance");
        
        for (uint256 i = 0; i < _amount; i++) {  // The loop iterates _amount times, which can be very inefficient and can potentially exceed the block gas limit if _amount is too large.
            balances[msg.sender]--; 
            balances[_to]++; 
        }
    }
}

影響:

  • ガス制限の問題の影響を受けやすい機能は実行不能になる可能性があり、その結果、資金がロックされたり、コントラクトが凍結されます。ガス制限を超えたためにこれらの機能を完了できない場合、トランザクションに関連付けられた資金はアクセスできないままとなり、事実上コントラクト内でロックされます。

対策:

  • 機能は、大量のデータをトラバースするループ内で使用される変数の長さをユーザーが制御できないことを検証すべきです。省略できないのであれば、コードロジックに従って長さに制限を設ける必要があります。

  • Solidity でループが使用されるときは常に、開発者はループ内で発生するアクションに特に注意を払い、トランザクションが過剰なガスを消費することなく、ガス制限を超えないようにする必要があります。

PreviousSC08:2023 - 安全でないランダム性 (Insecure Randomness)NextSC10:2023 - チェックされていない外部呼び出し (Unchecked External Calls)

Last updated 11 months ago