Adobe Commerce / Magento Open Source 2.4.6-p3 / 2.4.5-p5 / 2.4.4-p6がリリースされました

リリーススケジュール通り、Adobe CommerceとMagento Open Sourceに対するセキュリティアップデートが公開されました。
今回のセキュリティアップデートについては、Adobe Security Bulletinで概要が開示されています。

今回はこのセキュリティアップデートについて詳しく解説したいと思います。

対象となるバージョン

現在、Adobe Commerce / Magento Open Sourceのサポート対象となっているバージョン系統としては、

  • 2.4.6
  • 2.4.5
  • 2.4.4

があります。(2.4.7はまだベータなので一旦話から除外しています)
Adobe Commerce向けには延長サポートして、2.4.3以前のバージョンに対するアップデートも提供されていますが、これはあくまでも希望者向けの限定的なものとなります。
本来のセキュリティアップデート対象としては、

  • 2.4.6-p2以前の2.4.6系
  • 2.4.5-p4以前の2.4.5系
  • 2.4.4-p5以前の2.4.4系

ということになります。

アップデートの内容

Adobe Security Bulletinによると、今回のアップデートでは10件の脆弱性が修正されているようです。
このうち

  • Criticalが7件
  • Importantが3件

となっており、重要度が高いものとなっています。
さて、もう1つのリリース情報として有益なものであるリリースノートを確認しておきましょう。

2.4.6-p3

2.4.5-p5

2.4.4-p6

のそれぞれにリリースノートが用意されていますが、いずれも下記の1点のみとなっています。
(2.4.6-p3のnginx向けサンプル設定ファイルの変更はアプリケーション本体ではないので除外します)

This release introduces a new full page cache configuration setting that helps to mitigate the risks associated with the {BASE-URL}/page_cache/block/esi HTTP endpoint. This endpoint supports unrestricted, dynamically loaded content fragments from Commerce layout handles and block structures. The new Handles Param configuration setting sets the value of this endpoint’s handles parameter, which determines the maximum allowed number of handles per API. The default value of this property is 100. Merchants can change this value from the Admin (Stores > Settings:Configuration > System > Full Page Cache > Handles Param.

新しい設定値が追加された、ということはわかりますが、肝心の脆弱性については不明瞭です。
というわけでソースコードの差分を調べてみましょう。

セキュリティアップデートで影響を受ける箇所とは

2.4.6-p2から2.4.6-p3にアップデートを行った前後のソースコード差分を見ると、以下の箇所でコードの更新が起きていることがわかります。
(Adobe Commerce / Magento Open Source以外のライブラリや、テストケースなどは除外しています)

  • vendor/magento/framework/App/DeploymentConfig.php
  • vendor/magento/framework/App/Http/Context.php
  • vendor/magento/framework/Url/Validator.php
  • vendor/magento/module-page-cache/Controller/Block.php
  • vendor/magento/module-page-cache/etc/config.xml
  • vendor/magento/module-page-cache/etc/di.xml
  • vendor/magento/module-page-cache/etc/adminhtml/system.xml
  • vendor/magento/module-usps/etc/config.xml
  • vendor/magento/module-usps/Helper/Data.php
  • vendor/magento/module-usps/i18n/en_US.csv
  • vendor/magento/module-usps/Model/Carrier.php
  • vendor/magento/module-usps/Setup/Patch/Data/UpdateAllowedMethods.php
  • vendor/magento/zend-db/library/Zend/Db/Adapter/Pdo/Abstract.php
  • vendor/magento/zend-loader/library/Zend/Loader/Autoloader/Resource.php
  • vendor/magento/zend-pdf以下

このうち、

  • USPS:サービス仕様変更
  • jQuery:ライブラリのマイナーアップデート
  • Zend PDF:ロジックよりも設定値追加などの互換性対応
  • vendor/magento/framework/App/DeploymentConfig.php:ACSD-51892によるもの

のようなので、あまり気にしなくても良いでしょう。
そうなると対象は、

  • vendor/magento/framework/App/Http/Context.php
  • vendor/magento/framework/Url/Validator.php
  • vendor/magento/module-page-cache/Controller/Block.php
  • vendor/magento/module-page-cache/etc/config.xml
  • vendor/magento/module-page-cache/etc/di.xml
  • vendor/magento/module-page-cache/etc/adminhtml/system.xml
  • vendor/magento/zend-db/library/Zend/Db/Adapter/Pdo/Abstract.php
  • vendor/magento/zend-loader/library/Zend/Loader/Autoloader/Resource.php

に絞られます。

  • vendor/magento/zend-db/library/Zend/Db/Adapter/Pdo/Abstract.php
  • vendor/magento/zend-loader/library/Zend/Loader/Autoloader/Resource.php

についてはプロパティの追加だけなので、これも直接セキュリティに影響してはいなさそうです。
そうなると、10件の脆弱性の殆どは残りの6ファイルが対象である可能性が高くなります。

リリースノートに書かれていた内容を振り返る

ここで、先程のリリースノートに書かれていた内容に立ち返ってみましょう。
今回のアップデートでは、

Stores > Settings:Configuration > System > Full Page Cache > Handles Param

に新しい設定値が追加されています。
この値の定義は、当然ながら

vendor/magento/module-page-cache/etc/adminhtml/system.xml

にあり、

vendor/magento/module-page-cache/Controller/Block.php

で使用されているわけです。

実はESI(Edge Side Including)が使えるAdobe Commerce / Magento Open Source

さて、このPageCacheモジュールにあるBlock.phpですが、URLの法則的にはリリースノートにある通り

 {BASE-URL}/page_cache/block/esi 

で使用されている、コントローラーの親クラスにあたります。
ESIを含めた内容については別記事で解説したいと思いますが、要は今回のアップデートで

ESI関係のパラメータ数に上限が設けられた

と理解していただければ問題はないでしょう。

残りのファイル

さて、対象はあと2つです。

vendor/magento/framework/Url/Validator.php

については、URLスキームがhttpsまたはhttp以外許可しなくなりました。それだけの修正です。

vendor/magento/framework/App/Http/Context.php

は、ACSD-51892に関連する修正のようです。
また、暗号化方式がsha-1からsha-256に変わっているようです。

アップデート全体に対するまとめ

今回のアップデートも、やはりセキュリティアップデート限定のため、影響範囲はさほど大きくありません。
反面、Security Bulletinに上がっている脆弱性はどれも深刻なものです。
できるだけ早い段階でアップデートを実施するほうが良いとは思います。

なお、次のリリースは2024年2月13日(日本時間だと2月14日)の予定です。次回もセキュリティリリースのみの予定となっています。
そして、2024年4月9日(日本時間だと4月10日)にはいよいよ新バージョンである2.4.7がリリースされる予定になっています。

年末年始を挟む関係上次のアップデートは4ヶ月後となりますが、今回のアップデートが2023年最後のものになるため、年末年始対応と合わせて適用しておくことをおすすめします。