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

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

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

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

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
CVE-2024-47051 — Mautic < 5.2.3 認証済みRCE | Kitploit
ツール/GitHubGitHub/mallo-m/cve-2024-47051
脆弱性分析コード分析エクスプロイトウェブアプリケーション悪用ペネトレーションテストペイロード開発
GitHubmallo-m/cve-2024-47051

CVE-2024-47051

Mautic < 5.2.3 認証済みRCE

リポジトリを見る
531年前未レビュー

人気

すべて見る →

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

すべてのツールを探索

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

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

概要

アップロードされたファイルの内容、タイプ、拡張子のサニタイゼーションが不十分なため、Asset Edition 機能では、認証された攻撃者が Web ディレクトリ内に任意の PHP コードを書き込み、そのファイルが書き込まれた場所を特定することができます。これにより、リモートコード実行(RCE: Remote Code Execution)が発生します。

また、パストラバーサルを利用して、Web ユーザーが変更権限を持つファイルシステム上の任意のディレクトリを再帰的に削除することも可能です。

詳細 - RCE

/assets/view/{assetID} ルート経由で Asset を編集する際、その Asset のファイルを変更する機能が提供されます。

新しいファイルをアップロードすると、最終的に app/Bundles/AssetBundle/Controller/AssetController.php 内の以下の関数が呼び出されます。

public function editAction(Request $request, UploaderHelper $uploaderHelper, AssetModel $model, $objectId, $ignorePost = false)

アップロードのロジックは次の箇所にあります。

root@kitploit:~
        if (!$ignorePost && 'POST' == $method) {
            $valid = false;
            if (!$cancelled = $this->isFormCancelled($form)) {
                if ($valid = $this->isFormValid($form)) {
                    $entity->setUploadDir($this->coreParametersHelper->get('upload_dir'));
                    $entity->preUpload();
                    $entity->upload();

特に注目すべきは と メソッドです。これらが実際のファイル書き込みをディスク上で処理します。 最初の欠陥は の にあります。この実装では任意のファイル拡張子を指定できるため(通常は allowed_extensions 配列によって提供される保護をバイパスします):

ツールをダウンロード
preUpload()
upload()
app/Bundles/AssetBundle/Entity/Asset.php
preUpload()
root@kitploit:~

            $filename  = sha1(uniqid(mt_rand(), true));
            $extension = $this->getFile()->guessExtension();

            if (empty($extension)) {
                // get it from the original name
                $extension = pathinfo($this->originalFileName, PATHINFO_EXTENSION);
            }

            $this->path = $filename.'.'.$extension;

$extension = $this->getFile()->guessExtension(); の行は、.php で終わるファイル名と <?php タグで始まるコンテンツを提供すると NULL を返します。 したがって empty($extension) のチェックは true と評価され、ファイル拡張子は pathinfo() 呼び出しによって抽出されるため、任意のコンテンツと拡張子を持つ一時ファイルをアップロードできます。ファイル名は sha1() で生成されるため、実際の名前を制御することはできません。

その後、後続の upload() メソッド内で、ファイルは次の呼び出しにより Web ディレクトリ内のディスクに実際に書き込まれます。

$this->getFile()->move($this->getUploadDir(), $this->path);

これは私たちの任意の拡張子($this->path 変数に含まれる)を使用しています。 ファイル名は、Asset 詳細ページ(/assets/view/{assetId})を更新して「ローカルファイル名」テーブルエントリで確認できます。

注記: これは新しい Asset を作成するときに送信されるリクエストを変更することでも機能します。この場合、newAction() 関数が呼び出されますが、ロジックは同じであり、欠陥は依然として preUpload() および upload() メソッドにあります。

PoC - RCE

PoCはあと1か月ほど公開されません。

これは、このソフトウェアに依存する組織が、スクリプトキディによる破壊を恐れずにパッチを適用する時間を与えるためです。

その後、このリポジトリには完全なエクスプロイトスクリプトと証明が更新されます。とにかく、このページにはすでに十分な情報があります。

詳細 - 任意ファイル削除

一時アップロードの検証時(/s/assets/new または /s/assets/edit/{assetId} 経由)、一時ファイルを保存するディレクトリはリクエストの最後に再帰的に削除されます。 一時ディレクトリの名前を保持するパラメータはパストラバーサル攻撃の影響を受けやすく、認証された攻撃者は、Web ユーザーにその権限があれば、システム上の任意のディレクトリを削除できます。 これによりデータの損失、あるいはサーバーが root ユーザーで実行されている場合はファイルシステム全体の破壊につながる可能性があります。

PoC - 任意ファイル削除

以下のエンドポイントを使用して、システム上に存在する任意のファイルを指定します。ファイルが存在する場合、サーバーはそれが保存されているディレクトリの削除を試みます。

影響

サーバー乗っ取り サービス拒否(DoS) データ損失

タイムライン

  • 2024年10月14日 : 最初の連絡と勧告を Mautic チームに送信
  • 2024年11月12日 : エクスプロイトスクリプトと改善提案を開発チームに送信
  • 2024年12月13日 : 2回目の連絡
  • 2025年1月21日 : デプロイ用パッチが準備完了
  • 2025年2月25日 : CVE が割り当てられ公開