EC-CUBE用プラグイン「商品画像一括アップロードプラグイン」におけるアップロードファイルの検証不備の脆弱性(JVN#30900552)
更新履歴
- 2022/09/15 16:50
- JVNからの公表内容情報へのリンクを追加
- 2022/09/14 13:00
- 脆弱性の名称をJVN公表内容と合わせました(※脆弱性の内容に変更はありません)
- 2022/09/09 10:00
- 初版公開
EC-CUBE用プラグイン「商品画像一括アップロードプラグイン」におけるアップロードファイルの検証不備の脆弱性のお知らせ
EC-CUBE用プラグイン「商品画像一括アップロードプラグイン」に脆弱性(危険度: 低)があることが判明いたしました。
脆弱性そのものは、修正の反映によりすぐに解決するものです。以下のいずれかの方法により、ご対応をお願いいたします。
- 修正方法1: プラグインのバージョンアップを行う場合
- 修正方法2: 修正差分を確認して適宜反映する場合
皆様にはお手数おかけし誠に申し訳ございません。
本脆弱性における被害報告は現時点でございませんが、できるだけ速やかにご対応をお願いいたします。
脆弱性の概要
EC-CUBE用プラグイン「商品画像一括アップロードプラグイン」におけるアップロードファイルの検証不備の脆弱性
危険度:
低
不具合が存在する「商品画像一括アップロードプラグイン」のバージョン:
- 1.0.0 (EC-CUBE 4系対応)
- 4.1.0 (EC-CUBE 4系対応)
詳細:
商品画像一括アップロードプラグインには、不正なファイルがアップロード可能な脆弱性が存在します。
JVNからの公表内容 (2022/09/15公開)
JVN#30900552 EC-CUBE 用プラグイン「商品画像一括アップロードプラグイン」におけるアップロードファイルの検証不備の脆弱性
修正方法1: プラグインのバージョンアップを行う場合
「商品画像一括アップロードプラグイン」を最新版にバージョンアップしていただくことで、本件の脆弱性は修正されます。ご利用の方は、速やかにプラグインのバージョンアップをお願いいたします。
修正済みプラグインのバージョン
- バージョン 4.1.1 (EC-CUBE 4系対応)
修正方法2: 修正差分を確認して適宜反映する場合
下記のコード差分情報を参照して頂き、必要な箇所に修正を反映してください。
対象バージョン
- バージョン 4.1.0 (EC-CUBE 4系対応)
修正差分
■ バージョン 4.1.0 (EC-CUBE 4系対応)
対象ファイル
- app/Plugin/ProductImagesUploader/Controller/Admin/ConfigController.php
Controller/Admin/ConfigController.php
CHANGED
@@ -20,6 +20,7 @@ use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
|
|
20
20
|
use Symfony\Component\EventDispatcher\EventDispatcherInterface;
|
21
21
|
use Symfony\Component\Filesystem\Filesystem;
|
22
22
|
use Symfony\Component\Finder\Finder;
|
23
|
+
use Symfony\Component\HttpFoundation\File\File;
|
23
24
|
use Symfony\Component\HttpFoundation\File\UploadedFile;
|
24
25
|
use Symfony\Component\HttpFoundation\Request;
|
25
26
|
use Symfony\Component\HttpKernel\Event\PostResponseEvent;
|
@@ -63,7 +64,27 @@ class ConfigController extends AbstractController
|
|
63
64
|
|
64
65
|
return $this->redirectToRoute('product_images_uploader_admin_config');
|
65
66
|
}
|
67
|
+
$count = $finder->in($tmpDir)
|
68
|
+
->files()
|
69
|
+
->ignoreDotFiles(false)
|
70
|
+
->filter(function (\SplFileInfo $file) {
|
71
|
+
$file = new File($file->getRealPath());
|
72
|
+
if (strpos($file->getMimeType(), 'image') === 0) {
|
66
73
|
|
74
|
+
return false;
|
75
|
+
}
|
76
|
+
if (in_array(strtolower($file->getExtension()), ['gif', 'jpg', 'jpeg', 'png'])) {
|
77
|
+
|
78
|
+
return false;
|
79
|
+
}
|
80
|
+
|
81
|
+
return true;
|
82
|
+
})->count();
|
83
|
+
if ($count > 0) {
|
84
|
+
$this->addError('zipファイル内に画像以外のファイルが含まれています。', 'admin');
|
85
|
+
|
86
|
+
return $this->redirectToRoute('product_images_uploader_admin_config');
|
87
|
+
}
|
67
88
|
// save_imageへコピー
|
68
89
|
$fs->mirror($tmpDir, $this->eccubeConfig->get('eccube_save_image_dir'));
|
69
90
|
|