Skip to content
KitploitKITPLOIT
ツールブログ
提出
ツールブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

··フィード·お問い合わせ·プライバシー·© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
tmux-fuzzing — OSS-Fuzzを使用したtmux向け拡張ファジング。コードカバレッジ向上のためのカスタム`cmd-fuzzer`および`argument-fuzzer`ハーネスと、`CVE-2020-27347`のPoCを含みます。 | Kitploit
ツール/GitHubGitHub/lucadibello/tmux-fuzzing
脆弱性分析コード分析ファジングバイナリ解析学習と教育ラボと実践
GitHublucadibello/tmux-fuzzing

tmux-fuzzing

OSS-Fuzzを使用したtmux向け拡張ファジング。コードカバレッジ向上のためのカスタム`cmd-fuzzer`および`argument-fuzzer`ハーネスと、`CVE-2020-27347`のPoCを含みます。

リポジトリを見る
11年前未レビュー

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
共有

Fuzzing Lab: tmuxのファジング強化

Software Security @ EPFL, Spring 2025

概要

このラボでは、GoogleのOSS-Fuzzインフラストラクチャ内で、tmuxターミナルマルチプレクサに対するファジング活動を強化しました。まず、既存のinput-fuzzerハーネスについて、提供されたシードコーパスを使用した場合と使用しない場合の両方で行カバレッジを評価し、初期カバレッジが同等であることを確認してベースラインを確立しました。次に、ベースラインファザーでは十分に実行されないtmux内の2つの重要なコード領域を特定しました。これらのカバレッジギャップに対処するため、cmd-fuzzerとargument-fuzzerという2つの新しいターゲットファジングハーネスを開発・評価し、これらの領域でのカバレッジを改善できることを実証しました。これらのファジング改善によってプロジェクト期間内に新たな重大な脆弱性は発見されなかったため、クラッシュ分析は既知の過去の脆弱性に焦点を当てました。CVE-2020-27347(スタックベースのバッファオーバーフロー)の概念実証(PoC)を開発し、その根本原因を分析し、実装された修正について議論し、そのセキュリティへの影響を評価しました。

プロジェクト概要と目標

このプロジェクトは、OSS-Fuzzフレームワークを利用して、tmuxオープンソースターミナルマルチプレクサにファジング技術を適用・強化することを目的としました。プロジェクトは以下の主要な段階で構成されました:

  1. ベースライン評価(パート1):

    • tmux用の既存のinput-fuzzerハーネスを理解し評価する。
    • デフォルトのシードコーパスを使用した場合と空のシードコーパスを使用した場合のコードカバレッジ性能を比較する。
  2. カバレッジギャップ分析(パート2):

    • パート1のカバレッジレポートを分析し、input-fuzzerによって十分に実行されていないtmux内の重要なコード領域を特定する。
    • 改善の主要領域として、引数解析(arguments.c)とコマンド解析・実行ロジック(cmd-parse.c、cmd-*.cモジュール)に焦点を当てる。
  3. ファザーの改善(パート3):

    • 2つの新しいターゲットファジングハーネスを開発する:
      • argument-fuzzer:arguments.cのコマンドライン引数解析ロジックをテストするために特別に設計。
      • cmd-fuzzer:コマンド解析および実行経路をテストするために設計され、cmd-parse.cおよびさまざまなcmd-*.cモジュールを対象とする。
    • 達成されたコードカバレッジを測定し、ベースラインと比較して、これらの新しいハーネスの有効性を評価する。
  4. クラッシュ分析(パート4):

    • 改善されたファザーによってプロジェクト期間内に新たな重大な脆弱性は発見されなかったため、tmuxの既知の既存脆弱性(CVE-2020-27347)を詳細な分析対象として選択した。
    • これには、クラッシュを再現するための概念実証(PoC)の開発、根本原因の分析、適用された修正の理解、およびセキュリティへの影響の評価が含まれた。

リポジトリ構造

最終提出物は次のように構成されています(submission/ディレクトリ内):

root@kitploit:~
submission/
├── README.md                   # このファイル
├── part_1/                     # パート1のファイル: ベースライン評価
│   ├── oss-fuzz.diff           # input-fuzzerのシードコーパスを削除するための差分
│   ├── project.diff            # (パート1ではおそらく空または軽微)
│   ├── remove_seed_corpus.patch # 使用された実際のパッチファイル
│   ├── report/                 # input-fuzzerのHTMLカバレッジレポート
│   │   ├── w_corpus/
│   │   └── wo_corpus/
│   ├── run.w_corpus.sh         # コーパス付きでinput-fuzzerを実行するスクリプト
│   └── run.wo_corpus.sh        # コーパスなしでinput-fuzzerを実行するスクリプト
├── part_3/                     # パート3のファイル: ファザーの改善
│   ├── coverage_noimprove/     # ベースラインカバレッジ(例: コーパスなしのinput-fuzzerから)
│   │   └── ...
│   ├── improve1/               # 改善1: argument-fuzzer
│   │   ├── coverage_improve1/  # argument-fuzzerのカバレッジレポート
│   │   ├── oss-fuzz.diff       # argument-fuzzer用のOSS-Fuzz設定変更
│   │   ├── project.diff        # argument-fuzzer用のTmux変更(例: 新しい.cc、Makefile.am)
│   │   └── run.improve1.sh     # argument-fuzzerを実行するスクリプト
│   └── improve2/               # 改善2: cmd-fuzzer
│       ├── coverage_improve2/  # cmd-fuzzerのカバレッジレポート
│       ├── oss-fuzz.diff       # cmd-fuzzer用のOSS-Fuzz設定変更
│       ├── project.diff        # cmd-fuzzer用のTmux変更
│       └── run.improve2.sh     # cmd-fuzzerを実行するスクリプト
├── part_4/                     # パート4のファイル: クラッシュ分析(CVE-2020-27347)
│   ├── environment/            # PoC用のDocker環境
│   │   ├── Dockerfile
│   │   ├── run_tmux_cve_test.sh # 主要なPoCテストロジック
│   │   ├── test_fixed.sh
│   │   └── test_vulnerable.sh
│   └── run.poc.sh              # DockerイメージをビルドしてPoCテストを実行するスクリプト
└── report.pdf                  # 包括的なプロジェクトレポート

(注:scripts/ディレクトリに含まれる_run_fuzz_core.shはヘルパーであり、このREADMEがsubmission/と並んで実際のプロジェクトルートにある場合は、ルートの一部となります)

セットアップと使用方法

すべてのファジングキャンペーンとCVE PoCの再現は、シェルスクリプトによって調整されたDocker環境内で実行されるように設計されています。

セットアップと使用方法

すべてのファジングキャンペーンとCVE PoCの再現は、シェルスクリプトによって調整されたDocker環境内で実行されるように設計されています。

前提条件:

  • Unix系システムにDockerがインストールされ、実行中であること。
  • bashシェルとgitクライアント。
  • スクリプトがoss-fuzzをクローンする必要がある場合(プロジェクトルートにoss-fuzz/が見つからない場合にクローンを試みます)、[email protected]用のSSHキーが設定されていること。または、https://github.com/google/oss-fuzz.gitを事前にプロジェクトルートにクローンしておくこともできます。

一般的なスクリプトアーキテクチャ: このプロジェクトは、集中化されたコアスクリプトscripts/_run_fuzz_core.sh(submission/ディレクトリには含まれていませんが、このREADMEが前提とするプロジェクト全体の構造の一部です)を使用します。submission/part_1/、submission/part_3/improve1/、submission/part_3/improve2/、およびsubmission/part_4/にある個々のランナースクリプトは、以下を担当します:

  1. oss-fuzzリポジトリのクリーンチェックアウトに実行固有のoss-fuzz.diffパッチを適用して、特定のテスト環境をセットアップします(ほとんどのランナースクリプトから../../oss-fuzzにあると想定されます)。
  2. 設定変数(PROJECT、HARNESS、LABEL、プロジェクト固有パッチへのパス、出力ディレクトリなど)をエクスポートします。
  3. _run_fuzz_core.shスクリプトを呼び出します。このスクリプトは次を処理します:
    • オプションのプロジェクトレベルパッチの適用(例: tmuxに新しいファザーソースを追加するため)。
    • OSS-Fuzz Dockerイメージのビルド(フラグが設定されている場合)。
    • 選択されたサニタイザで指定されたファザーのビルド。
    • 設定された期間(通常4時間)ファザーを実行。
    • submission/ディレクトリ構造内の指定された場所にコーパスとHTMLカバレッジレポートを生成してエクスポート。

スクリプトの実行: oss-fuzz/と出力ディレクトリの相対パスが正しく解決されるように、一般にプロジェクトのルートディレクトリからランナースクリプトを実行することをお勧めします。

1. パート1: ベースライン評価(input-fuzzer) これらのスクリプトは、tmux用の既存のinput-fuzzerを評価します。

root@kitploit:~
# プロジェクトのルートディレクトリから:
./submission/part_1/run.w_corpus.sh  # デフォルトのシードコーパス付きでinput-fuzzerを実行
./submission/part_1/run.wo_corpus.sh # シードコーパスなしでinput-fuzzerを実行

run.w_corpus.shはシードに関するデフォルトのtmuxビルド動作を使用します。 run.wo_corpus.shはsubmission/part_1/remove_seed_corpus.patch(ローカルのoss-fuzz.diffを介して、このパッチを呼び出すかその変更を統合します)をoss-fuzz/projects/tmux/build.shに適用して、初期シードコーパスが使用されないようにします。カバレッジレポートはsubmission/part_1/report/w_corpus/とsubmission/part_1/report/wo_corpus/およびsubmission/part_1/report/wo_corpus/にそれぞれエクスポートされます。

2. パート3: ファザーの改善(input-fuzzer)

  • 改善1(argument-fuzzer): arguments.cを対象とします。

    root@kitploit:~
    # プロジェクトのルートディレクトリから:
    ./submission/part_3/improve1/run.improve1.sh
    
  • 改善2(cmd-fuzzer): cmd-parse.cとコマンド実行を対象とします。

    root@kitploit:~
    # プロジェクトのルートディレクトリから:
    ./submission/part_3/improve2/run.improve2.sh
    

各run.improveX.shスクリプトは、ローカルのoss-fuzz.diffを適用し、PROJECT_PATCH_FILEをローカルのproject.diff(新しいファザーコードをtmuxに追加し、Makefile.amを更新します)に設定します。カバレッジレポートは、それぞれのsubmission/part_3/improveX/coverage_improveX/ディレクトリにエクスポートされます。submission/part_3/coverage_noimprove/ディレクトリには、比較用のパート1のベースラインカバレッジが含まれています。

3. パート4: CVE-2020-27347 PoCの再現

root@kitploit:~
# プロジェクトのルートディレクトリから:
./submission/part_4/run.poc.sh

このスクリプトは、専用のDockerイメージ(submission/part_4/environment/Dockerfileから)をビルドし、tmux 3.1b(脆弱なバージョン)をパッチ適用済みコミットa868bacに対してテストします。

主な発見と結果

(詳細な説明、図、表は完全なreport.pdfにあります)

パート1(ベースライン - input-fuzzer)

  • デフォルトのシードコーパスあり: 14.00%の行カバレッジ(7281/51997行)、24.44%の関数カバレッジ。
  • シードコーパスなし: 13.94%の行カバレッジ(7248/51997行)、24.31%の関数カバレッジ。
  • 初期シードコーパスの影響は、既存のinput-fuzzerにとってはわずかでした。
  • tmuxの重要な部分、特に引数解析(arguments.c)、コマンド解析/実行(cmd-parse.c、cmd-*.c)、およびクライアント/サーバーロジック(client.c、server.c)は、ほとんど実行されていませんでした(例: arguments.cは約5.8%の行カバレッジ)。

パート3(ファザーの改善)

  • argument-fuzzer(arguments.cを対象): arguments.cで66.62%の行カバレッジを達成し、約5.8%のベースラインから大幅に増加しました。
  • cmd-fuzzer(コマンド解析と実行を対象): cmd-parse.cの行カバレッジを42.58%(約27%から)に、関数カバレッジを77.78%に増加させました。
  • このファザーを通じてarguments.cのカバレッジも45.54%に上昇しました。
  • cmd.cは39.14%の行カバレッジに達しました。
  • さまざまなcmd-*.cモジュール(例: cmd-bind-key.c、cmd-set-options.cは50%の関数カバレッジ)およびキー処理ルーチン(key-string.cは30%の行カバレッジ、key-bindings.cは6.05%の行カバレッジ)で、新規または大幅に改善されたカバレッジを達成しました。

パート4(CVE-2020-27347の分析)

  • ペイロード\033[::::::7::1:2:3::5:6:7:mを使用して、tmux 3.1b(コミット6a33a12)でCVE-2020-27347(SGRエスケープシーケンス解析におけるスタックバッファオーバーフロー)を再現することに成功しました。
  • tmuxコミットa868bac(修正を含み、バージョン3.1cにつながる)がクラッシュの影響を受けないことを確認しました。
  • この脆弱性は、細工されたシーケンスをペインTTYに書き込むことで悪用可能であり、サービス拒否(DoS)を引き起こし、任意のコード実行(ACE)の可能性もあります。深刻度は高(CVSS 7.8)と評価されています。

直面した課題

  • スクリプト化されたDocker環境でtmuxの正しい起動を保証すること、特にCVE PoCでは「not a terminal」エラーを回避するためにデタッチセッションを使用する必要がありました。
  • さまざまなテストシナリオにわたってgit状態を管理すること(完全なクローンの確保、パッチ適用前のクリーンリセット)は、特定のtmuxバージョンの再現可能なビルドにとって重要でした。
  • 効果的な新しいファジングハーネス(argument-fuzzer、cmd-fuzzer)を開発するには、特定の未実行コードパスをターゲットにするために、tmuxの内部の引数およびコマンド処理ロジックをよく理解する必要がありました。

今後の作業

  • cmd-fuzzerをさらに拡張して、より広範なcmd-*.cモジュール、特にウィンドウ、レイアウト、ペイン操作などの複雑な状態相互作用を扱うモジュールをカバーする。
  • tmuxのクライアント・サーバー通信プロトコルに対するファジング戦略を調査し、より複雑な環境モックアップを検討する。
  • 構造認識型ファジングをtmuxコマンド言語に適用することを検討し、cmd-parse.yの文法定義を活用して、より構文的に有効で複雑なコマンドシーケンスを生成する可能性を探る。

有用なリンク

  • tmuxプロジェクト
  • OSS-Fuzz
  • CVE-2020-27347
  • プロジェクトレポートPDF (プロジェクトルートからの相対パス)
ツールをダウンロード