JVNで報告された脆弱性への対応について
a-blog cms で複数の脆弱性が見つかりました。 該当の状況に当てはまる場合は大変お手数ですが以下のご対応をお願いいたします。
JVN識別番号
- JVN#70977403
今回は見つかった脆弱性は以下になります。
- エントリー編集ページのクロスサイトスクリプティング(XSS)
- Webhook機能のサーバーサイドリクエストフォージェリ(SSRF)
- Webhook機能のコードインジェクション
- スケジュールのラベル設定画面のクロスサイトスクリプティング(XSS)
- フォーム機能(テンプレート指定)のディレクトリ・トラバーサル
エントリー編集ページのクロスサイトスクリプティング
内容
攻撃者が投稿者以上でログインし、エントリーに不正なコードを入力して保存して公開することにより、クロスサイトスクリプティングが発生します。
攻撃条件
- 攻撃者が 投稿者以上の権限でログイン可能なこと(* 不正ログインされる脆弱性はありません)
- 攻撃者が記事を公開できること
影響を受けるバージョン
- a-blog cms Ver. 3.1.11 以下のバージョン (Ver.3.1.x系)
- a-blog cms Ver. 3.0.31 以下のバージョン (Ver.3.0.x系)
- a-blog cms Ver. 2.11.60 以下のバージョン (Ver.2.11.x系)
- a-blog cms Ver. 2.10.52 以下のバージョン (Ver.2.10.x系)
- a-blog cms Ver. 2.9.x 以下のバージョン(フィックスバージョンはありません)
ワークアラウンド(応急処置)
応急処置として、信頼されないユーザーにログインされるリスクを下げるため、 コンフィグ > アクセス設定かIPアドレスによるログイン制限をかけたり、ユーザーのパスワードを複雑なものに変更ください。
CMSバージョンアップによる対応
各マイナーバージョン毎にフィックスバージョンがリリースしております。 「影響を受けるバージョン」 よりも新しいフィックスバージョンにアップデートを行なってください。
対応バージョンの仕様変更
今回の対応で意図的に危険なタグを許可する校正オプション「」の仕様が変更されました。
今までの仕様
- 変数は「allow_dangerous_tag」校正オプションを付与しないと、全ての変数で危険なタグの削除を行う
- 上記より管理画面の変数も「allow_dangerous_tag」校正オプションを付与する必要がありました
新しい仕様
- 「allow_dangerous_tag」校正オプションを付与しなくても「raw」校正オプションが付与されていなければ、特にエスケープ処理のみで、危険なタグを削除したいしないように変更
- 基本管理画面は「raw」校正オプションはついていないので、管理画面の変数に「allow_dangerous_tag」校正オプションを付与する必要がなくなりました。
まとめると、新しい仕様では「raw」校正オプションが付与されている場合のみ、 危険なタグを削除するかを「allow_dangerous_tag」校正オプションのあり・なしで設定するということになります。
詳しくはこちらをご覧くささい。 【重要なお知らせ】変数の仕様変更について
Webhook機能のサーバーサイドリクエストフォージェリ
内容
攻撃者が管理者権限でログインして、Webhookの設定を不正に変更することで、サーバーサイドリクエストファージュリが発生します。
攻撃条件
- 攻撃者が 管理者権限でログイン可能なこと(* 不正ログインされる脆弱性はありません)
- Hook機能が有効なこと(config.server.php「HOOK_ENABLE」デフォルトは無効です)
影響を受けるバージョン
- a-blog cms Ver. 3.1.11 以下のバージョン (Ver.3.1.x系)
- a-blog cms Ver. 3.0.31 以下のバージョン (Ver.3.0.x系)
ワークアラウンド(応急処置)
config.server.php を修正することで、Webhook機能を無効(デフォルト無効)にできます。 もしWebhook機能を使用したい場合は、CMSのアップデートをご検討ください。
define('HOOK_ENABLE', 0); // 0 で無効
CMSバージョンアップによる対応
各マイナーバージョン毎にフィックスバージョンがリリースしております。 「影響を受けるバージョン」 よりも新しいフィックスバージョンにアップデートを行なってください。
対応バージョンの仕様変更
セキュリティを高めるため、今回の脆弱性に対応したバージョンでは、Webhookの仕様変更がされています。
変更点1
WebhookのリクエストURLは、「.env」で許可したホストのみ保存・実装できるようになっております。 Webhookを利用する場合は「.env」で以下のように許可ホストを設定ください。
WEBHOOK_WHITE_LIST=hooks.slack.com,xxxxx.com # Webhookでリクエスト可能なホストをカンマ区切りで指定ください。
変更点2
ログのレスポンス表示は、デフォルトで表示できないようになっております。
レスポンスのログを表示するには、「.env」で「WEBHOOK_RESPONSE_VIEW」を「enable」に変更ください。
WEBHOOK_RESPONSE_VIEW=enable # (disabled|enable) WebhookのログにHTTPレスポンス情報を表示するかどうか設定します。セキュリティのため、確認する時のみ「enable」に設定ください。
Webhook機能のコードインジェクション
内容
攻撃者が管理者権限でログインして、Webhookのペイロード設定を不正に変更することで、コードインジェクションが発生します。
攻撃条件
- 攻撃者が 管理者権限でログイン可能なこと(* 不正ログインされる脆弱性はありません)
- Hook機能が有効なこと(config.server.php「HOOK_ENABLE」デフォルトは無効です)
影響を受けるバージョン
- a-blog cms Ver. 3.1.11 以下のバージョン (Ver.3.1.x系)
- a-blog cms Ver. 3.0.31 以下のバージョン (Ver.3.0.x系)
ワークアラウンド(応急処置)
config.server.php を修正することで、Webhook機能を無効(デフォルト無効)にできます。 もしWebhook機能を使用したい場合は、CMSのアップデートをご検討ください。
define('HOOK_ENABLE', 0); // 0 で無効
CMSバージョンアップによる対応
各マイナーバージョン毎にフィックスバージョンがリリースしております。 「影響を受けるバージョン」 よりも新しいフィックスバージョンにアップデートを行なってください。
対応バージョンの仕様変更
今回の問題に対応するため、ペイロードのカスタマイズで利用するテンプレートエンジンをTwigに変更しました。 新しいテンプレートは Twig を使ったテンプレート表記に変更ください。
スケジュールのラベル設定画面のクロスサイトスクリプティング
内容
攻撃者が編集者でログインし、スケジュール機能の「ラベル設定」画面で、不正な値を設定することにより、クロスサイトスクリプティングが発生します。
攻撃条件
- 攻撃者が 編集者以上の権限でログイン可能なこと(* 不正ログインされる脆弱性はありません)
- スケジュールを編集できること
- 別の編集者・管理者がスケジュールのラベル設定画面を閲覧すること
影響を受けるバージョン
- a-blog cms Ver. 3.1.11 以下のバージョン (Ver.3.1.x系)
- a-blog cms Ver. 3.0.31 以下のバージョン (Ver.3.0.x系)
- a-blog cms Ver. 2.11.60 以下のバージョン (Ver.2.11.x系)
- a-blog cms Ver. 2.10.52 以下のバージョン (Ver.2.10.x系)
- a-blog cms Ver. 2.9.x 以下のバージョン(フィックスバージョンはありません)
ワークアラウンド(応急処置)
以下ファイルの修正をしてください。
php/ACMS/GET/Admin/Schedule/Labels.php: 36行目付近
修正前
$Tpl->add('label:loop', array(
'sort' => $sort,
'name' => isset($_label[0]) ? $_label[0] : '',
'key' => isset($_label[1]) ? $_label[1] : '',
'class' => isset($_label[2]) ? $_label[2] : '',
)
);
修正後
$Tpl->add('label:loop', array(
'sort' => $sort,
'name' => isset($_label[0]) ? $_label[0] : '',
'key' => isset($_label[1]) ? $_label[1] : '',
'classStr' => isset($_label[2]) ? $_label[2] : '', // この行を修正 class => classStr
)
);
ablogcms/themes/system/admin/schedule/edit-label.html: 74行目付近
修正前
<input type="text" name="schedule_label_class[]" value="{class}" class="acms-admin-form-width-full" />
修正後
<input type="text" name="schedule_label_class[]" value="{classStr}" class="acms-admin-form-width-full" /> <!-- class => classStr に変更 -->
CMSバージョンアップによる対応
各マイナーバージョン毎にフィックスバージョンがリリースしております。 「影響を受けるバージョン」 よりも新しいフィックスバージョンにアップデートを行なってください。
フォーム機能(テンプレート指定)のディレクトリ・トラバーサル
内容
攻撃者が編集者以上でログインし、フォーム設定を不正な値に設定し、実際にフォームで送信することで、 フォームのログ表示に任意のファイルの情報が表示されるディレクトリ・トラバーサルの脆弱性が発生します。
攻撃条件
- 攻撃者が 編集者以上の権限でログイン可能なこと(* 不正ログインされる脆弱性はありません)
- テンプレートにフォーム機能が設置されていること . 攻撃者がフォームのログを確認できること
影響を受けるバージョン
- a-blog cms Ver. 3.1.11 以下のバージョン (Ver.3.1.x系)
- a-blog cms Ver. 3.0.31 以下のバージョン (Ver.3.0.x系)
- a-blog cms Ver. 2.11.60 以下のバージョン (Ver.2.11.x系)
- a-blog cms Ver. 2.10.52 以下のバージョン (Ver.2.10.x系)
- a-blog cms Ver. 2.9.x 以下のバージョン(フィックスバージョンはありません)
ワークアラウンド(応急処置)
フォームの設定を変更されないように以下3つのファイル変更を行います。
- php/ACMS/POST/Form/Update.php
- php/ACMS/POST/Form/Insert.php
- php/ACMS/POST/Form/Duplicate.php
各3つのファイルの「postメソッド」の先頭に「die();」を挿入してフォームを作成・更新・複製できないようにします。
public function post()
{
die();
...
CMSバージョンアップによる対応
各マイナーバージョン毎にフィックスバージョンがリリースしております。 「影響を受けるバージョン」 よりも新しいフィックスバージョンにアップデートを行なってください。
最後に
この度はご迷惑をおかけしてしまい大変申し訳ございません。
該当する問題がありましたら、お早めにバージョンアップのご検討をお願いいたします。 また、迅速にご報告いただいたユーザーの皆さま、誠にありがとうございました。
今後もご報告いただいた内容に対して真摯に受け止め修正と改善を行ってまいります。 よろしくお願いいたします。
本件に関するお問い合わせ先
本件についてご不明点などありましたら以下のお問い合わせよりご連絡ください。
有限会社アップルップル
メールアドレス:info@a-blogcms.jp
お問い合わせフォーム:https://www.a-blogcms.jp/contact/