本記事は2022年2月24日に@developersteveが公開した英語ブログMagento security requires additional patch to fix sanitization vulnerabilityを日本語化した内容です。
なお本ブログは、CVE-2022-24086 Magento Ecommerce を使用しているウェブサイトに対する脆弱性警告で発表した内容から更新されている情報について記載しています。
私たちはしばしば、技術者として、デプロイされたコードの修正、インフラストラクチャーコンポーネントの更新、コードのパッチ適用などのプレッシャーにさらされることがあります。多くの場合、それはほとんど知らされることはなく、5分前に実行する必要があります。このような「ゼロターンアラウンド」は、テストやチェックに時間をかけることなく、今すぐ修正だけすることを急ぐという、ある種の賭けのようなものです。
先日、多く利用されている電子商取引プラットフォーム「Magento」にセキュリティ研究者によって重大な問題が発見され、Magento Ecommerce、Magento Open Source、Adobe Commerceの各バージョンに重要なパッチがリリースされました。CVE-2022-24086で確認された脆弱性では、未認証のユーザーに対して、チェックアウト時にSQLインジェクションやPHPオブジェクトインジェクションの悪用を可能とする方法が確認されました
このため、Adobeのセキュリティ部門が初期パッチを展開し、迅速に修正プログラムを実行に移しました。数日後、研究者がこのパッチではコードの緩和が不十分であることを発見し、新たにCVE-2022-24087が起こり、2回目のパッチが生成されることになったのです。
新たに確認された脆弱性については、Adobe社からの最新のセキュリティ警告でパッチが提供されています。この新しいパッチは、元のCVE-2022-24086のパッチに追加して適用する必要があります。
私がアプリケーションセキュリティの領域で好きなことの1つは、デプロイメント、ライブラリ、およびプラットフォームのエンドユーザーに影響を与える可能性のあるあらゆるものに対するデューデリジェンスです。そこで、最新のパッチを調べて、何が変わったのかを見てみましょう。
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()
という再利用可能なフレームワーク関数を追加するもので、 \MagentoFrameworkTemplate
の拡張として加えられ、preg_replace
のサニタイズチェックとマッチングを行います。
sanitizeValue()
は、オリジナルのMDVA-43395パッチによって追加されたpreg_match()
および preg_replace()
のサニタイズコードを置き換えるために使用されます。
sanitizeValue()
関数は、サニタイズされたconfigureやカスタム値タイプの読み込みなど、コードベース全体の多くの場所で使用されます。
blockDirective()
はサニタイズマジックで、文字のマッチングとサニタイズが追加され、 \Magento\Framework\FilterTemplate
コアの一部となります。
resolveBlockDirective
はpublic関数からprivate関数へ、layoutDirective
は resolveLayoutDirective
へと移行しています。
なぜなら、private関数の宣言は、この関数をこの親クラスの中だけで使用できることを意味するからです。public関数は、アプリケーションのどこからでもアクセスすることができます。
どちらのパッチもAPSB22-12 Adobe Security Bulletinから入手可能で、PHP Composerをインストールするか、フォークされたコードベースにマージすることで利用可能です。
両方のパッチを適用する前に安全なバックアップを取ることと、 配備する前にコードをテストすることを忘れないでください。
Snykに登録して、新しい脆弱性アラートを受け取る
私が Magento のような大きなオープンソースプロジェクトでいつも行っていることは、Snyk Dashboard から公開リポジトリを監視することです。
Add Projectをクリックして、パブリックのGitHub
リポジトリを監視します。
これは特にプロジェクトのさまざまな開発バージョンにおいて有効で、開発中に潜在的な問題を警告することができるからです。また、開発中に修正すべき問題を特定できるため、プロジェクトに貢献する際にも役立ちます。
Magentoのようなプラットフォームプロジェクトでは、監視プロセスでパッケージマニフェスト、コード、コンテナ、IA 設定をスキャンして、潜在的な問題をハイライトします。最も優れているのは、可能な修正を提案し、検出された問題を段階的に解決する手助けをしてくれることです。