Skip to content

[セキュリティ] XSS脆弱性: 複数のテンプレートおよびコントローラーで不十分なエスケープ処理 #6634

@kurozumi

Description

@kurozumi

概要

EC-CUBEのフロントエンド・管理画面の複数箇所でXSS(クロスサイトスクリプティング)脆弱性を発見しました。

影響を受けるバージョン

  • EC-CUBE 4.x(4.3ブランチで確認)

脆弱性の詳細

1. ストアドXSS - HTMLコンテンツの不十分なサニタイズ(Critical)

以下のテンプレートで |raw フィルターが使用されており、|purify によるHTMLサニタイズが行われていません:

ファイル 対象フィールド
default/Product/detail.twig Product.description_detail
default/Product/list.twig Product.description_list
default/Block/news.twig News.description
default/Help/tradelaw.twig tradelaw.description
default/Shopping/index.twig activeTradeLaw.description
default/Shopping/confirm.twig activeTradeLaw.description

影響: 管理者権限を持つ攻撃者が商品説明やニュースにJavaScriptを埋め込み、顧客のセッションを窃取可能。

2. JSON出力のXSS - スクリプトコンテキストエスケープ不足(Medium-High)

以下の箇所でJSON出力が |raw フィルターで出力されており、</script> などでスクリプトコンテキストを脱出可能:

ファイル 問題箇所
EccubeExtension.php getClassCategoriesAsJson()json_encode() にセキュリティオプションなし
FileController.php 複数の json_encode() 呼び出し
EditController.php shippingDeliveryTimes のJSON出力
ShippingController.php shippingDeliveryTimes のJSON出力
OwnerStoreController.php requires の出力

影響: カテゴリ名やファイル名などに悪意のあるスクリプトを含めることでXSS攻撃が可能。

推奨される修正

テンプレートの修正

|raw|raw|purify に変更(既存のHTML Purifierでサニタイズ):

// Before
{{ Product.description_detail|raw|nl2br }}

// After  
{{ Product.description_detail|raw|purify|nl2br }}

JSON出力の修正

json_encode()JSON_HEX_TAG | JSON_HEX_AMP | JSON_HEX_APOS | JSON_HEX_QUOT オプションを追加:

// Before
return json_encode($class_categories);

// After
return json_encode($class_categories, JSON_HEX_TAG | JSON_HEX_AMP | JSON_HEX_APOS | JSON_HEX_QUOT);

修正パッチ

修正済みのコードを準備しています。必要であればPRを作成します。

修正対象ファイル

  • src/Eccube/Twig/Extension/EccubeExtension.php
  • src/Eccube/Controller/Admin/Content/FileController.php
  • src/Eccube/Controller/Admin/Order/EditController.php
  • src/Eccube/Controller/Admin/Order/ShippingController.php
  • src/Eccube/Controller/Admin/Store/OwnerStoreController.php
  • src/Eccube/Resource/template/default/Product/detail.twig
  • src/Eccube/Resource/template/default/Product/list.twig
  • src/Eccube/Resource/template/default/Block/news.twig
  • src/Eccube/Resource/template/default/Help/tradelaw.twig
  • src/Eccube/Resource/template/default/Shopping/index.twig
  • src/Eccube/Resource/template/default/Shopping/confirm.twig
  • src/Eccube/Resource/template/admin/Store/plugin_confirm.twig

検証

修正後、以下のテストが全て成功することを確認済み:

  • EccubeExtensionTest: 5テスト成功
  • FileControllerTest: 42テスト成功
  • EditControllerTest: 18テスト成功

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions