Concrete CMS 9.4.0 リリースノート

目次

Concrete CMS 9.4.0 がリリースされました。
本ページは以下の原文を翻訳しています。
https://github.com/concretecms/concretecms/releases/tag/9.4.0

 

新機能

  • エラーハンドリングの大幅な改善:PHPのエラータイプごとに異なる動作を割り当てられるようになり、デバッグ時のエラーページもより見やすく整理されました。
  • ログ機能の強化:ログからユーザープロフィールへのリンク追加、ページ識別情報のログ出力など、多くの改善が加えられました。
  • Atomikテーマに5つの新しいスキンが追加され、デザインの選択肢が広がりました。
  • タスク処理の信頼性が向上:タスクエラーのログが強化され、CLI(コマンドライン)でのエラー表示も改善。バッチ内で一部のタスクが失敗しても、他のタスクが継続されるようになりました。
  • 管理画面のページ検索機能で、ページのキャッシュ設定を一括変更できる機能が追加されました。
  • ページタイプ、テンプレート、テーマも同様に一括編集可能となり、管理の効率が向上しています。
  • ダークモードに対応:明るいモードと暗いモードをシステム全体に適用でき、OSの設定に従うことも可能になりました。
  • 「外観」管理画面ページを新設:既存の「アクセシビリティ」設定を統合した新しいページです。
  • Open Graphタグへの対応がコアに追加されました。専用管理画面で、プロパティや属性を設定できます。
  • コンテンツのインポート/エクスポート機能の拡張:多言語ページマッピング、追加のページパス、外部リンクなどの対応が加わりました (Thanks mlocati)
  • 設定ファイルのインポート時に保存先や上書き有無を指定可能に (Thanks mlocati)
  • 各カテゴリごとに利用できるサマリーテンプレートを制御する管理画面ページが追加されました。
  • ボードインスタンス単位での詳細なログ確認が可能となり、トラブルシューティングが容易になりました。
  • ファイルマネージャに「総ダウンロード数」の列が追加されました (Thanks SashaMcr)
  • ソーシャルリンクにBlueskyを追加しました (Thanks mlocati)

 

機能改善

  • PHP 8.4への対応が行われました。
  • ボードは、表示しているコンテンツに変更があった際に自動的に内容を再生成・更新するようになりました。
  • 外部ストレージ(例:AWS S3)使用時のパフォーマンスが向上しました。
  • misc.img_src_absolute 設定が追加され、trueにするとファイルマネージャから出力される画像URLを絶対パスにできます(メールなどの外部用途に便利) (Thanks mlocati)
  • システムページも管理画面のページ検索結果に含まれるようになりました。
  • 言語の更新ページにおける処理結果のフィードバックが明確になりました (Thanks mlocati)
  • アコーディオン/FAQ/画像スライダー/アンケートなどのブロックに関して、インポート・エクスポート処理が改善されました (Thanks mlocati)
  • 「ページ公開開始日」フィールドが有効な場合は入力が必須となり、意図しない公開を防ぐことができます (Thanks bikerdave)
  • 多言語URLの生成に関し、ページがサイトツリー内にある場合にのみ対応するよう制御が追加されました (Thanks 6tematik)
  • ドキュメントライブラリからファイルをダウンロードする際に、該当ファイルであることが明示されるようになりました (Thanks ounziw)
  • 一部のページデータ取得処理のパフォーマンスが向上しました (Thanks hissy)
  • スケジュールされたタスクの日時表示が、より直感的な形式に変更されました (Thanks hissy)
  • 孤立したブロックの削除処理において、他のページへの影響が出ないよう制御が強化されました (Thanks hissy)
  • グローバルスタックやスタイルセットの再取得を回避することで、パフォーマンスが向上しました (Thanks hissy)
  • PageList クラスの処理効率が向上しました (Thanks hissy)
  • ギャラリーブロックにキャッシュが有効になりました (Thanks hissy)
  • 管理者がシステムページの下にページを追加できるようになりました。
  • メッセンジャーのバックエンドで認証エラーが発生した際にも例外がスローされないようになりました (Thanks ahukkanen)
  • RSS Displayer ブロックが ATOM フィードにも対応しました。
  • アクセシビリティ設定ページ自体のアクセシビリティ改善が行われました (Thanks nratering)
  • CONCRETE および CONCRETE_LOGIN のCookieがSameSite属性を尊重するようになりました (Thanks gutig)
  • 有効なExpressフォームが存在しない状態で送信された場合に、リダイレクト処理が適切に行われるようになりました (Thanks ahukkanen)
  • 不正な形式のフィードによって処理全体が停止しないよう、フィードサービスにタイムアウト処理が追加されました。
  • インポート/エクスポート時に NULL 値や 0 を正しく扱うよう改善されました (Thanks mlocati)
  • スタックのパスが存在しない場合に、スタック名で代替する処理が追加されました (Thanks mlocati)

 

バグ修正

  • RSSフィードが親ページによってフィルタリングされている場合、その親ページがゴミ箱に移動されるとフィードが機能しなくなる不具合を修正しました (Thanks mlocati)
  • ページへのブロック追加ダイアログからビューに引き渡される引数に誤りがあった問題を修正しました (Thanks mlocati)
  • PHP 8 以降の環境で、PageView クラスにおいて動的プロパティが原因で発生するエラーを修正しました (Thanks jgarc186)
  • その他、PHP 8 に関連するプロパティ未定義エラーを複数修正しました (Thanks jgarc186)
  • テキストエリア形式のユーザー属性が、カスタムテーマ使用時にプロフィール編集画面で表示されない問題を修正しました。
  • マルチサイト機能が有効な環境で、テーマごとにアクティブ状態を個別に設定できなかった不具合を修正しました。
  • グリッドフレームワークにおいて、一部の特殊な条件下で表示が崩れる不具合を修正しました (Thanks hissy)
  • Expressオブジェクトの名称変更時に、結果フォルダ名が更新されない問題を修正しました。
  • CIF形式でパッケージ内のスニペットをインストール後、バージョンを上げると再インストールでエラーが発生する問題を修正しました。
  • ファイルマネージャにおいて、特定の条件下でフォルダの移動時にフォルダ選択が正しく動作しない不具合を修正しました (Thanks hissy)
  • Expressフォームのセット操作(追加・編集・削除)に関して、管理画面UI上の一部不整合を修正しました。
  • セレクトオプションの内容によってマイグレーションツールのエクスポート処理が壊れる問題を修正しました (Thanks bitterdev)
  • 存在しないレイアウトIDを指定した際の AreaLayout::getByID() の不具合を修正しました (Thanks ahukkanen)
  • PHP RedisのConcrete CMSによる実装におけるバグを修正しました。
  • コンテンツブロックの画像がカスタムサイズ(幅・高さ指定)で正しく表示されない問題を修正しました (Thanks mlocati)
  • ページリストおよび検索ブロックにおいて、予期しないパラメータが原因で発生する問題を修正しました (Thanks ahukkanen)
  • 属性のバリデーション実行時に必要なデータが設定されているかを事前に確認するよう改善しました (Thanks ahukkanen)
  • グリッドフレームワークに非対応のテーマでレイアウト名を取得しようとした場合にエラーが発生する問題を修正しました (Thanks ahukkanen)
  • 削除されたブロックのエイリアスがエクスポートされてしまう問題を修正しました (Thanks mlocati)
  • 関連ページIDが存在しない場合に、ファイルのダウンロード統計情報でエラーが発生する問題を修正しました (Thanks ahukkanen)
  • ボードの編集時に「並び替え」ラベルをクリックすると不具合が生じる問題を修正しました (Thanks mlocati)
  • キャッシュが無効な状態で、Expressブロックや属性が含まれたページを再インデックス化しようとするとエラーになる問題を修正しました (Thanks ahukkanen)
  • ユーザー通知ページで、PHPのstrictモード下において「参照による引数渡しのみ許可」のエラーが発生する問題を修正しました (Thanks jgarc186)
  • レガシーフォームのCSVエクスポート機能において、PHP 8との互換性に関する問題を修正しました (Thanks bitterdev)
  • スタックのインポート時に発生していた細かな不具合を修正しました (Thanks mlocati)
  • ページが存在しない場合でも、ページフィールドのエクスポート処理が適切に行われるよう修正しました (Thanks mlocati)

 

開発者向けアップデート

  • package-pack コマンドにて、phpunit.xml および tests ディレクトリがパッケージ生成時に除外されるようになりました (Thanks biplobice)
  • Concreteのインポート用XMLで、JSON文字列による設定の記述が可能となりました (Thanks mlocati)
  • 存在しないパスへのページインポート時に、状況に応じた適切な対応が可能となるよう、特定の例外をスローするよう改善されました (Thanks mlocati)
  • タスクの出力が Mercure 経由でもリアルタイムで表示されるよう修正されました。
  • btExportContentColumns を使用するコンテンツブロックが、独自の export および getImportData メソッドを実装しなくても、正しくインポート・エクスポートできるようになりました (Thanks mlocati)

 

セキュリティアップデート

以下の内容は要約した内容です。
詳細は原文にあるSecurity Updateの項目をご覧ください。

CVE-2025-0660 – フォルダ機能における保存型XSS(Stored XSS)

Concrete CMS 9系の「フォルダ追加」機能に、サニタイズ処理が行われていなかったことから、管理者権限のあるユーザーがXSS(クロスサイトスクリプティング)攻撃を行える脆弱性が存在していました。
この脆弱性は、悪意あるコード(JavaScriptなど)をフォルダ名に挿入し、他の管理者に実行させる可能性があります。

この問題は、以下の2つのコミットで修正されました:

  • 11bef02:フォルダ名セレクターにサニタイズ処理を追加
  • 7c134e9:フォルダ削除時の問題を修正

影響を受けるのは バージョン9以降 のConcrete CMSで、8系には影響しません。
CVSSスコアは 4.8(中程度)、攻撃には管理者権限が必要なため、外部からのリスクは限定的です。

 

CVE-2025-3153 – 住所属性におけるCSRFおよびXSS

Concrete CMS の「住所」カスタム属性において、特定の国と紐付いていない住所を表示する際、サニタイズ処理がされていない問題がありました。また、CSRF(クロスサイトリクエストフォージェリ)による不正操作も可能な状態でした。

この脆弱性は、管理者により住所入力が許可されたユーザーのみに限定されており、一般ユーザーや外部からの攻撃リスクは限定的です。ただし、成功すれば軽度の情報取得や管理画面の一部機能の停止が可能です。

この問題は以下のコミットで修正されました:

  • 12511(v9.4.0 RC2 含む):新たに保存されるデータのみにサニタイズが適用されます。
  • 既存の(更新前に入力された)住所データについては修正対象外のため、データベースの確認・監査が推奨されます。

CVSSスコアは 5.1(中程度) です。

 

後方互換性に関する注意事項

  • concrete/bin/concrete c5:boards:refresh コマンドにおいて、従来存在していた
    --regenerate オプションは削除されました。このコマンドは今後、常に再生成を実行するようになりました。Cron(定期実行)などでこのコマンドを使用している場合は、該当オプションを削除してください。
  • concrete/bin/concrete c5:reindex コマンドは、すでに数バージョン前から正しく動作していませんでしたが、今回正式に削除されました。代替として、concrete/bin/concrete task:reindex-content コマンドをご利用ください (Thanks ahukkanen)