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

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

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

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

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
CVE-2026-76564 — PhocaCart 管理画面の注文表示における User-Agent 経由の Stored XSS | Kitploit
ツール/GitHubGitHub/toanln-cov/cve-2026-76564
脆弱性分析コード分析エクスプロイトウェブアプリケーション悪用ウェブセキュリティ論文と研究
GitHubtoanln-cov/cve-2026-76564

CVE-2026-76564

PhocaCart 管理画面の注文表示における User-Agent 経由の Stored XSS

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

人気

すべて見る →

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

すべてのツールを探索

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

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

PhocaCart の管理注文ビューにおける User-Agent 経由の格納型 XSS

PhocaCart ≤ 6.1.7 — 未認証の攻撃者がチェックアウト経由で XSS ペイロードを保存。管理者ブラウザコンテキストで実行

CVE CVSS v4.0 CWE-79 Affected Researcher


概要

PhocaCart 6.1.7(Joomla 用)は、store_user_agent 設定オプションが有効な場合、チェックアウトリクエストの生の HTTP User-Agent ヘッダーを注文データベーステーブルに保存します。保存された値は、Adminview.php の itemText() を介して管理者の注文編集ビューに HTML エンコードなしでレンダリングされます。

未認証の攻撃者は、JavaScript ペイロードを含む細工された User-Agent で注文を行うことができます。管理者がバックエンドで注文を開くと、ペイロードは管理者ブラウザコンテキストで実行され、セッションハイジャック、認証情報の窃取、または不正な管理操作が可能になります。

この脆弱性が成立するには、store_user_agent = 1(非デフォルト)が有効である必要があります。このオプションはブラウザ統計を収集するための管理者の意図的な選択であるため、影響を受けるショップは、ショップオーナーがこの機能を有効にしているショップです。そのため、攻撃者から見るとこの悪用は完全にサイレントです。


影響を受けるバージョン

コンポーネント影響を受けるバージョンテスト環境修正バージョン
PhocaCart (com_phocacart)5.0.0 – 6.1.7Joomla 5.4.7 + PhocaCart 6.1.7 + MariaDB 10.66.1.8

脆弱性の詳細

タイプ: 格納型 XSS(CWE-79)— 管理者を標的とした 必要な認証: 注入には不要。トリガーには管理者が必要 CSRF トークン: 必要(チェックアウトには標準の Joomla CSRF トークンが必要) ファイル: administrator/components/com_phocacart/libraries/Phoca/Render/Adminview.php:382

根本原因

store_user_agent = 1 の場合、PhocacartUtils::getUserAgent() メソッドは $_SERVER['HTTP_USER_AGENT'] をサニタイズなしで返します。この生の文字列は #__phocacart_orders に保存されます(200 文字に切り詰められますが、XSS を防ぐには不十分です)。管理者がバックエンドで注文を表示すると、itemText() は保存された値を htmlspecialchars() を呼び出さずに直接 HTML レスポンスに連結します。

データフロー:

root@kitploit:~
Attacker sends checkout request:
  User-Agent: <script>alert(document.domain)</script>

    utils.php:334   PhocacartUtils::getUserAgent()
    └─ return (string) $_SERVER['HTTP_USER_AGENT']   // raw, no sanitization
        order.php:413  $d['user_agent'] = substr($user_agent, 0, 200)
        └─ INSERT INTO #__phocacart_orders (user_agent) VALUES ('<script>...</script>')

Admin opens order in backend:
    edit.php:84    echo $r->itemText($this->itemcommon->user_agent, ...)
    Adminview.php:382  '<div class="controls >' . $item . '</div>'
                                           // → NO htmlspecialchars()
    → Browser renders: <div><script>alert(document.domain)</script></div>
    → XSS fires in administrator's browser

ORDER.PHP — 保存フェーズ(脆弱なソース)

administrator/components/com_phocacart/libraries/phocacart/order/order.php:424

root@kitploit:~
$user_agent = PhocacartUtils::getUserAgent(); // reads $_SERVER['HTTP_USER_AGENT'] raw
$d['user_agent'] = substr($user_agent, 0, 200); // stored in DB unfiltered

ADMINVIEW.PHP:382 — レンダリングフェーズ(脆弱なシンク)

root@kitploit:~
// No htmlspecialchars() applied:
$output .= '  <div class="controls ' . $class . '">' . $item . '</div>' . "\n";

以下から呼び出されます administrator/components/com_phocacart/views/phocacartorder/tmpl/edit.php:84:

root@kitploit:~
echo $r->itemText($this->itemcommon->user_agent, Text::_('COM_PHOCACART_USER_AGENT'), '', 'user_agent');

itemText() 関数は、$item(保存された user_agent 値)をエンコードなしで直接 HTML 出力に渡すため、主要なシンクとなります。シンクレベルで修正すれば、itemText() のすべての呼び出し元を保護できます。


概念実証(PoC)

この攻撃には、悪意のある User-Agent ヘッダーを使用して完全なチェックアウトフローを完了する必要があります。Joomla のチェックアウトコントローラは CSRF トークンを検証するため、まず CSRF トークンを取得する必要があります。

0. 前提条件 — Store User Agent 情報を有効にする

Joomla 管理画面で、Components → Phoca Cart → Options → Main タブ → Statistics Options に移動します。Store User Agent Information = Yes に設定して保存します。

前提条件: Store User Agent 情報 = Yes

1. CSRF トークンの取得

攻撃者はショップのフロントエンドにアクセスし、チェックアウトコントローラに必要な有効な Joomla CSRF トークンを抽出します。トークンは任意のショップページの HTML ソースまたは JavaScript 設定に含まれています。

ステップ 1: 攻撃者が Burp Suite 経由でショップのフロントエンドから CSRF トークンを取得

2. 商品をカートに追加

攻撃者は、無害な User-Agent を使用して AJAX チェックアウトエンドポイント経由で商品をカートに追加します。これにより、チェックアウトセッションが次の状態に遷移します。

ステップ 2: 商品をカートに追加 — POST checkout.add

3. 請求先住所を保存

攻撃者は請求先情報を送信し、チェックアウトのステートマシンを進めます。

ステップ 3: 請求先住所を保存 — Burp Suite

4. 配送方法を保存

攻撃者は支払いに進むため配送方法を選択します。

ステップ 4: 配送方法を保存 — Burp Suite

5. 支払い方法を保存

攻撃者は支払い方法(例: 代金引換)を選択します。

ステップ 5: 支払い方法を保存 — Burp Suite

6. ペイロードの注入 — 悪意のある User-Agent で注文

重要な注入ステップです。攻撃者は User-Agent ヘッダーを XSS ペイロードに設定し、task=checkout.order 経由で最終注文を確定します。checkout.order タスクは生の HTTP_USER_AGENT を読み取り、エスケープせずに #__phocacart_orders.user_agent に保存します。

root@kitploit:~
POST /index.php/shop/checkout HTTP/1.1
Host: TARGET
User-Agent: <script>alert(document.domain)</script>
Content-Type: application/x-www-form-urlencoded

phcheckouttac=1&task=checkout.order&option=com_phocacart&return=&<CSRF_TOKEN>=1

結果: 注文が作成されます。データベースには user_agent = '<script>alert(document.domain)</script>' が保存されます。

ステップ 6: 悪意のある User-Agent で注文を確定 — データベースにペイロードが注入される

7. 管理者が注文リストを表示

管理者は Components → Phoca Cart → Orders に移動します。注入された注文がリストに表示されます。この段階では XSS はまだトリガーされません。

ステップ 7: Joomla バックエンドの管理注文リスト — 注入された注文が表示される

8. XSS 発火 — 管理者が注文詳細を開く

管理者が注文をクリックして編集ビューを開くと、保存された user_agent が itemText() 経由でエスケープされずにレンダリングされます。JavaScript が即座に実行されます。

トリガー URL:

root@kitploit:~
/administrator/index.php?option=com_phocacart&view=phocacartorder&layout=edit&id=<ORDER_ID>

ステップ 8: 管理者ブラウザで XSS ペイロードが実行 — alert(document.domain) が実行コンテキストを確認


影響

  1. 管理セッションハイジャック — XSS ペイロードは管理者のセッション Cookie を外部に送信でき、資格情報なしでバックエンドへの完全なアクセスを許します。
  2. 不正な管理操作 — 管理者ブラウザコンテキストで実行されるため、ペイロードは特権アカウントの作成、悪意のある拡張機能のインストール、コンテンツの変更など、あらゆるバックエンド操作を実行できます。
  3. 永続的なバックドア — Web シェルをインストールするか、不正な管理者アカウントを作成するペイロードは、XSS イベント自体が終わった後も持続し、攻撃者にサーバーへの永続的なアクセスを提供します。

参考情報

  • CVE: https://www.cve.org/CVERecord?id=CVE-2026-76564
  • NVD: https://nvd.nist.gov/vuln/detail/CVE-2026-76564
  • GitHub アドバイザリ: https://github.com/advisories/GHSA-98mw-pj3j-99v2
  • ベンダーリポジトリ: https://github.com/PhocaDesign/PhocaCart
ツールをダウンロード