baserCMS セキュリティーリスクを正しく理解して、もっと利便性を追求しよう。

これまでセキュリティ情報としてアナウンスされ、度々行われてきたセキュリティフィクス(脆弱性対応)は、けっこうな頻度で「システム管理グループ以外のユーザーに管理システムへのログインを許可している場合」というくだりで始まっています。
このくだりを少しbaserっぽく、砕いて書くと、「admins権限グループ以外のユーザー(例えば「サイト運営」グループや新規ユーザーグループを作成して、それらのグループに登録されたユーザー)に管理画面(admin-secondやadmin-thirdといった管理画面)の利用を許可している場合」は、脆弱性がありますよ。ということになります。
(広義な意味で「管理システムへのログインを許可している場合」というくだりの理解を深めるには、「baserCMS フロント認証機能を使ったメンバー専用ページ作成時のケーススタディ 」の記事も見てもらえるといいかもしれません。)
言い換えると、サイトの管理・運用をしているユーザー(複数の場合)が、すべてシステム管理(ユーザー)グループの場合、ここでいう脆弱性は、そもそも考えなくてもいいということになります。もちろん「おひとりさま」サイトの場合は、当然のこと考える必要はありません。
が、実際のところ、セキュリティフィクス(脆弱性対応)の名目で、これまでにクローズされたいくつかの機能は、システム管理グループも含めて十把一絡げに行われる場合もあって、そのため、システム管理グループに属するユーザーにとっては非常に利便性の高かった機能にもかかわらず、クローズされてしまったケースもありました。
そこで、上述のリスクに抵触しない管理・運用を行っておられるサイトおよびセキュリティーリスクを正しく理解した上でサイト管理・運用をしているユーザーの利便性の向上を目的として、それらの機能とそれをあらためてオープンにする方法、2件を紹介したいと思います。
しかし、これから紹介する機能は言わずもがなですが、ひとたび管理権限をもたない(管理権限を管理することの重要性や運用者権限の危うさの理解が不十分な)ユーザーがサイトにエントリーすることになった場合は、たかが運用権限だからという安易な発想でサイト運営グループのユーザーアカウント情報やパスワードを悪意のある第三者に奪われたり、露呈してしまった場合、運用権限でもページ内にコードを仕込むことができる、ということになります。 そういった内容であることを理解した運用権限ユーザーが、きちんとアカウント管理をする前提でないと、文字通り非常に危うい脆弱性になりうる機能であることを理解する必要があります。
まず、1件目。
セキュリティ情報 - 2018/05/18 コードインジェクションをはじめとする複数の脆弱性 によるセキュリティフィクスとして以下のイシューについての対応を4.1.1で実装。
システム管理グループ以外のユーザーに管理システムへのログインを許可している場合、固定ページにおいて任意のコードを実行される可能性がある、というもの。
具体的には、編集画面の本文(草稿)欄でphp、scriptコードの埋め込みを判定し、admins権限以外では保存させない仕様になっていて、
以下のファイル(lib/Baser/Controller/Component/BcManagerComponent.php) で 'allowedPhpOtherThanAdmins' => false
が設定されています。
<解除方法>
以下の設定で制限を解除することができます。つまり、admins権限ユーザーグループ以外にも、本文(草稿)欄でのスクリプトを許可、テーマファイル等の編集を許可する設定です。
$config['BcApp'] = [
'allowedPhpOtherThanAdmins' => true
];
2件目。
セキュリティ情報 - 2020/10/29 コードインジェクション、XSSの脆弱性 によるセキュリティフィクスとして4.4.1で実装。
以下のトピックも是非、ご参考までに。
baserCMSユーザーズフォーラム -「テーマのテンプレート編集不可」仕様に関して
これは、システム管理グループ以外のユーザーに管理システムへのログインを許可している場合、テーマのファイル管理において任意のコードを実行される可能性がある(テーマ管理機能におけるクロスサイトスクリプティング)という趣旨の対策で、
4.4.1以前は、管理画面からテーマ(テンプレート)ファイルを編集することができていましたが、 4.4.1 以降、セキュリティ対策として「初期状態では」編集ができなくなってしまいました。
<解除方法>
以下の設定で制限を解除することができます。つまり、admins権限ユーザーを含むすべてのユーザーに、テーマファイル等の編集を許可する設定です。
$config = [
'BcApp' => [
'allowedThemeEdit' => true
]
];
まとめてプラグイン化
ExtendedFunctionForUsers/Config/setting.phpを以下のように作成。
もちろん、不必要に解除する必要はないので、不要ならいずれかのみで。
<?php
$config['BcApp'] = [
'allowedPhpOtherThanAdmins' => true,
'allowedThemeEdit' => true
];
ExtendedFunctionForUsers/config.phpとして、以下を作成。
<?php
/**
* [ADMIN] ExtendedFunctionForUsers
*/
$title = 'Users権限でページ(コード含む)編集可、テーマファイル編集可プラグイン';
$description = 'Users権限でコードを含むページ編集、テーマファイル編集を可能にするプラグインです。';
$author = '';
$url = '';
プラグイン化の要領は、「baserCMS 固定ページやブログ記事の文字数制限を変更する」記事と同様です。
プラグイン化するメリットは、Admins権限グループのユーザーが、管理画面からプラグインを有効化、無効化することで、必要な時だけAdminsユーザーの管理下でこれらの機能をオープンにしたり、クローズしたりできるようになるわけで、セキュリティーリスクをコントロールしつつ利便性を確保できることになります。
最後に、Qiitaの「【baserCMS】AdminPageEditable プラグインを作りました。 」記事のプラグインも同様の趣旨で、Admins権限ユーザー以外で非表示となってしまう「コード」欄をUsers権限グループにも利用できるようにしてくれるものです。 併せて、使うととても便利ですので、ご紹介しておきます。
また、2件目として紹介した「admins権限ユーザーグループ以外にも、本文(草稿)欄へのスクリプトを許可、テーマファイル等の編集を許可する設定」は、ショートコードを使ってスクリプト扱いを回避する方法もあったりします。
Qiitaの「baserCMSのショートコード(1)基本 」記事