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

SC05:2023 - フロントランニング攻撃 (Front-running Attacks)

説明:

フロントランニングは、悪意のあるアクターがブロックチェーンネットワーク内の保留中のトランザクションに関する知識を悪用して不当に利益を得る攻撃の一種です。これは分散型金融 (DeFi) エコシステムで特によく見られます。攻撃者はメモリプール (保留中のトランザクションのリスト) を観察し、ターゲットとなるトランザクションよりも先に処理されるように、より高いガス価格の独自のトランザクションを戦略的に配置します。これは被害者に大きな金銭的損失をもたらし、スマートコントラクトの意図した機能を妨害する可能性があります。

事例 :

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

contract VulnerableSwap {
    address public pancakeRouter;
    address public ssToken;

    constructor(address _pancakeRouter, address _ssToken) {
        pancakeRouter = _pancakeRouter;
        ssToken = _ssToken;
    }

    function swapBNBForSSToken(uint256 amount) private {
        address[] memory path = new address[](2);
        path[0] = IPancakeRouter02(pancakeRouter).WETH();
        path[1] = ssToken;

        IPancakeRouter02(pancakeRouter).swapExactETHForTokensSupportingFeeOnTransferTokens{
            value: amount
        }(0, path, address(this), block.timestamp);
    }
}

注: 上記の事例では、ユーザーは BNB を SSToken に交換したいと考えています。しかし、この関数には適切なスリッページチェックがないため、フロントランニングに対して脆弱です。攻撃者は大規模なスワップトランザクションを観察し、より高いガス価格の独自のトランザクションを最初に処理されるように挿入して、被害者のトランザクションを不利なレートで実行されることができます。

影響:

  • トランザクションの順序を操作された結果、被害者はトークンに多額の代金を支払うことになったり、予想よりもはるかに少ない金額を受け取ることになる可能性があります。

  • フロントランナーは他者に先駆けて大規模な取引を実行することで、トークンの価格を人為的に上げ下げできます。

対策:

  • ネットワーク価格とスワップサイズに応じて 0.1% から 5% の間のスリッページ制限を導入し、フロントランナーがより高いスリッページレートを悪用することを防ぎます。

  • ユーザーが詳細を明かさずにアクションをコミットし、後に正確な情報を開示するという二段階プロセスを使用して、攻撃者がトランザクションを予測して悪用することを困難にします。

  • 複数のトランザクションをまとめて一つのユニットとして処理することで、攻撃者が個々の取引を特定して悪用することをより困難にします。

  • フロントランニングの機会を悪用する可能性のある自動化されたボットやスクリプトを継続的に監視し、早期検出と軽減に役立てます。

PreviousSC04:2023 - アクセス制御の脆弱性 (Access Control Vulnerabilities)NextSC06:2023 - サービス拒否攻撃 (Denial of Service (DoS) Attacks)

Last updated 11 months ago