Skip to content
KitploitKITPLOIT
ツールエクスプロイトブログ
Log in
提出
ツールエクスプロイトブログ
提出

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

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

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

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
fastjson-jsontype-rce-lab — Dockerラボ + fastjsonリモートクラスロードRCE用のディフェンシブスキャナ。fastjson 1.2.66-1.2.83: @JSONTypeリソースプローブ(CVE-2026-16723)。fastjson2 2.0.57: 攻撃者の@typeが、多態型(@JSONType(seeAlso) / Jackson @JsonSubTypes)を介してautoType無効時にloadClassへ到達。マーカーのみのペイロード。safeMode + JDK17コントロール。 | Kitploit
ツール/GitHubGitHub/dinosn/fastjson-jsontype-rce-lab
静的分析動的分析 (サンドボックス)脆弱性分析エクスプロイトウェブアプリケーション悪用ペネトレーションテスト学習と教育ラボと実践

人気

すべて見る →

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

すべてのツールを探索

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

すべてのツールを見る →
GitHub
dinosn/fastjson-jsontype-rce-lab

fastjson-jsontype-rce-lab

Dockerラボ + fastjsonリモートクラスロードRCE用のディフェンシブスキャナ。fastjson 1.2.66-1.2.83: @JSONTypeリソースプローブ(CVE-2026-16723)。fastjson2 2.0.57: 攻撃者の@typeが、多態型(@JSONType(seeAlso) / Jackson @JsonSubTypes)を介してautoType無効時にloadClassへ到達。マーカーのみのペイロード。safeMode + JDK17コントロール。

リポジトリを見る
20392342ヶ月前Kitploit レビュー済み
共有

Fastjson @JSONType リモートJAR/FDチェーン ラボと検出

このリポジトリには、現在2つの異なるFastjson調査トラックが保存されています:

  • modern-fd/ は、Spring Boot 3、標準の組み込みTomcat、JDK 17上でのFastjson 1.2.83 シングルボディのリモートJAR/ファイルディスクリプタチェーンの、推奨されるマーカーのみの再現です。AutoTypeを無効にした状態で、リテラルな固定DTOシンク JSON.parseObject(body, BoundEnvelope.class) を使用します。
  • 元のトップレベルDocker Composeラボは、以前のJDK 8ダイレクトリモートクラス経路を保存しています。これはコマンド実行が可能であり、モダンJDKの手法ではなく、レガシーで隔離された証明として扱うべきです。
  • scanner/ には、パッシブなリクエスト/ログ検出、静的アーティファクトのインベントリ、および実行を伴わない到達可能性プローブが含まれています。

バグ: ParserConfig.checkAutoType は、getResourceAsStream(typeName.replace('.','/') + ".class") を実行することで、 すべての @type 値に @JSONType アノテーションがないかを調べます。 モダンなLinux/JDKの組み合わせでは、リモートの jar:http プローブが、開いたディスクリプタの背後にJARを キャッシュしたままにすることがあります。その後、同じボディ内の jar:file:/proc/self/fd/N プローブは、 有効なクラス名でそれを再度開き、アノテーション付きクラスを初期化できます。 正確な1.2.83の構成は、AutoType無効かつ List<Object> を含む固定DTOを介して機能します。 したがって、バインドだけでは緩和策になりません。完全なウォークスルー: docs/MECHANISM.md。

セキュリティレビューの調査結果

併設のプロジェクト全体レビューでは、Fastjson 1.2.83の本番Javaファイル全193個にわたり、2,041行の呼び出し可能/静的初期化子を対象としました。以下の表は、影響が最も大きい結果を優先順位付けしたものです。すべてのFastjsonデプロイメントが影響を受けるという主張ではありません。このリポジトリはF105を直接再現しています。残りのエントリは、別途実施した封緘ソースレビューと限定されたラボ証拠を要約したものです。

優先度調査結果証明された結果重要な境界
1F105 — リモート @JSONType バイトコード実行JDK 8ダイレクト経路およびLinux/JDK 17の保持JAR /proc/self/fd/N 継続を含む、互換性のあるSpring Bootローダーを介した攻撃者供給クラスの初期化パーサーから到達可能な @type キャリア、互換性のあるBoot/TCCLローダー、イーグレス、SafeMode/IgnoreAutoTypeオフ、正確な攻撃者JARが必要。モダンな固定DTO経路ではさらに、ジェネリック値レーン(ラボでは List<Object> を使用)、Linux procfs、保持されたディスクリプタ、正確な名前の一致が必要。すべてのJDK、ローダー、OSで普遍的に機能するわけではない
2F1/F45 — TemplatesImpl コマンド実行無視されるボディプロパティを含む固定DTO APIを介したマーカーコマンド実行弱められたサーバーポリシーが必要: クラス許可、AutoType、プライベートフィールドの投入、または同等の経路。初期状態のデフォルト設定ではブロックされる
3F70/C016 — 無制限バッファリングとGZIP展開型付きbyte/InputStreamおよびアノテーション付きDTO経路が、出力上限なしで展開またはバッファリングされる。制約付きヒープでのJava OOMEを再現エンドポイント/スキーマと攻撃者バイトの到達可能性が必要。本番全体の停止は確認されていない
4F18/C089 — パーサースレッドのスタック枯渇深くネストされた通常のオブジェクト値が、デフォルトのパースで StackOverflowError を引き起こす可能性があるリクエストスレッドの可用性への影響。JVM全体またはサービス全体の不変なクラッシュではない
5F120/C162 — 固定スキーマHTTP SSRF/ローカルリソース読み込みボディで制御される JEditorPane/JTextPane.page がHTTPリクエストを実行し、制限付きの file: コンテンツをDocument状態に読み込む可能性があるアプリケーションがSwing型を宣言している必要がある。自動的なレスポンス外部送信やRCEは証明されていない
6F118/C160 — ハッシュ衝突による認可/データ整合性の失敗異なるUnicode FNV-1a-64衝突が、特権付きenum定数にバインドされたり、JSONPath変更を誤ったBeanセッターにルーティングしたりする可能性がある使用可能な衝突と下流の信頼、または公開されたJSONPath変更操作が必要。クラス許可やRCEは発生しない
7F121/C163 — 固定JdbcRowSet JNDI到達可能性正確なセッター順序により、ボディで選択された1つのアウトバウンドJNDI/LDAP接続が発生した証拠は接続まで: ネーミング応答、オブジェクトファクトリ、バイトコード読み込み、RCEはなし
8F2/F45 — デフォルトDNS解決攻撃者が制御するホスト名解決が、デフォルト設定かつ無視される固定DTOプロパティを介して機能するDNS/OOBインタラクションのみ。汎用HTTP SSRFやRCEではない

検証ラベル、前提条件、下位レベルの調査結果、修復の優先順位、明示的な否定的境界については、findings/FINDINGS.md を参照してください。

⚠️ 許可された用途のみ

このリポジトリは、所有している、または明示的にテストを許可されたシステムに対する教育、防御研究、および許可されたテストを目的としています。モダンラボの内部ネットワークでサポートされている場合、ホストの公開は 127.0.0.1 のみで行うよう要求されています。そのスクリプトは、テストをその隔離されたネットワーク内でのみ完全に実行します。モダンラボにはプロセス実行プリミティブはなく、固定のJVM内マーカーのみを設定します。レガシーJDK 8ラボは id を実行し、その出力を /tmp/PWNED に書き込みます。隔離したままにしてください。レガシーエクスプロイトやアクティブプローブを、許可されていないシステムに向けないでください。

自分の環境をスキャンする

scanner/ ディレクトリには、依存関係のないPython 3ツールが4つ同梱されています(pipインストール不要)。

  • fjdetect.py — デコードされたJSONリクエストボディまたは構造化JSONログをパッシブに検査し、リモートJARシードおよび /proc/self/fd や /dev/fd のシーケンスを探します。
  • fjscan_static.py — 脆弱な組み合わせ(コンテンツベースでメタデータ検証済みの1.2.83 × 実際のSpring Bootローダークラスコンテンツ)についてjars/wars/earsをインベントリ化します。プローブを含む1.2.48〜1.2.82リリースと、メタデータ/ファイル名のみの候補は、レビューのために別途報告されます。CIゲートに適しています(EXPOSED の場合は終了コード2)。
  • fjscan_probe.py — アクティブで安全な到達可能性チェック: 制御下にあるカナリー(組み込みリスナーまたはBurp Collaborator / interactsh)に対して @type を発射し、リソース取得コールバックを関連付けます。組み込みリスナーは空の404を返します。外部リスナーも同等に設定してください。コールバックはクラス読み込みやRCEを証明するものではありません。
  • fjpayload.py — 手動テスト用のリモートリソース取得ボディを生成します。実行を意図しない場合は、空/404リスナーのみを使用してください。
# 1) passive request/log inspection
python3 scanner/fjdetect.py --ndjson gateway.jsonl

# 2) inventory build artifacts / unpacked images (parallel)
python3 scanner/fjscan_static.py /path/to/artifacts --threads 16

# 3) active probe across many domains — simplest: --auto fires baseline + plain + escaped comparison
#    DNS probes per target and prints a rollup; DNS callbacks land in your Burp Collaborator
python3 scanner/fjscan_probe.py --collaborator <sub>.oastify.com --auto --targets domains.txt --threads 50
cat domains.txt | python3 scanner/fjscan_probe.py --collaborator <sub>.oastify.com --auto --targets -

# 4) bulk fetch payloads for manual testing (one per domain, stable correlation token)
python3 scanner/fjpayload.py <collab-or-ip> --targets-file domains.txt

domains.txt = 1行に1ターゲット — 完全な [METHOD ]URL またはベアドメイン(--scheme / --target-port / --path で展開される); # コメントは許可されます:

api.internal.example
POST https://svc.example/v1/ingest
10.0.0.7:8080

オプション

fjscan_probe.py(アクティブプローブ)

フラグデフォルト目的
--autooff最も簡単 — ターゲットごとにベースライン + プレーン + Unicodeエスケープ比較DNSプローブを送信し、集計を出力します。必要なのは --collaborator + --targets のみ
--canary-ip <ip>—組み込みリスナーモード。ターゲットから見たこのホストのIP
--collaborator <v>—外部OOB(IPv4 / 整数IP / ドットなしホスト / Collaboratorサブドメイン)
--probe-type <t>jsontype手動モード: jsontype = リモートリソース取得経路(jar:http 整数IP); dns = ドット付きホストを介した Inet4Address OOB(Collaborator互換); both
--targets <file|->—空でないターゲットリスト; - は標準入力から読み取ります(必須); 空またはコメントのみの入力はゼロ以外のコードで終了します
--threads N20同時リクエストワーカー数
--header 'K: V'—追加のリクエストヘッダー(繰り返し指定可能)。代表的なフロントエンドリクエスト用に、ブラウザ風の --user-agent がデフォルトで送信されます
--baseline '{"a":1}'—ターゲットごとに良性のコントロールボディも送信します。ベースライン/プローブのレスポンス差分は、コンテンツに敏感なエッジ、ミドルウェア、またはアプリケーション処理と整合的であり、裏付けが必要です
--max-redirects N3最大N回の同一オリジンリダイレクト、または標準の同一ホストHTTP:80→HTTPS:443アップグレードに従います(0 = なし)。HTTPSダウングレード、任意のポート/オリジン変更、クロスホストリダイレクトはブロックされます。アップグレード時には基本の非秘密ヘッダーのみが保持されます
--evasion {ukey,uval,both}none@type キー / クラス値を \uXXXX エスケープします(fastjsonはそれでもデコードします)。エスケープのみのコールバックは、デコードされたプローブデータがリテラルキーワードフィルターを通過したことと整合的ですが、それでもパーサー/バージョンの裏付けが必要です
--scheme / --target-port / --pathhttp / — / /parseベアドメインがどのように展開されるか
--methodPOSTデフォルトのHTTPメソッド
--wrap '{"u":{{P}}}'{{P}}プローブオブジェクトをフィールド内にネストします
--listen-port / --port19000 / 80組み込みカナリーポート / Collaboratorポート
--wait / --timeout10 / 8コールバックを待つ秒数 / リクエストごとのタイムアウト

fjscan_static.py(インベントリ): <paths…> · --threads N(デフォルト 8)· --json(マシン出力。いずれかが EXPOSED の場合、終了コード 2)。

fjpayload.py(ジェネレータ): <collaborator> · --targets-file/-f <file\|->(一括)· --port · --token · --wrap · --entry。

Collaboratorに関する注意: @JSONType の jar: シンクは typeName.replace('.','/') を実行するため、ホスト内の すべてのドットがスラッシュになります。ドット付きのBurp Collaboratorサブドメイン(abc.oastify.com)はそれを介して 配信できません(ツールは整数IP + URLパストークンにフォールバックします)。パブリックCollaboratorへのコールバックを 取得するには、--probe-type dns を使用してください。java.net.Inet4Address プリミティブはドット付きホストを 受け入れ、DNSインタラクション(<tok>.<sub>.oastify.com)を発火させ、Inet4Address パースプリミティブ + イーグレスを 確認します。これは前提条件の証拠であり、リモートJAR/FD終端の証明ではありません。scanner/README.md を参照してください。

マーカーのみのモダンJDKラボ(推奨)

要件: Docker + Docker Compose、および初回ビルド時にMaven Centralへのアウトバウンドアクセス(fastjson / spring-boot-loader / asmを取得するため)。

cd modern-fd
./scripts/static-safety-check.sh
./scripts/run-positive.sh
./scripts/run-controls.sh
ツールをダウンロード