Skip to main content

Magentoのセキュリティ対策に追加パッチが必要:サニタイズの脆弱性を修正

著者
Headshot of DeveloperSteve Coochin

DeveloperSteve Coochin

blog feature security alert purple

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()のパターンが追加され、望ましくない種類のユーザー入力文字をサニタイズできるようになりました。

正規表現パターンとpreg_match条件を含む、PHPのpreg_replaceループを示すコードスニペット。

パッチのデプロイ後にセキュリティ研究者が発見したのは、このパッチでは攻撃経路を十分に封じることができず、フレームワーク内でさらに深刻な脆弱性が発生する可能性さえ生じていたということです。

新しいパッチ(MDVA-43443)では、再利用可能なフレームワーク関数sanitizeValue()が追加されました。この関数は\Magento\Framework\Filter\Templateの拡張として追加され、preg_replaceを使ってサニタイズのチェックと照合を行います。

MagentoのFilterクラスと、ブール値を返すか文字列から波括弧を削除するsanitizeValue関数を示すコード差分。

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

Magentoのテンプレートフィルターが、修飾子を適用する前にレンダリングされたテキストをサニタイズする様子を示すコード差分

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

MagentoのHTTPパラメーターとカスタム変数の値を検証するため、sanitizeValueの呼び出しを追加したPHPコードの差分

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

blockDirectiveを定義し、二重波括弧をHTMLエンティティに置き換えるPHPコードスニペット

resolveBlockDirectiveはpublic関数からprivate関数に変更され、layoutDirectiveはresolveLayoutDirectiveに移行されます。

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

MagentoのPHPレイアウトディレクティブ関数の名前をresolveLayoutDirectiveに変更し、ディレクティブのパラメーターを確認するコード差分。

どちらのパッチもAPSB22-12 Adobe Security Bulletinから入手できます。PHP Composerでインストールするか、フォークしたコードベースにマージしてください。

両方のパッチを適用する前に、必ず安全なバックアップを実行し、デプロイ前にコードをテストしてください。

Snykに登録して、新たな脆弱性アラートを受け取る

Magentoのような大規模なオープンソースプロジェクトでは、私はいつもSnyk Dashboardから公開リポジトリを監視しています。

Add Projectをクリックし、公開GitHubリポジトリを監視します。

「magento」の検索結果を表示するプロジェクト検索画面。magento/magento2が選択され、GitHub、Cloud Foundry、Bitbucket Cloud、CLIからプロジェクトを追加するオプションが表示されています。

プロジェクトの開発ブランチでは特に役立ちます。開発中に潜在的な問題の通知を受け取れるからです。また、開発中のうちに修正が必要な問題を特定できるため、プロジェクトへの貢献にも役立ちます。

Magentoのようなプラットフォームプロジェクトでは、監視プロセスがパッケージマニフェスト、コード、コンテナ、IaC設定を検査し、潜在的な問題を検出します。さらに、修正候補を提案し、検出された問題への対応手順を案内してくれるのも大きな利点です。

CTFを始めよう

オンデマンドのバーチャル入門ワークショップで、CTFチャレンジの解き方を学びましょう。

続きを読む

illustration hero ai
Blog

PHPが重大な未認証RCEの脆弱性2件を修正(CVE-2026-109618、CVE-2026-109619):今すぐアップデート

PHPのリクエスト処理に重大な脆弱性が2件あり、未認証のリモートコード実行につながるおそれがあります。修正版にアップグレードするか、旧バージョンにはベンダー提供のバックポートを適用してください。

blog feature ai lilac
Blog

エージェント型修正で脆弱性バックログをプルリクエストに変える

Evo Remediation Agentがオープンプレビューで利用可能になり、Evo Agentic AppSecに依存関係の自動解決機能が加わりました。AppSecチームは継続的な修正キャンペーンを実施できるようになりました

AI Background min crop
Blog

AIが、あなたが受け入れてきたあらゆるリスクを一気に顕在化させる:AI Security Panel: Unfilteredから得た7つの洞察

AIによって攻撃はより安価かつ高速になり、組織がすでに抱えているリスクが露呈しています。4人のセキュリティリーダーが、機械の速度に対応する防御と迅速な修復が今不可欠である理由を語ります。