Magentoのセキュリティ対策に追加パッチが必要:サニタイズの脆弱性を修正
DeveloperSteve Coochin
2022年2月24日
0 分で読めますテクノロジーに携わる私たちは、デプロイ済みのコードの修正や、インフラストラクチャコンポーネントの更新、コードへのパッチ適用を急かされることがよくあります。十分な予告もなく、5分前に対応が必要になることも珍しくありません。「即時対応」を迫られると、急いで修正するか、時間をかけてテストや確認を行うかという判断を迫られます。
先日、Magento Ecommerce、Magento Open Source、およびMagentoのAdobe Commerceバージョン向けに、重大なパッチがリリースされました。セキュリティ研究者が、広く採用されているこのECプラットフォームで重大な問題を発見したためです。CVE-2022-24086は、未認証ユーザーがチェックアウト時にSQLインジェクションやPHPオブジェクトインジェクションを利用できる脆弱性です。
これを受け、Adobeのセキュリティチームは迅速に対応し、最初のパッチをリリースしました。しかし数日後、研究者たちはこのパッチではコードの脆弱性を十分に緩和できないことを発見し、新たにCVE-2022-24087が登録され、2つ目のパッチが本番環境に適用されました。
新たに特定された脆弱性へのパッチは、Adobeの最新のセキュリティアラートで公開されています。新しいパッチは、元のCVE-2022-24086パッチに追加で適用する必要があります。
AppSecの分野で私がいつも大切にしていることのひとつが、デプロイやライブラリ、そしてプラットフォームのエンドユーザーに影響を与える可能性のあるものを慎重に確認することです。それでは、最新のパッチを詳しく見て、何が変わったのか確認しましょう。
CVE-20220-24087のパッチを確認する
新しいパッチMDVA-43443の説明に入る前に、まずは元のMDVA-43395パッチを振り返り、その内容を確認しましょう。
どちらの脆弱性も、Magento Open SourceおよびAdobe Commerceのバージョン2.3.4以上、2.4.5-p1未満、または2.3.7-p2未満にのみ影響する点に注意が必要です。
元のパッチ(MDVA-43395)では、Magentoショップのアプリケーションロジックのチェックアウト処理に、ユーザー入力を安全にサニタイズする処理が追加されました。/Email/Model/Template/transDirectiveとVarDirective.phpの両方にpreg_replace()とpreg_match()のパターンが追加され、望ましくない種類のユーザー入力文字をサニタイズできるようになりました。

パッチのデプロイ後にセキュリティ研究者が発見したのは、このパッチでは攻撃経路を十分に封じることができず、フレームワーク内でさらに深刻な脆弱性が発生する可能性さえ生じていたということです。
新しいパッチ(MDVA-43443)では、再利用可能なフレームワーク関数sanitizeValue()が追加されました。この関数は\Magento\Framework\Filter\Templateの拡張として追加され、preg_replaceを使ってサニタイズのチェックと照合を行います。

sanitizeValue()は、元のMDVA-43395パッチで追加されたpreg_match()とpreg_replace()によるサニタイズコードを置き換えるために使用されます。

sanitizeValue()関数は、サニタイズ済みの設定値やカスタム値の型の読み込みなど、コードベース内のさまざまな箇所で使用されます。

blockDirective()では、さらにサニタイズ処理が追加されます。\Magento\Framework\FilterTemplateのコアに文字の照合とサニタイズを追加します。

resolveBlockDirectiveはpublic関数からprivate関数に変更され、layoutDirectiveはresolveLayoutDirectiveに移行されます。
ここで関数をpublicからprivateに変更することは、PHPアプリケーションのセキュリティにおいて重要です。private関数は親クラス内からのみ使用できますが、public関数はアプリケーション全体のどこからでもアクセスできるためです。

どちらのパッチもAPSB22-12 Adobe Security Bulletinから入手できます。PHP Composerでインストールするか、フォークしたコードベースにマージしてください。
両方のパッチを適用する前に、必ず安全なバックアップを実行し、デプロイ前にコードをテストしてください。
Snykに登録して、新たな脆弱性アラートを受け取る
Magentoのような大規模なオープンソースプロジェクトでは、私はいつもSnyk Dashboardから公開リポジトリを監視しています。
Add Projectをクリックし、公開GitHubリポジトリを監視します。

プロジェクトの開発ブランチでは特に役立ちます。開発中に潜在的な問題の通知を受け取れるからです。また、開発中のうちに修正が必要な問題を特定できるため、プロジェクトへの貢献にも役立ちます。
Magentoのようなプラットフォームプロジェクトでは、監視プロセスがパッケージマニフェスト、コード、コンテナ、IaC設定を検査し、潜在的な問題を検出します。さらに、修正候補を提案し、検出された問題への対応手順を案内してくれるのも大きな利点です。
CTFを始めよう
オンデマンドのバーチャル入門ワークショップで、CTFチャレンジの解き方を学びましょう。



