認証済みの任意ファイルアップロードによるリモートコード実行 Webkul Krayin CRM 2.2.x における CVE-2026-38526 の技術分析と制御された再現。
認証済みの任意ファイルアップロードによるリモートコード実行 Webkul Krayin CRM 2.2.x における CVE-2026-38526 の技術分析と制御された再現。
CVE-2026-38526 は、Webkul Krayin CRM 2.2.x に影響を与える認証済みの任意ファイルアップロード脆弱性です。
この脆弱な機能は、アプリケーションの TinyMCE アップロードエンドポイントを通じて公開されています:
POST /admin/tinymce/upload
アプリケーションは、アップロードできるファイルの種類を十分に制限していません。認証済みユーザーは、.php などのサーバー側で実行可能な拡張子を持つファイルを送信できます。アプリケーションはアップロードされたファイルを保存し、そのアクセス可能な URL を返します。
デプロイ環境がアップロード場所からの PHP 実行を許可している場合、アップロードされたファイルはその後 Web サーバー経由でリクエストでき、その結果、Web アプリケーションプロセスのコンテキストでリモートコード実行が発生します。
公開されている CVE レコードでは、この脆弱性は CVSS 3.1: 9.9 (Critical) と評価されています。
このリポジトリには、この脆弱性に関する私自身の技術分析と制御された再現が含まれています。
この脆弱性はすでに CVE-2026-38526 として公開されています。本研究は、この脆弱性の発見を主張するものではありません。本研究の目的は、脆弱な実装を理解し、制御された環境で悪用経路を再現し、ファイルアップロードの問題がリモートコード実行に変わる条件を検証することでした。
この脆弱性は Hack The Box GCSB 2026 Nexus machine でも使用されており、この問題を研究するための実践的な環境が提供されました。
製品: Webkul Krayin CRM 影響を受けるバージョン: 2.2.x 脆弱性: 任意ファイルアップロード 結果としての影響: リモートコード実行 認証: 必要 攻撃ベクトル: ネットワーク CWE: CWE-434 — 危険な種類のファイルの無制限アップロード CVSS: 9.9 Critical CVE: CVE-2026-38526
この脆弱な機能は以下によって処理されます:
/admin/tinymce/upload
このエンドポイントは、file パラメータを通じてアップロードされたファイルを受け付けます。 関連するアプリケーションロジックは、保存されるファイル名を元のファイル名から導出し、その元の拡張子を保持します。

この動作が重要なのは、アプリケーションが単にアップロードされたオブジェクトを受け入れているのではなく、攻撃者が制御する実行可能な拡張子を保持し、その結果生じたオブジェクトをアプリケーションのストレージ機構を通じてアクセス可能にしているためです。
主な問題は、アップロードされたファイルに対するサーバー側の検証が不十分であることです。
アプリケーションは、保存されるファイル名を構築する際に、クライアントが提供した元の拡張子を使用します。実行可能なファイルタイプがストレージ層に到達するのを防ぐ、十分に制限的な許可リストが存在しません。
関連するフローは次のとおりです

生成されたファイル名を使用しても、根本的な問題は解決されません。
例えば、shell.php を .php のような生成されたファイル名に変更しても、サーバーが .php ファイルを実行可能な PHP コードとして解釈し続ける限り、アップロードされたファイルが安全になるわけではありません。
無制限のアップロードは、自動的にリモートコード実行を意味するわけではありません。
実行経路は、アップロードされたファイルに対するサーバーの処理に依存します。
脆弱なデプロイシナリオでは、チェーンは次のようになります

アップロードディレクトリに対して PHP 実行が無効化されている場合、根本的な任意ファイルアップロードの弱点は残るものの、直接的な RCE 経路は防止できます。
wget:
wget https://raw.githubusercontent.com/Ish3ng0m4/CVE-2026-38526-KrayinCRM/main/poc/upload.py
wget https://raw.githubusercontent.com/Ish3ng0m4/CVE-2026-38526-KrayinCRM/main/poc/marker.php
curl:
curl -LO https://raw.githubusercontent.com/Ish3ng0m4/CVE-2026-38526-KrayinCRM/main/poc/upload.py
curl -LO https://raw.githubusercontent.com/Ish3ng0m4/CVE-2026-38526-KrayinCRM/main/poc/marker.php
2. ファイルを以下に配置します
poc/
├── upload.py
└── marker.php
3. Python環境を作成し、依存関係をインストールします
python3 -m venv .venv
source .venv/bin/activate
pip install requests
4. PoCを実行可能にします
chmod +x poc/upload.py
6. 実行します
python3 poc/upload.py \
--url http://[Lab_IP:PORT] \
--email [email protected] \
--password 'YOUR_PASSWORD'
この悪用には、脆弱な機能に到達できる認証済みアカウントが必要です。
概要は以下のとおりです:
結果として得られる実行コンテキストは、基盤となるデプロイメントによって決まります。一般的なLinuxデプロイメントでは、これは次のようなWebサーバーサービスのアカウントになる場合があります:
www-data
これは自動的にオペレーティングシステムのroot権限を提供するものではありません。さらなる影響は、侵害された環境の権限と設定に依存します。
脆弱な動作は、3つの重要な操作に要約できます。
アップロードされたファイルを取得する
$file = request()->file('file');
アプリケーションはクライアントから提供されたファイルを受け取ります。
クライアントが制御する拡張子を保持する
$filename = md5($file->getClientOriginalName().time())
.'.'.$file->getClientOriginalExtension();
ファイル名自体は変更されますが、元の拡張子は保持されます。 これは重要な区別です。ファイル名のランダム化はファイルタイプの検証ではありません。
ファイルを保存して公開する
$path = $file->storeAs($this->storagePath, $filename);
return [
'file' => $path,
'file_name' => $file->getClientOriginalName(),
'file_url' => Storage::url($path),
];
アプリケーションはファイルを保存し、そのURLをクライアントに提供します。
悪用に成功すると、攻撃者はWebアプリケーションの権限でコードを実行できる可能性があります。
デプロイメントによっては、これにより攻撃者は以下を行える可能性があります:
アプリケーションファイルを読み取る
アプリケーション設定にアクセスする
データベースの認証情報やその他のシークレットを取得する
アプリケーションデータを変更する
追加の悪意のあるコードを展開する
侵害されたホストからアクセス可能な他のシステムへピボットする
さらなる権限昇格を試みる
実際の影響は、侵害されたアプリケーションプロセスの権限と基盤システムのセキュリティ設定に依存します。
安全な実装では、単一の拡張子チェックに依存するのではなく、複数の保護層を使用する必要があります。
明示的に必要なファイルタイプのみを受け入れるべきです。 例えば:
.jpg
.jpeg
.png
.gif
.webp
正確な許可リストは、アプリケーションの正当な要件を反映する必要があります。
以下だけに依存しないでください:
アップロードされたファイルにはサーバーが生成した名前を付与すべきであり、攻撃者が制御する実行可能な拡張子を保持すべきではありません。
ユーザーがアップロードしたコンテンツを格納するディレクトリでは、PHP やその他のサーバーサイドインタープリタを無効化すべきです。 これにより、アップロード検証の制御がバイパスされた場合でも、追加のセキュリティ境界が提供されます。
可能な場合、アップロードされたコンテンツは実行可能な Web ルートの外に保存し、制御されたメカニズムを通じて配信すべきです。
アップロード機能を真に必要とする認証済みユーザーとロールのみが、エンドポイントにアクセスできるようにすべきです。
CVE-2026-38526 は本研究より前に公開されていました。
このリポジトリは、私による独立した技術分析と、この脆弱性の制御された再現を表すものです。独自の発見や CVE の割り当てを主張するものではありません。
研究者: Gabriel D. Ishengoma
フォーカス: 脆弱性研究 / オフェンシブセキュリティ
CVE-2026-38526 MITRE CVE レコード: https://cve.org/CVERecord?id=CVE-2026-38526
NVD CVE-2026-38526: https://nvd.nist.gov/vuln/detail/CVE-2026-38526
Webkul Krayin CRM アップストリームソースコード: https://github.com/krayin/laravel-crm
CVE-2026-38526 の公開セキュリティアドバイザリ: https://github.com/advisories/GHSA-7xqf-8v3m-6q9w
Hack The Box GCSB 2026 Nexus: https://app.hackthebox.com/machines/Nexus
Krayin CRM 2.2.x の独立した技術分析: https://github.com/Ish3ng0m4