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

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

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

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

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
CVE-2026-17544 — CVE-2026-17544 用エクスプロイト: PHP bcmath の OOB 書き込みをメモリのみの RCE に変換し、ランタイムのオフセットフリーレゾルバーで disable_functions と open_basedir をバイパスします。 | Kitploit
ツール/GitHubGitHub/r2qa/cve-2026-17544
脆弱性分析エクスプロイトウェブアプリケーション悪用ポストエクスプロイトレッドチーミングペイロード開発バイナリエクスプロイト
GitHubr2qa/cve-2026-17544

CVE-2026-17544

CVE-2026-17544 用エクスプロイト: PHP bcmath の OOB 書き込みをメモリのみの RCE に変換し、ランタイムのオフセットフリーレゾルバーで disable_functions と open_basedir をバイパスします。

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

人気

すべて見る →

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

すべてのツールを探索

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

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

CVE-2026-17544 — PHP bcmath OOB 書き込み → 普遍的なメモリのみの RCE

CVE-2026-17544 の実証コード(weaponized proof-of-concept)です。PHP の書き直された bcmath 拡張機能(bc_str2num)における領域外書き込みを利用します。これにより、公知の DoS のみ のクラッシュを、disable_functions と open_basedir の両方を同時に迂回する 完全かつ普遍的な、メモリのみによるリモートコード実行プリミティブ に変換します。

認可された研究・教育目的のみ。 自分が所有するシステム、または明示的にテストを許可されたシステムに対してのみ実行してください。

画像

TL;DR

  • バグ: bc_str2num は手動の scale で小数部を切り詰め、末尾のゼロを再トリミングしますが、fractional_end を更新しません。バッファは再トリミング後の長さでサイズ設定される一方、コピーはトリミング前の長さを使用するため、Zend MM ヒープへの制御可能な が発生します。
領域外ゼロ書き込み(OOB zero-write)
  • エクスプロイト: OOB ゼロ書き込みにより、隣接する zend_string の参照カウントがゼロにされます(長さは維持)。→ 参照カウント不整合(refcount-desync)による use-after-free → 巨大文字列による相対 R/W → フォールトセーフな絶対任意読み取り → 実行時シンボル解決 → 完全に データのみ(data-only) のネイティブ関数呼び出し。
  • ペイロード: 偽の zend_class_entry + インラインの function_table + 偽の zend_function{ handler = zif_shell_exec } を構築し、それをメソッドとして呼び出します。コマンド出力は文字列として返され、レスポンス/stdout に配信されます。
  • ハードコードされたオフセットなし。 ベースアドレス、.data、対象シンボルはすべて、メモリをスキャンして実行時に解決されるため、単一のファイルがビルドやディストリビューションをまたいで動作します。

  • 脅威モデル — 最初にお読みください

    これは サンドボックスエスケープ / ポストエクスプロイテーション のプリミティブであり、リモート入力のみの RCE ではありません。

    シナリオ結果
    攻撃者がすでに PHP を実行できる(webshell、デシリアライゼーション、eval シンク)が、disable_functions + open_basedir によって制限されている✅ ネイティブ RCE(この PoC)
    アプリケーションが生のユーザー入力に対して bcmath 関数を単に呼び出すだけ、例: bccomp($_POST['v'])❌ DoS / クラッシュのみ

    攻撃者の入力に対する単一の bcmath 呼び出しは、フィードバックのない ブラインド(blind) な OOB ゼロ書き込みを 1 回発生させます。完全な RCE には、ヒープをグルーミングし、R/W プリミティブを構築し、リゾルバを実行するための任意の PHP 実行が必要であり、そのいずれも関数の引数として表現できません。したがって、入力のみの露出における現実的な上限は リモートサービス妨害(remote denial of service) です。コード実行には既存の PHP 実行コンテキストが必要であり、この PoC はそのコンテキストをサンドボックスから解放します。


    影響を受けるバージョン

    このバグは 書き直された bcmath(PHP 8.4 / 8.5 系)にのみ存在します:

    PHP ブランチ脆弱性
    7.x、8.0 – 8.3なし(旧 libbcmath、別の bc_str2num)
    8.4.0 – 8.4.23あり
    8.5.0 – 8.5.8あり
    ≥ 8.4.24 / ≥ 8.5.9パッチ済み

    PHP 8.4.23 および PHP 8.5.8、amd64 において、同じ未修正ファイルでエンドツーエンドの検証済み(uid=0、出力キャプチャあり)— Zend 構造体のレイアウトは 8.4 / 8.5 で同一です。


    要件 / 前提条件

    • Linux amd64 環境。
    • bcmath が有効な、脆弱性の影響範囲内の PHP 8.4/8.5 バイナリ。
    • 連続した バイナリマッピング(すべての標準ディストリビューション / プロダクションビルド)。実行時のベーススキャンは .text から ELF ヘッダーまでページ単位で降下します。これは、連続マッピングされた任意のバイナリで安全です。マップされていない 2 MB のギャップを持つ人為的な -z separate-code ビルドのみ、ブラインドスキャンでは自動解決できません(プロダクションでは見られません)。
    • Web 配信の場合、リクエストごとの exit() がサーバーを停止させないように、リクエストの分離が必要です: php-fpm、Apache mod_php、または PHP_CLI_SERVER_WORKERS>0 のビルトインサーバー。

    使い方

    CLI

    root@kitploit:~
    php exploit.php "id; uname -a"
    

    Web(ポストエクスプロイテーション、サンドボックス化された PHP コンテキスト内)

    例として shell.php として配置し、次に:

    root@kitploit:~
    GET  /shell.php?cmd=id
    POST cmd=id
    

    コマンド出力は zif_shell_exec を介してキャプチャされ、レスポンスボディに書き込まれます。


    動作の仕組み(詳細)

    1. トリガー + グルーミング(Trigger + groom)。 固定サイズの文字列をスプレーし、穴を開けて、脆弱な bccomp() を実行し、OOB ゼロ書き込みが隣接する zend_string の参照カウントのみに着弾するようにします(長さは維持)。
    2. 参照カウント不整合(refcount-desync)による UAF。 参照がまだぶら下がっている間に、被害者文字列が時期尚早に解放されます。
    3. 巨大文字列(Giant string)。 解放されたスロットはオブジェクトによって再利用され、ぶら下がった文字列の長さフィールドが巨大な値になります → ヒープ上の相対読み取り/書き込み。
    4. 絶対読み取り(Absolute read)。 偽の zend_reference(間接参照経由)により、ターゲットの参照カウント付きヘッダーに触れることのない、フォールトセーフな絶対任意読み取りが得られます。
    5. 解決(Resolve)。 リークした .text ポインターから: ページ単位で ELF マジック(ベース)まで降下し、プログラムヘッダーを解析して .data を見つけ、次に .data 内でハンドラーが .text を指す shell_exec の zend_function_entry をスキャンします。
    6. データのみの呼び出し(Data-only call)。 偽の zend_class_entry、単一バケットを持つインラインの function_table(正しい zend_string ハッシュ、終端された衝突チェーン)、およびハンドラーが zif_shell_exec である偽の zend_internal_function を構築します。プローブオブジェクトのクラスポインターを破壊し、メソッドを呼び出します。出力は返されてエコーされます。

    ファイル

    • exploit.php — 普遍的なメモリのみのエクスプロイト(CLI + Web)。

    クレジット

    • 公開された元の DoS プルーフオブコンセプト: boreas37/cve-2026-17544-poc。
    • メモリ開示 / データのみの呼び出し手法は、先行する PHP エクスプロイテーション研究に触発されたものです。

    免責事項

    セキュリティ研究および教育のために提供されます。著者は誤用について責任を負いません。テストを許可されていないシステムに対して展開しないでください。

    ツールをダウンロード