-
Notifications
You must be signed in to change notification settings - Fork 710
[セキュリティ] XSS脆弱性: 複数のテンプレートおよびコントローラーで不十分なエスケープ処理 #6634
Copy link
Copy link
Open
Labels
securitysecuritysecurity
Milestone
Description
概要
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.phpsrc/Eccube/Controller/Admin/Content/FileController.phpsrc/Eccube/Controller/Admin/Order/EditController.phpsrc/Eccube/Controller/Admin/Order/ShippingController.phpsrc/Eccube/Controller/Admin/Store/OwnerStoreController.phpsrc/Eccube/Resource/template/default/Product/detail.twigsrc/Eccube/Resource/template/default/Product/list.twigsrc/Eccube/Resource/template/default/Block/news.twigsrc/Eccube/Resource/template/default/Help/tradelaw.twigsrc/Eccube/Resource/template/default/Shopping/index.twigsrc/Eccube/Resource/template/default/Shopping/confirm.twigsrc/Eccube/Resource/template/admin/Store/plugin_confirm.twig
検証
修正後、以下のテストが全て成功することを確認済み:
EccubeExtensionTest: 5テスト成功FileControllerTest: 42テスト成功EditControllerTest: 18テスト成功
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
securitysecuritysecurity