📗
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 2025 日本語版

SC02:2025 - 価格オラクル操作 (Price Oracle Manipulation)

説明:

価格オラクル操作は、価格やその他の情報を取得するために外部データフィード (オラクル) に依存するスマートコントラクトの重大な脆弱性です。分散型金融 (DeFi) では、オラクルは資産価格などの現実世界のデータをスマートコントラクトに提供するために使用されます。ただし、オラクルによって提供されるデータが操作されると、コントラクトの動作が不正確になる可能性があります。攻撃者は、オラクルが提供するデータを操作することでオラクルを悪用し、不正な引き落とし、過剰なレバレッジ、さらには流動性プールの枯渇などの壊滅的な結果につながる可能性があります。この種の攻撃を防ぐには、適切なセーフガードとバリデーションのメカニズムが不可欠です。

事例 (脆弱なコントラクト):

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

interface IPriceFeed {
    function getLatestPrice() external view returns (int);
}

contract PriceOracleManipulation {
    address public owner;
    IPriceFeed public priceFeed;

    constructor(address _priceFeed) {
        owner = msg.sender;
        priceFeed = IPriceFeed(_priceFeed);
    }

    function borrow(uint256 amount) public {
        int price = priceFeed.getLatestPrice();
        require(price > 0, "Price must be positive");

        // Vulnerability: No validation or protection against price manipulation
        uint256 collateralValue = uint256(price) * amount;

        // Borrow logic based on manipulated price
        // If an attacker manipulates the oracle, they could borrow more than they should
    }

    function repay(uint256 amount) public {
        // Repayment logic
    }
}

影響:

  • 攻撃者はオラクルを操作して資産の価格を吊り上げ、本来得られるはずのものよりも多くの資金を借り入れることができます。

  • 操作された価格によって担保の誤った評価につながる場合、正当なユーザーが誤った評価による清算に直面する可能性があります。

  • オラクルが侵害された場合、攻撃者は操作されたデータを悪用してコントラクトの流用性プールを枯渇させたり、さらにはコントラクトを支払い不能にできます。

対策:

  • 複数の独立したオラクルからデータを集約して、単一のソースによる操作のリスクを軽減します。

  • オラクルから受け取る価格の最小と最大の閾値を設定して、急激な価格変動がコントラクトのロジックに影響を及ぼすことを防ぎます。

  • 価格更新の間にタイムロックを導入して、攻撃者に悪用される可能性のある即時変更を防ぎます。

  • 信頼できるパーティからの署名を要求するなど、暗号論的証明を使用してオラクルから受け取るデータの真正性を確保します。

事例 (修正バージョン):

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

interface IPriceFeed {
    function getLatestPrice() external view returns (int);
}

contract PriceOracleManipulation {
    address public owner;
    IPriceFeed public priceFeed;
    int public minPrice = 1000; // Set minimum acceptable price
    int public maxPrice = 2000; // Set maximum acceptable price

    constructor(address _priceFeed) {
        owner = msg.sender;
        priceFeed = IPriceFeed(_priceFeed);
    }

    function borrow(uint256 amount) public {
        int price = priceFeed.getLatestPrice();
        require(price > 0 && price >= minPrice && price <= maxPrice, "Price manipulation detected");

        uint256 collateralValue = uint256(price) * amount;

        // Borrow logic based on valid price
    }

    function repay(uint256 amount) public {
        // Repayment logic
    }
}

価格オラクル操作攻撃の被害を受けたスマートコントラクトの事例:

PreviousSC01:2025 - 不適切なアクセス制御 (Improper Access Control)NextSC03:2025 - ロジックエラー (Logic Errors)

Last updated 2 months ago

: 包括的な

Polter Finance ハック分析
BonqDAO プロトコル
ハック分析