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

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

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

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

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
gdcm-security-poc — 6件のGDCM脆弱性に対するプライベートなエンドツーエンドのサニタイザ再現パッケージ | Kitploit
ツール/GitHubGitHub/abhinavagarwal07/gdcm-security-poc
静的分析動的分析 (サンドボックス)メモリフォレンジック脆弱性分析エクスプロイトファジングバイナリ解析論文と研究学習と教育
GitHubabhinavagarwal07/gdcm-security-poc

gdcm-security-poc

6件のGDCM脆弱性に対するプライベートなエンドツーエンドのサニタイザ再現パッケージ

リポジトリを見る
31日前未レビュー

人気

すべて見る →

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

すべてのツールを探索

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

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

GDCM findings 1-6: 再現パッケージ

GDCM における6件のパーサー/コーデック欠陥を、v3.2.6 上でサニタイザー障害または有界な伝播チェックとして再現したもの。各自動トリガーには、脆弱なシグナルを発生させないほぼ有効なコントロールが付属する。Finding 1 には計装された制御フロープリミティブも含まれる。

メンテナーおよび脆弱性コーディネーターのレビューを目的とする。何かを実行する前に SAFETY.md を読むこと。

固定ターゲット

manifest/targets.env:

名前リビジョン内容
vulnerable9c71b163タグ v3.2.6
master2cd05d13上流 master スナップショットを静的にレビュー済み; ランタイムマトリクスは保留中
fixed未設定レビュー済みの修正コミットが存在する場合にのみ設定する

master は日付付きスナップショットであり、移動するブランチではない。両リビジョンは公開リポジトリから到達可能であるため、bootstrap.sh はプライベートソースなしでどちらも準備できる。

Finding の範囲

このリポジトリのランタイム証拠は v3.2.6 に対するものである。以下のより広い範囲はソース履歴の調査によるものであり、関与するパターンは固定された master スナップショットにも残っている。

#CWEソース調査範囲必要なパス
1CWE-787v3.0.4 から v3.2.7マルチフレーム RLE YBR_FULL_422 読み取り
2CWE-787v2.0.16 から v3.2.7JPEG2000 エンコード/トランスコード
3CWE-125v2.0.5 から v3.2.7セグメント化パレット解析; LUT 適用が伝播値を露出させる
4CWE-787v2.0.8 から v3.2.7ImageRegionReader::ReadIntoBuffer; CVE-2024-22373 後の不完全な精度検証に関連
5CWE-674v2.0.4 以前から v3.2.7通常のネストされたシーケンス解析
6CWE-369v2.0.4 以前から v3.2.7NumSegments=0 での通常の RLE 解析

内容

  • fixtures/ - 不活性な DICOM 入力。manifest/expectations.json で SHA-256 固定され、各トリガー実行前に検証される
  • generators/ - すべてのフィクスチャに対する決定的で依存関係のないソースジェネレーター
  • harnesses/ - 最小限の読み取り/エンコード/デコードハーネス; Finding 2 は gdcmconv CLI とサーバーが呼び出すライブラリトランスコード API の両方を通じて示される
  • manifest/expectations.json - fixed ターゲットに対する機械可読なコマンド、決定的シグナル、受け入れ基準
  • scripts/ - 固定ソースの準備、サニタイザービルド、有界実行、クリーンアップ
  • evidence/ - すでに観測された簡潔な結果。未テストのターゲットは明示的に記載
  • LICENSE - MIT ライセンス

前提条件

Git、Python 3、CMake 3.20+、Ninja、および C++11 ツールチェーン (Clang または GCC) を備えた使い捨ての Linux または macOS ビルド環境。Ubuntu では: git python3 cmake ninja-build clang zlib1g-dev。GCC を使用するには CC/CXX を設定する。

ソース準備は、GDCM_SOURCE_REPO が既存のローカルクローンを指していない限り、HTTPS 経由でクローンする。SSH ホストは使用されない。

準備とビルド

これらのコマンドはソースとビルド成果物のみを準備する; フィクスチャは開かない。

root@kitploit:~
./scripts/build-target.sh vulnerable asan  debug
./scripts/build-target.sh vulnerable ubsan debug
./scripts/build-target.sh master     asan  debug
./scripts/build-target.sh master     ubsan debug

第3引数はプロファイルである。debug は -O0 -g; release は -O2 -g -DNDEBUG で、GDCM の gdcm_debug_assert() を省略し、ディストリビューションがライブラリをビルドする方法と一致する。両方でマトリクスを実行することで、メンテナーが最初に尋ねる質問、すなわちレポートがアサーション有効ビルドの産物かどうかに答えることができる。

GDCM_SUPPORT_BROKEN_IMPLEMENTATION=ON は GDCM 自身のデフォルトであり、そのままにされる。保守的な並列度は JOBS=8 で上書きする。

すべてのビルドは build-info.json (リビジョン、コンパイラ、フラグ、プラットフォーム) をその GDCM ビルドツリーに書き込み、すべての実行サマリーがそれを埋め込むため、アーカイブされた証拠は自己記述的である。

実行

root@kitploit:~
export GDCM_REPRO_ACK=I_UNDERSTAND_THIS_CRASHES_A_LOCAL_PROCESS

./scripts/run-matrix.sh vulnerable master --profile debug   # all automated cases
./scripts/run-one.sh vulnerable f1                          # one trigger
./scripts/run-one.sh vulnerable f1 --control                # its control

run-matrix.sh はすべてのターゲットに対してすべての自動ケースを実行し、最初の失敗で停止せず、_runs/matrix-<stamp>.json とレンダリングされた _runs/matrix-<stamp>.md を書き込む。2段階の f1-exploit ケースは手動のままであり、失敗した自動ケースとして誤分類されるのではなく、そのように報告される。

各子プロセスはコアダンプが無効化され、15秒のタイムアウトがある; Finding 5 にはさらに有界なスタック制限が与えられる。出力は _runs/ の下に留まる。分類器はサニタイザークラスと関与する関数を照合し、アドレス、PID、ソース行番号は決して照合しない。

vulnerable では、決定的シグナルが現れ、そのコントロールがクリーンなままであればケースは合格する。master では、ランナーは事前に宣言された判定ではなく観測を記録する。fixed では、シグナルが存在せず、他のサニタイザーや致命的シグナルが現れず、ハーネスが許可されたクリーンな結果を返す場合にのみケースは合格する。これらのルールは FIXED_REV が実際のパッチを指すまでは暫定的である; そのパッチの意図された拒否または処理の動作に対してレビューされなければならない。

ケース

ケースFinding示す内容
f11RLECodec::DecodeFragment における ASan ヒープ書き込み
f1-exploit1計装された隣接オブジェクト上書きと間接分岐制御 (Linux x86-64)
f22gdcmconv --j2k 経由の opj_write_from_memory における ASan ヒープ書き込み
f2-lib2ImageChangeTransferSyntax::Change 経由の同じ書き込み
f33セグメント化パレット展開における ASan ヒープ読み取り
f3-propagation3範囲外バイトがデコードされたピクセルに到達し、カウントとして報告される
f3-sentinel3有界な既知のガードワードが論理 LUT 境界を越える
f44JPEG2000 領域デコードにおける ASan ヒープ書き込み
f55ネストされたシーケンスアイテムでの ASan スタック枯渇
f66RLE デコードにおける UBSan ゼロ除算; x86 では SIGFPE

さらに2つのハーネスは再現ケースではなく悪用可能性の研究であり、Linux x86-64 上の非サニタイズプロファイルでのみビルドされる:

ハーネスFinding確立する内容
finding01_groom1テストされた glibc の隣接性。アロケーション記録フックを通じて観測
finding03_leak3131070バイトの過剰読み取りがビルド固有のライブラリポインタを露出させ得る

保持された証拠

evidence/v3.2.6-macos-arm64-debug.md は完了した v3.2.6 デバッグマトリクスを記録し、すべてのコントロールと両方の有界な Finding 3 伝播チェックを含む。

evidence/v3.2.6-linux-x86_64-finding01-groom.md と evidence/v3.2.6-linux-x86_64-finding03-leak.md は以下の2つの悪用可能性結果を記録する。現在の master、完全なリリースプロファイルマトリクス、および f1-exploit の結果は、そのトランスクリプトが保持されるまで主張されない。

クリーンアップ

root@kitploit:~
./scripts/clean.sh

クリーンアップはパッケージマーカーなしでは実行を拒否し、このリポジトリ下の _work、_build、_generated、_runs、および Python バイトコードキャッシュのみを削除する。evidence/ 下の保持された証拠は削除されない。

悪用プリミティブ (Finding 1)

f1-exploit は Linux-x86_64 専用であり、手動で実行される; manifest/expectations.json に正確なコマンドシーケンスが記載されている。ハーネスの決定的なアロケーション配置の下で、それぞれが一致するネガティブケースを持つ3つの別々の事実をテストする:

  • オーバーフローが、アロケータがターゲットバッファの後に渡したメモリに到達する;
  • そこに着地するバイトが、細工された DICOM が要求した正確なバイトである。異なる値を植え付けるか、プレーンな f1 フィクスチャを使用すると、破損は報告されるが明示的にコンテンツ制御は ない ため、チェックは反証可能である;
  • 合成された被害者の関数ポインタが、ファイルによって供給されたアドレスを保持することになり、それを呼び出すとハーネス内の関数に制御が移る。

12288バイトのオーバーフロー内の8バイトウィンドウの約半分は任意の値を受け入れる。残りは結合されている。DoYBRFull422 が1つのソースバイトを2つの出力位置に複製するためである; オフセット 6144 は自由なウィンドウの1つである。フレーム1のデコードは最後に実行されるため、アロケーションを越えて持続するのはフレーム1の内容である。

ハーネスは、隣接オブジェクトが変更されている間に ImageReader::Read() が true を返すかどうかを記録する。その結果を観測された証拠として記述する前に、成功した Linux x86-64 トランスクリプトが保持されなければならない。

計装なしで何が起こるか

f1-exploit は独自の被害者配置を提供するため、未変更のプロセスがその配置を持つかどうかには答えられない。finding01_groom はストック glibc、デフォルト PIE、および ASLR を使用し、アロケーションを記録するが再配置はしないグローバルアロケーションフックを備える。保持されたテストでは:

  • 24576バイトバッファに続くアロケーションは、記録された全20試行で解放済みの2049バイト GDCM スクラッチチャンクであった。ライブオブジェクトや vtable は観測されなかった;
  • そのチャンクのフリーリストメタデータを破損させると glibc 自身の整合性チェックが作動し、アボートする。プレーンな finding01 ハーネスも計装なしで同じように死ぬ。

テストされた glibc ビルドでは、Finding 1 は確実にサービス拒否を引き起こした; コード実行パスは見つからなかった。 テストされたジオメトリは固定であり、他のアロケータやプラットフォームではヒープが異なる配置になる可能性がある。

finding03_leak はより強力な結果である。テストされたビルドでは、範囲外読み取りは131070バイトに達し、gdcm::ByteValue vtable ポインタがデコードされたピクセルに入り、ハーネスはそのビルドの既知の vtable オフセットを使用してライブラリロードベースを導出する。これはローカルな API レベルの開示結果である: LUT 適用とデコードされたピクセルバッファへのアクセスを必要とする。ネットワークサービスがそれらのピクセルを返すことは示していない。

この2つはここではコード実行に連鎖させることができない。被害者が見つからなかったからだけでなく、異なる PhotometricInterpretation 値を必要とするため2つのファイルが必要であり、漏洩したベースは漏洩プロセスがまだ生きている間のみ有用である。

証拠の境界

サニタイザーレポートは、テストされたプロセスとリビジョンにおける記載されたメモリ安全性または未定義動作イベントを証明する。f1-exploit は、意図的にターゲット配置を供給する計装されたアロケータの下で、バイト制御と隣接関数ポインタ上書きをテストする。未変更のコンシューマーにおけるその配置を確立するものではない。保持された finding01_groom 試行は、テストされたジオメトリと glibc ビルドに対してその配置を観測しなかった。

これらのいずれも、特定の製品におけるリモート到達可能性、永続性、または下流への適用可能性を証明するものではない。特定のデプロイメントに対する到達可能性の議論は別個の主張であり、開示文書で行われるもので、このパッケージによるものではない。

ツールをダウンロード