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

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

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

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

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
CVE-2026-20217 — 許可されたラボ環境で、ZendToの未認証ClamAV RCEとroot権限昇格を再現する。固定されたDockerターゲット、フェイルクローズ検証、nonceにバインドされた出力、およびクリーンアップを備える。 | Kitploit
ツール/GitHubGitHub/securifera/cve-2026-20217
特権昇格脆弱性分析エクスプロイトウェブアプリケーション悪用ポストエクスプロイトウェブセキュリティペネトレーションテストレッドチーミング
GitHubsecurifera/cve-2026-20217

CVE-2026-20217

許可されたラボ環境で、ZendToの未認証ClamAV RCEとroot権限昇格を再現する。固定されたDockerターゲット、フェイルクローズ検証、nonceにバインドされた出力、およびクリーンアップを備える。

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

人気

すべて見る →

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

すべてのツールを探索

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

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

ZendTo 6.15-8 / ClamAV 正確プロファイル RCE と root 変種の再現

このディレクトリは、アカウント不要の ZendTo→ClamAV コード実行チェーンと、その別系統のデフォルトプロファイル Smarty/root-cron 継続に対する、スタンドアロンかつ認可済みラボ向けの再現バンドルです。含まれるもの:

  • 実行可能な PoC 依存関係クロージャ一式
  • Docker ターゲットトポロジ構築用のスクリプトと来歴情報
  • 試験済み systemd/socket ライフサイクルに一致する Docker Compose 定義
  • フェイルクローズドのイメージ、パッケージ、バイナリ、設定、CVD、DAC、cron、PHP、MAC、ファイルシステム意味論のチェック
  • ラボ限定の検証機能 1 件とクリーンアップ用のヘルパー

初期 PoC は、標準の clamav サービスアカウントとして呼び出し元が選択したコマンドを実行します。オプションの変種は、そのアカウント不要の足掛かりを継続し、root として呼び出し元が選択したコマンドを実行します。いずれもデフォルトで id を実行し、リテラルな /root/flag パスを拒否し、ノンスバインドの出力を HTTPS で返します。

脆弱なグループ、ディレクトリ、Smarty、root-cron の各関連は、ZendTo Debian パッケージ/インストーラのデフォルトです。ただし root への到達可能性は環境条件に依存します。この正確なポジティブフィクスチャは、ext4 ベースの /var/zendto ボリューム、機能する PHP CLI の FFI/POSIX/exec、および非制限 (unconfined) の clamd プロセスを使用します。AppArmor/SELinux を強制するか、互換性のないファイルシステム意味論を使用すると、他の点では標準的なインストールでも継続がブロックされる可能性があります。

これは、同梱の使い捨てフィクスチャ、または明示的にテストを許可された別のシステムでのみ使用してください。

固定されているもの

基準となる正確なターゲットは、意図的にバージョン管理されていないローカル成果物で、次の場所にあります:

root@kitploit:~
image/zendto-installer-systemd-debian12.tar.zst

Git は Docker イメージアーカイブを無視します。正確なリグレッションの前に、認可済みのローカルコピーをそのパスに配置してください。scripts/setup.sh は記録された SHA-256 とイメージ ID を要求します。source-recipe/README.md には、インストーラ由来イメージの構築とキャプチャ方法が記載されています。ライブのパッケージリポジトリからの新規ビルドはトポロジテストには有用ですが、固定ターゲットとバイト単位で同一であるとは見なされません。

セットアップとコンテナエントリポイントは、以下のプロファイルからの不一致をすべて拒否します:

完全な値は PROFILE.json にあります。

これは ClamAV パッケージのバージョンだけを固定するよりも強力です。アロケータの構築は glibc、CVD 駆動のパーサトラフィック、ワーカー設定、および正確なターゲットライブラリにも依存します。キャプチャしたイメージでは FreshClam は無効化されており、daily.cvd がずれたり daily.cld が出現したりすると起動は失敗します。

親ワークスペース内で現在長時間実行中の研究コンテナは、クリーンなフィクスチャではありません。後日のテストで外部送信者フォームを無効化し、daily データベースを更新したためです。これらの変更はここでは意図的に除外されています。このバンドルは、ネイティブ実行が実証されたクリーンなベースラインを使用します。

ホスト要件

  • x86-64 Linux(Docker Engine と Docker Compose v2 を搭載)
  • 特権コンテナを実行する権限
  • cgroup v2 と /sys/fs/cgroup
  • zstd、venv 付き Python 3、C コンパイラ、file、GNU readelf
  • 厳しいコンテナ制限なしで ClamAV のネイティブパーサを実行できる十分なメモリ
  • ローカルイメージ成果物と実行中ターゲット用に少なくとも 1 GiB の空きディスク

ターゲットはホストカーネルと ASLR 実装を共有します。したがって、カーネル依存のマッピング動作は移植性の変数として残ります。

一度に 1 つの systemd フィクスチャだけがホスト cgroup 名前空間を共有する必要があります。元の研究マシンでは、古いフィクスチャを削除せずに停止してください:

root@kitploit:~
docker stop zendto-installer-systemd-native

後で docker start zendto-installer-systemd-native で復元できます。

正確なターゲットを起動する

このディレクトリから:

root@kitploit:~
./scripts/verify-bundle.sh
./scripts/setup.sh

セットアップスクリプトは:

  1. 不変のソースマニフェストとローカルイメージの SHA-256 を検証します。
  2. レジストリに接続せずに正確なイメージをロードして再タグ付けします。
  3. 固定された PoC Python 依存関係を含む .venv を作成します。
  4. オペレータの libc 用に小さなローカル PESpin ヘルパーを再ビルドします。
  5. ローカルの libclamav 成果物とすべてのターゲットガジェットウィンドウをチェックします。
  6. Compose モデルを検証します。
  7. 新しい名前付き /var/zendto ボリュームを作成し、systemd を起動します。
  8. パッケージバージョン、ターゲットハッシュ、CVD、Apache、clamd、ソケットアクティベーションを検証します。
  9. clamav として実行される使い捨ての renameat2(RENAME_EXCHANGE) 操作を含む、デフォルトの root 変種前提条件を証明します。

デフォルトのエンドポイントはループバックのみです:

root@kitploit:~
http://127.0.0.1:18084/
https://127.0.0.1:18447/

証明書は自己署名です。PoC はすべての HTTP リクエストで意図的に verify=False を使用します。セットアップ前に別のループバックポートを選択できます:

root@kitploit:~
export ZENDTO_HTTP_PORT=19084
export ZENDTO_HTTPS_PORT=19447
./scripts/setup.sh

後続の Compose/ヘルパーコマンドでも同じ環境変数を使用してください。

いつでもターゲットを確認できます:

root@kitploit:~
./scripts/verify-target.sh
docker compose ps

このフィクスチャにおける CAPTCHA/メール境界

クリーンなインストーラベースラインには以下があります:

root@kitploit:~
allowExternalUploads = TRUE
confirmExternalEmails = TRUE
captcha = google

その CAPTCHA とメール値はインストーラのプレースホルダであるため、未改変のアーカイブは実際には公開確認メールを配信できません。ネイティブのリグレッションテストでは、その完了済みアプリケーションステップを同等の外部送信者 AuthData 行で表現しただけです。ターゲットのコード、パッケージ、スキャナ、権限、エクスプロイトパスはパッチ適用されていません。

その 1 つのラボ行とモード 0600 のトークンファイルを以下で作成します:

root@kitploit:~
./scripts/mint-lab-auth.py [email protected]

トークン値は表示されず、以下に保存されます:

root@kitploit:~
.lab/upload-auth-token.txt

このローカルヘルパーは、外部アップロード無効のデプロイメントがリモートで悪用可能であるという主張ではありません。公開の外部送信者フォームが無効な場合、トークンファイルが提供されても PoC は ClamAV の手前で正しく停止します。

通常どおり構成された認可済みデプロイメントでは、--external-auth-token-file を省略してください。検証ページを手動で開き、CAPTCHA を解き、攻撃者制御のメールボックスでターゲット生成のメッセージを受信し、その URL/トークンを隠しプロンプトに貼り付けます。

1. リモートのみの列挙

このモードは CAPTCHA、メール、ケイパビリティ、アップロード、ログイン POST、スキャナコンテンツを一切送信しません。--skip-clamd-tcp-probe はオプションの読み取り専用ネイティブ TCP/3310 チェックも抑制します:

root@kitploit:~
mkdir -p -m 700 work

.venv/bin/python poc/zendto_6_15_8_unauth_clamav_rce.py \
  https://127.0.0.1:18447 \
  --enumerate-only \
  --skip-clamd-tcp-probe \
  --fingerprint-json work/fingerprint.json

列挙は依然として通常の Web アクセスログを生成し、通常のアプリケーションキャッシュを初期化する可能性があります。その Debian/Ubuntu Apache レイアウトの結果は、ネイティブパッケージ、ビルド ID、libc、CVD、ソケットポリシー、MAC 状態を証明するものではありません。ローカルの Docker 検証スクリプトが、このフィクスチャに対するその証拠を提供します。

2. ケイパビリティと受信者のドライラン

これはラボベアラーと受信者ポリシーを検証しますが、ファイルやスキャナコンテンツは送信しません:

root@kitploit:~
.venv/bin/python poc/zendto_6_15_8_unauth_clamav_rce.py \
  https://127.0.0.1:18447 \
  --sender-email [email protected] \
  --recipient [email protected]. \
  --external-auth-token-file .lab/upload-auth-token.txt \
  --probe-only \
  --no-open-browser

[email protected]. は、このインストーラフィクスチャの作成時に入力された、意図的に変わった test. 内部ドメイン値に一致します。カスタムの実運用デプロイメントでは、実際の認可済み受信者が必要になる場合があります。

3. 破壊的なエンドツーエンドのコード実行

警告: これは無害なスキャナチェックではありません。最初の試行の前に、リモートモードは EICAR を送信し、PESpin 判別子で clamd を意図的にクラッシュさせ、ソケット起動の復旧を証明し、追加のクラッシュ/復旧サイクルを伴う 2 つの最終コードページプローブを実行します。拒否されたマッピングは意図的に clamd を強制終了します。

新しい作業ディレクトリと無害なコマンドを使用してください:

root@kitploit:~
run_dir="work/run-$(date +%Y%m%d-%H%M%S)"
mkdir -m 700 "$run_dir"

.venv/bin/python poc/zendto_6_15_8_unauth_clamav_rce.py \
  https://127.0.0.1:18447 \
  --sender-email [email protected] \
  --recipient [email protected]. \
  --external-auth-token-file .lab/upload-auth-token.txt \
  --oracle-conditioned-attempts 72 \
  --command 'id; uname -a' \
  --workdir "$run_dir" \
  --keep-workdir

推奨される条件付きルートは、1 つの破損キャリアを送信する前に、有用なニブル 8 マッピングをテストします。現在の 3 レイアウト集約は後日のライフサイクル修正です。過去の 1 レイアウトオラクルと同一プロセス RCE ステージは docs/ に別途文書化されています。

ブラインドの固定ニブル 6 フォールバックは明示的に利用可能です:

root@kitploit:~
.venv/bin/python poc/zendto_6_15_8_unauth_clamav_rce.py \
  https://127.0.0.1:18447 \
  --sender-email [email protected] \
  --recipient [email protected]. \
  --external-auth-token-file .lab/upload-auth-token.txt \
  --restart-resample-attempts 72 \
  --command 'id; uname -a' \
  --workdir work/blind-run \
  --keep-workdir

独立した一様ニブルモデルの下では、47 個の新しいマッピングで約 95%、72 個で約 99% になります。これらは幾何分布のマッピング確率であり、エンドツーエンドの信頼性保証ではありません。拒否された各マッピングは、スキャン時間を除いて、少なくとも 12 秒の復旧遅延に加えて強制される 40 秒のワーカー退役期間を要します。72 回試行の実行は 1 時間を超える可能性があります。

結果はコールバックやウェブシェルから読み取られるわけではありません。DSO は別の 30 分間の出力専用 AuthData ベアラーを作成し、clamav として /bin/sh -c を実行し、匿名の ZendTo ページを通じて上限付きの stdout/stderr を返します。成功には、以下のすべてが一致する 1 つのフレーム化された結果が必要です:

  • zendto_unauth_clamav_rce_result=1
  • 正確な実行 ID とコマンド SHA-256
  • 正確な libclamav ビルド ID マーカー
  • 報告された uid/euid/gid
  • 完了マーカーと終了/タイムアウト/シグナル状態

証明が欠落、重複、切り詰め、または不一致の場合は実行失敗です。

4. オプション: アカウント不要の root 継続

これは、./scripts/verify-target.sh が [target] と [privesc-target] の両方の成功を報告した後でのみ実行してください。ラッパーはまず同じアカウント不要の ClamAV ステージを実行し、その正確な上限付きアーミング証明を要求してから、変更されていない標準の root cron コンシューマを待ちます:

root@kitploit:~
.venv/bin/python poc/zendto_clamav_to_root_smarty_privesc.py chain-unauth \
  https://127.0.0.1:18447 \
  --sender-email [email protected] \
  --recipient [email protected]. \
  --external-auth-token-file .lab/upload-auth-token.txt \
  --oracle-conditioned-attempts 72 \
  --root-command 'id; uname -a' \
  --keep-workdir

トークンファイルオプションは、フィクスチャの完了済みメール代替手段にすぎません。認可された公開ワークフローでは省略し、CAPTCHA/メールプロンプトを手動で完了してください。chain-unauth は ZendTo のユーザー名やパスワードを使用しません。

root ステージは、ラッパーがその引き継ぎを自動化しているにもかかわらず、意図的に分離されています。それは:

  1. 非認証の savechunk.php を通じてノンスバインドの PHP アーマーをアップロードします。
  2. その SHA-256 ゲート付きコマンドを初期 ClamAV RCE に提供します。
  3. clamav としてクローンされた Smarty コンパイルディレクトリをアトミックに交換します。
  4. 標準の毎時 25 分 root クリーンアップジョブにガード付きラッパーをロードさせます。
  5. コマンド実行前に本来のコンパイルディレクトリを復元します。
  6. verify=False で /zendto-root-result-<nonce>.json をダウンロードし、euid=0、正確なコマンドハッシュ、復元マーカー、完了ノンスを要求します。

Cron により最終ポーリングはほぼ 1 時間待つ可能性があります。デフォルトのタイムアウトは 3900 秒です。root コマンドは 1024 バイトと 30 秒に制限され、stdout と stderr はそれぞれ最大 1 MiB です。そのノンスアドレス指定の JSON は、この使い捨てラボでは意図的に Web から読み取り可能になっているため、無害なテスト出力のみを使用してください。

手動オーケストレーションの場合、emit はアカウント不要 PoC の --command に渡す正確なコマンドを出力します。アーミング証明の後、出力された実行 ID と正確な root コマンドの SHA-256 を指定して poll を使用してください。構築と監査記録については docs/SMARTY_ROOT_BRIDGE.md を参照してください。

この変種は、前提条件が欠落している場合に安全に停止することが期待されます。アームを重複させたり、あいまいな実行を再試行したりしないでください。失敗したステージは、受信 PHP ファイル、隠しクローン、ロック、または交換されたキャッシュを残す可能性があります。root テストごとに新しいフィクスチャを使用してください:

root@kitploit:~
./scripts/reset-lab.sh --yes-delete-lab-volume
./scripts/mint-lab-auth.py [email protected]

再現性と障害処理

clamd プロセスごとに 1 回の成功する破損がサポートされます。2 回目の呼び出しが妥当なのは、新しい実行の破壊的リサイクルプローブが期待どおりのスキャナ障害応答を返し、EICAR がアクティブなソケットを通じた復旧を証明した場合のみです。実行 ID、ステージングされたチャンク名、結果ベアラー、クライアント作業ディレクトリを再利用しないでください。

リダイレクト、ネットワークタイムアウト、あいまいなボディ/ステータス、予期しないクリーン応答、または EICAR 復旧の失敗があればすぐに停止してください。不確かなデーモンに以前の破損リクエストを手動で再送信しないでください。

パッケージ化されたサービスには Restart=no があります。再現性は、自動サービス再起動ポリシーではなく、依然としてアクティブな clamav-daemon.socket に由来します。ソケットが無効化または起動制限されている場合、意図的なクラッシュによってスキャナが利用不能になる可能性があります。

残存物とクリーンアップ

期待されるターゲット残存物には、アクセス/エラーログ、clamd のクラッシュ記録またはコア、クリーンなオラクルガードからの上限付き孤児クレームファイル、1 つの追記専用 /var/zendto/incoming/Bridge<nonce>.1 DSO、および短命の AuthData 行が含まれます。標準のクリーンアップが通常の孤児クレームを期限切れにするのは 1 日以上経過後です。

root 変種はさらに、ノンス PHP アーマー、隠しクローンとロック、root 所有の公開 JSON 結果、プライベートな /run stdout/stderr を残します。成功したラッパーは root コマンド実行前に本来の templates_c を復元しますが、これらの証拠ファイルはコンテナとボリュームがリセットされるまで残ります。

テスト後にラボのアップロードベアラーを取り消します:

root@kitploit:~
./scripts/revoke-lab-auth.py

証拠ボリュームを保持したままターゲットを停止します:

root@kitploit:~
docker compose down

クリーンな新しいフィクスチャを得るには、このプロジェクトの名前付きボリュームのみを明示的に削除し、固定イメージから再起動します:

root@kitploit:~
./scripts/reset-lab.sh --yes-delete-lab-volume

証拠として必要であれば、リセット前に作業ディレクトリとフィンガープリント JSON をアーカイブしてください。

ディレクトリマップ

root@kitploit:~
docker-compose.yml                  exact systemd/socket target topology
PROFILE.json                        exact package/hash/CVD profile
image/*.tar.zst                     local ignored target artifact
poc/                                no-account driver and support modules
third_party/                        minimized builder/source/binary closure
scripts/setup.sh                    image/client/Compose setup
scripts/verify-bundle.sh            delivery-manifest verification
scripts/verify-target.sh            fail-closed target verification
scripts/verify-privesc-target.sh    root-variant semantic preflight
scripts/mint-lab-auth.py            local completed-email substitute
scripts/revoke-lab-auth.py          remove that lab bearer
scripts/reset-lab.sh                explicit clean-volume reset
source-recipe/                      installer provenance, not exact rebuild
docs/                               technical regression/audit notes

source-recipe/install.ZendTo.tgz とそのランブックは、来歴情報とソース構築のために含まれています。新しいライブリポジトリビルドを正確なものとして扱わないでください。インストーラはすべてのパッケージや ClamAV データベースを固定しません。正確なリグレッションには、無視されるローカルイメージアーカイブが PROFILE.json と一致する必要があります。

MANIFEST.sha256 は、それ自体を除くすべての配信ファイルを対象とします。Docker イメージアーカイブ、ホストコンパイル済みの third_party/installer-runtime/clamav-pespin/pespin_summit ヘルパー、および生成された .venv、.lab、work、__pycache__ ツリーは無視されます。セットアップはマニフェスト化された C ソースからヘルパーを再ビルドし、ローカルイメージを個別に検証します。

パッケージング時の静的、リモート事前フライト、確率的再サンプリング、および計装されたエンドツーエンドの各チェックは docs/BUNDLE_VALIDATION.md に記録されています。この記録は、リモート観測と、ローカルで観測されたモジュールベースが明示的に供給された 1 回の検証実行を区別しています。

ツールをダウンロード
コンポーネント試験済みの正確な値
Docker イメージ IDsha256:de6d2f06ca04943362a9bdec5026e808448953728f31bd926343a4ed2ca2ef7c
ZendTo6.15-8
ClamAV/libclamav パッケージ1.4.3+dfsg-1~deb12u2
libclamavlibclamav.so.12.0.3、SHA-256 55e3cd94…027c
libclamav ビルド IDe6427ab62146ee3001fe463d12e797e9d25bf81a
glibc2.36-9+deb12u14、SHA-256 6b4a4535…421
main データベースv63、SHA-256 0b2182d2…365
daily データベースv28082、SHA-256 cddbcccf…906
bytecode データベースv339、SHA-256 6d4aa01f…ffb
clamdMaxThreads 12、IdleTimeout 30、Restart=no
ライフサイクル有効な clamav-daemon.socket、systemd PID 1
Web ランタイムApache 2.4.68、PHP 8.2.32
MAC ポスチャ非制限 (unconfined) の特権 Docker フィクスチャ
root ブリッジwww-data 内の標準 clamav; /var/zendto root:www-data 0775
root コンシューマ標準の root クリーンアップ cron、毎時 25 分
Smarty キャッシュ決定論的な Smarty 4.5.4 コンパイル済み zendto.conf
交換ファイルシステムext4 ベースの名前付き /var/zendto ボリューム