アップデート一覧に戻る
New releaseAug 30, 2026

WuppieFuzz v1.7.1

LibAFL上に開発されたカバレッジガイド型REST APIファザー

共有

WuppieFuzz v1.7.1

Logo of WuppieFuzz.

TNOは、LibAFL上に開発されたカバレッジガイド型REST APIファザーであるWuppieFuzzを開発しました。これは幅広いエンドユーザーを対象とし、使いやすさ、発見された欠陥の説明可能性、およびモジュール性に重点を置いています。WuppieFuzzは、テストの3つの設定(ブラックボックス、グレーボックス、ホワイトボックス)すべてをサポートしています。

[!NOTE]
簡単なステップバイステップのガイダンスについては、チュートリアルをご覧ください。

メディア掲載

WuppieFuzzは以下のメディアで紹介されています:

学術出版物

学術研究でWuppieFuzzを引用する場合は、CITATION.cffに記載されている推奨出版物を使用してください:

Rooijakkers, T., Nijsten, A., Daniele, C., Weitenberg, E., Groenewegen, R., & Melissen, A. (2026). WuppieFuzz: Coverage-Guided, Stateful REST API Fuzzing. In Proceedings of the 12th International Conference on Information Systems Security and Privacy (ICISSP), Volume 2, 221-231. SciTePress. https://doi.org/10.5220/0000217100004061

ライセンス

WuppieFuzzはApache-2.0ライセンスの下で提供されています。LICENSEを参照してください。
サードパーティのライセンス通知はTHIRD_PARTY_NOTICESに記載されています。

クイックインストール

一般的なオペレーティングシステム(MacOS、Windows、Linux)向けのWuppieFuzzのクイックインストールについては、releasesを参照するか、brew install wuppiefuzzを使用してください。

簡単な使い方

How to use WuppieFuzz? - YouTube

開発の前提条件

プロジェクトをビルドするには、以下の依存関係とツールをインストールする必要があります。

  • build-essential sudo apt install build-essential
  • pkg-config sudo apt install pkg-config
  • Rust curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

実行

WuppieFuzz in action.

WuppieFuzzを実行する前に、(計測された)ターゲットアプリケーションを起動する必要があります。

さらに、WuppieFuzzにOpenAPI仕様を提供する必要があります。これにより、リクエストの生成方法と変異方法が決まります。コマンドライン引数のヘルプについては、以下を使用してください:

$ cargo run -- --help # 必要なパラメータとフラグのヘルプを表示します

Usage: wuppiefuzz [OPTIONS] [OPENAPI_SPEC.YAML]
...

例えば、JaCoCoエージェントを接続したJavaターゲットに対してWuppieFuzzを実行するには、OpenAPIファイル(API仕様にターゲットが実行されているURLを含む)を指定します。さらに、カバレッジ形式がJaCoCoであることを指定し、クラスディレクトリを次のように指定します:

cargo run -- fuzz openapi.yaml --coverage-format jacoco --jacoco-class-dir ../Targets/app/target/classes/

設定ファイル

コマンドライン引数の代わりに、またはコマンドライン引数と組み合わせて設定ファイルを使用したい場合は、フラグ--config <CONFIG_FILE>を使用できます。コマンドライン引数と設定ファイルを組み合わせて使用する場合、コマンドライン引数が優先されます。

設定ファイルはyamlファイルである必要があり、指定したい各コマンドライン引数に対して1行ずつ含める必要があります。例えば:

coverage_format: jacoco
output_format: human-readable
source_dir: "/swagger-petstore/src/main/java"
jacoco_class_dir: "/swagger-petstore/target"
timeout: 20

この場合の実行コマンドの例は次のようになります:

$ cargo run -- fuzz --config=config.yaml --report --coverage-host=localhost:6300 --timeout=10 ./openapi.yaml

この行は、コマンドラインと設定ファイルの両方の引数を組み合わせます。フラグ--timeoutは両方で指定されているため、コマンドラインで指定されたタイムアウト(10秒)が優先されます。

example_configs/ディレクトリには、Javaコード用のJaCoCoによるカバレッジレポートの生成と、Pythonコード用のLCOVによるカバレッジレポートの生成に使用する2つの設定ファイルの例があります。

レポート

--reportフラグを付けてWuppieFuzzを実行すると、reports/内にタイムスタンプを名前とするサブディレクトリが作成されます。サポートされているすべてのカバレッジレポートがこのサブディレクトリに書き込まれます。カバレッジレポートには2つのタイプがあります:

  1. エンドポイントカバレッジ:OpenAPI仕様のみが必要なため、常に生成できます。
  2. コードカバレッジ:現在はJaCoCoのみサポートしていますが、さらに多くの形式をサポートすることを目指しています。難しい点は、カバレッジからソースファイルへのマッピングと、これを使用した堅牢なレポート生成が必要なことです。

さらに、ファジングキャンペーンに関連するすべてのリクエスト情報を含むデータベースが作成されます。このデータベースは、Grafanaダッシュボードを通じて可視化および探索できます。

このリポジトリの構造

  • assets: ロゴ、画像など
  • coverage_agents: さまざまなターゲットに適用するカバレッジ追跡用のコードと手順
  • example_configs: WuppieFuzzを設定するための設定ファイルの例
  • src: WuppieFuzzのソースコード
  • tutorial: 特定のターゲットをファジングする方法とファジング結果の解釈方法に関する詳細かつ低レベルのチュートリアル
  • dashboard: ファジング結果とパフォーマンスのトリアージ用ツール

これらの各項目の詳細については、各ディレクトリのREADMEを参照してください。

開発ビルド

デフォルトでは、WuppieFuzzはC依存関係(OpenSSL、SQLite、Z3)をベンダリングするため、通常のcargo buildがそのまま動作します。開発中のコンパイルを高速化するには、すべてのベンダリング依存関係を無効にして、システムにインストールされたライブラリにリンクできます。

[!NOTE] z3クレートにはZ3 4.15+が必要です。これは、ほとんどのLinuxディストリビューションのパッケージマネージャーが提供するバージョンよりも新しいものです。互換性のあるバージョンを入手するには、Homebrewbrew install z3)を使用してZ3をインストールしてください。

システム依存関係

システムに以下のライブラリをインストールします:

Debian/Ubuntu:

sudo apt install libssl-dev libsqlite3-dev
brew install z3  # aptのlibz3-devは古すぎるため、Homebrewを使用してください

Linuxでは、Homebrewは標準以外のパスにインストールされます。コンパイラとランタイムリンカがZ3を見つけられるように、そのライブラリディレクトリを環境に追加します:

eval "$(brew shellenv)"
export LIBRARY_PATH="$(brew --prefix z3)/lib:$LIBRARY_PATH"
export LD_LIBRARY_PATH="$(brew --prefix z3)/lib:$LD_LIBRARY_PATH"

[!TIP] 上記の行を~/.bashrcまたは~/.zshrcに追加して、永続的に設定してください。

Fedora (42+):

sudo dnf install openssl-devel sqlite-devel z3-devel

macOS (Homebrew):

brew install openssl sqlite z3

Cargoエイリアス

このリポジトリには、.cargo/config.toml--no-default-featuresでビルドし、すべてのシステムライブラリにリンクするCargoエイリアスが含まれています:

cargo dev-build          # ベンダリング依存関係なしでビルド
cargo dev-run -- <args>  # ベンダリング依存関係なしで実行
cargo dev-test           # ベンダリング依存関係なしでテスト

ドキュメントの生成

cargo doc --no-depsを実行すると、ソースコードのコメントからドキュメントが生成されます。ドキュメントのメインページはtarget/doc/wuppiefuzz/index.htmlになります。

カテゴリ