Skip to content

release-1.2.3J

Choose a tag to compare

@github-actions github-actions released this 19 Oct 22:53
· 1386 commits to main since this release
501e59e

1.2.3J(セキュリティ修正版)

1.2.2J に対するセキュリティ修正のみを含むリリースです。1.2.2J 以前をお使いのサイト(1.0 系・1.1 系を含む)は、1.2.3J へのアップデートをお願いします。 同じ問題は古いバージョンにもあります。1.0 系・1.1 系の保守は終了しているため、修正版は 1.2.3J だけです。 データベースの変更はありません。

今回の修正は、いずれも「外部の第三者がいきなりサイトに侵入する」種類のものではありません。多くは管理画面にログインできる、権限の低いアカウント(文書の編集者など)が、本来の権限を超えた操作をできてしまう問題です。残りは、フルページキャッシュを有効にしている一部のサイトで、会員向けの内容が未ログインの訪問者に見えてしまう問題です。管理画面のアカウントを複数の人に発行しているサイトや、会員向けのページを運用しているサイトは、特に早めの更新をおすすめします。

修正内容

  • 管理画面の設定の内部処理: 権限の低い管理画面ユーザーが、設定やプラグインの状態を権限を超えて変えられないようにしました。あわせて、設定確認の画面から TemplateSwitcher を「削除」しても消えなかった不具合(#636)を直しました。(アドバイザリ公開後にリンク)
  • バインディング(@FILE・@INCLUDE・@EVAL など): システム設定「バインディングを有効にする」が「いいえ」(既定)のときは、文書の値に書かれたバインドを処理しないようにそろえました。バインドで読めるファイルの場所も、サイトの中に限りました。同梱の Ditto・eForm・Wayfinder・DocManager も同じ考え方にそろえています。(アドバイザリ公開後にリンク)
  • サーバー変数のプレースホルダ([[$_...]]): 決まったサーバー変数($_GET・$_POST・$_REQUEST・$_SESSION・$_COOKIE・$_SERVER)を読むだけの処理にしました。(アドバイザリ公開後にリンク)
  • 出力修飾子 :readfile・:file_get_contents・:filesize: 読めるファイルを、サイトの中(管理画面の下を除く)に限りました。(アドバイザリ公開後にリンク)
  • フルページキャッシュ(システム設定 cache_type=2): 会員限定のページと、ログイン中のウェブ会員が開いたページを、フルページキャッシュに保存しないようにしました。既定の設定(cache_type=1)のサイトには関係しません。(アドバイザリ公開後にリンク)

アップデートの手順は、どのバージョンからでも通常と同じです(アップデート方法:全ファイルを上書きし、/install/ でアップデートを実行)。1.2.2J からの場合は、変更した次の 19 ファイルを置き換えるだけでも更新できます。

  • index.php
  • manager/includes/controls/datagrid.class.php
  • manager/includes/document.parser.class.inc.php
  • manager/includes/docvars/outputfilter/custom_widget.inc.php
  • manager/includes/extenders/ex_modifiers.php
  • manager/includes/manager.lockout.inc.php
  • manager/includes/mutate_settings.ajax.php
  • manager/includes/traits/document.parser.subparser.trait.php
  • manager/includes/version.inc.php
  • assets/modules/docmanager/classes/docmanager.class.php
  • assets/snippets/ditto/classes/filter.class.inc.php
  • assets/snippets/ditto/classes/template.class.inc.php
  • assets/snippets/ditto/extenders/tagging.extender.inc.php
  • assets/snippets/ditto/snippet.ditto.php
  • assets/snippets/eform/eform.inc.php
  • assets/snippets/eform/eform.install_base.tpl
  • assets/snippets/wayfinder/configs/breadcrumb.class.inc.php
  • assets/snippets/wayfinder/snippet.wayfinder.php
  • assets/snippets/wayfinder/wayfinder.inc.php

アップグレード時の注意

  • 【必須】更新後に、キャッシュを全部消してください。 /install/ でアップデートした場合は自動で消えます。ファイルの置き換えだけで更新した場合は、管理画面で「サイトをリフレッシュ」を実行してください。特にフルページキャッシュ(cache_type=2)を使っているサイトは、以前に保存されたキャッシュが残ったままだと、修正前の内容が返り続けます。
  • ファイルを置き換えたあと、管理画面にログインしてシステム設定を一度保存してください。保存するまでは、表側がメンテナンス画面になります。
  • バインディングを無効(既定)のまま、文書の値やテンプレート変数(TV)の値で @FILE・@INCLUDE・@EVAL などを使っているサイト: 更新後は処理されなくなります。引き続き使う場合は、システム設定「バインディングを有効にする」を「はい」にしてください。
  • @FILE・@INCLUDE、出力修飾子 :readfile などで読めるのは、サイトの中のファイルだけになります。サイトの外のファイルや、サイトの外を指すシンボリックリンクは読めません。
  • カスタムウィジェットの定義を @EVAL・<?php で書き、本文で [+value+] を使っていた場合は、$value に置き換えてください。
  • eForm のフック・Ditto の &tagCallback・eForm の検証 #EVAL/#FUNCTION などのコードを動かす引数は、バインディングが有効なときだけ動きます。Ditto・Wayfinder・eForm・DocManager の言語名や書式名などの引数は、英数字・_・- だけになります(外れると既定値に戻ります)。
  • [[$_...]] で $_ENV・$_FILES を読んでいた場合は、空になります。
  • フルページキャッシュ(cache_type=2)のサイトでは、ログイン中のウェブ会員が開いたページはキャッシュせず、毎回組み立てます。会員の利用が多いサイトでは、サーバーの負荷が少し増えることがあります。
  • 管理画面の設定の内部処理(index.php?a=118)を使って任意のシステム設定を書き込む独自のアドオンがあると、動かなくなります(同梱のものにはありません)。

1.2 系の今後について

1.2.2J を 1.2 系の最終版とする予定でしたが、上記の修正のため 1.2.3J を出しました。今後も 1.2 系は、セキュリティ修正が必要な場合に限って更新します。機能の改善は 1.3 系で行います。

1.3 系(main ブランチ)をお使いの場合

1.3 系の配布リリースはまだありませんが、main ブランチから直接運用している場合も、同じ問題への対策は main に取り込み済みです。最新の main に更新し、キャッシュを全部消してください。

Full Changelog: release-1.2.2J...release-1.2.3J