Magento Open Source / Adobe Commerce 2.4.3-p2 以前を狙ったマルウェアに関する注意喚起

Magento Open Source / Adobe Commerceを標的としたマルウェアが報告されています。
Foregenix社が2022年9月15日に公開したレポートによると、Magento Open Source / Adobe Commerce 2.4.3-p2以前のバージョンが影響を受ける模様です。
また、Sansec社からも同様の注意喚起が出ています。

今回はこのマルウェアの感染経路と影響、対策について解説したいと思います。

影響を受けるMagento Open Source / Adobe Commerceのバージョン

まず最初に、このマルウェアの影響を受けるMagento Open Source / Adobe Commerceのバージョンを確認しておきましょう。
影響を受けるとされているのは、以下のバージョンです。

  • Magento Open Source 2.4.3-p2 以前、2.3.7-p2 以前
  • Adobe Commerce 2.4.3-p2 以前、2.3.7-p2 以前

2.4.3-p2と2.3.7-p3で対策された修正については、 Adobe Security Bulletin に掲載されています。
この修正自体は、2022年2月にリリースされたものとなっています。

脆弱性の概要

Adobe Security BulletinHelp Center の記事によると、この脆弱性は「任意コードの実行」であるようです。
リリースされているセキュリティパッチの内容から、どのようなものであるかを確認しておきましょう。

対象となるファイル

このパッチの対象となるファイルは、

  • Magento/Email/Model/Template/Filter.php
  • Magento/Framework/Filter/DirectiveProcessor/VarDirective.php
  • Magento/Framework/Filter/DirectiveProcessor/DependDirective.php
  • Magento/Framework/Filter/DirectiveProcessor/ForDirective.php
  • Magento/Framework/Filter/DirectiveProcessor/IfDirective.php
  • Magento/Framework/Filter/DirectiveProcessor/SimpleDirective.php

の6つです。

対象となるファイルは、いずれもメールテンプレートに関連するものばかりです。
歴史的にMagentoは1.xの時代からメールテンプレートに関しては独自実装を採用してきました。
今回の脆弱性は、このメールテンプレートを処理するための実装に不備があったことによるものです。

マルウェアを仕込まれる経路と場所

マルウェアを仕込まれる経路

今回のマルウェアは以下の手順でサイト上に仕込まれるようです。

  1. 注文確定時のリクエスト値に、Base64エンコードで細工したデータを混入させる
  2. 注文確定時の処理を「わざと」失敗させる
  3. メールテンプレートが問題の値を誤って処理してしまい、攻撃者の意図したコードがサイト上に追加される

Sansecの記事によると、注文データにあるVATフィールドを標的とするケースがあるようです。リンク先記事にはBase64エンコードを解除した結果が掲載されています。

マルウェアが仕込まれる場所

マルウェアは以下の場所に設置される模様です。

  • /pub/media/health_check.php
  • /generated/code/Magento/Framework/App/FrontController/Interceptor.php

それぞれどのようなものが設置されるかを見ていきましょう。

/pub/media/health_check.php

このファイルは本来Magento Open Source / Adobe Commerceの構成上は存在しません。
同じファイル名のファイルが /pub/health_check.php として存在してはいますが、mediaディレクトリ下にできるものはマルウェアです。

このファイルの中には "ata" というPOSTリクエスト値を受け取って、任意コード実行するためのバックドアが記述されています。

/generated/code/Magento/Framework/App/FrontController/Interceptor.php

generated下には、Magento フレームワークが自動生成するプログラムが元々配置されるようになっています。
今回のマルウェアはこの自動生成されるファイルの一つをターゲットとし、既存コードを置き換えてしまいます。

こちらのファイルについては、

の記事を見ていただくほうが良いと思います。両記事とも中段以降に解説があります。

マルウェアを仕込まれるとどうなるか

Sansec側には記述がありませんが、Foregenix側ではこのマルウェアに感染したあとの影響についての言及があります。
主に2種類の影響があるようです。

カード情報を盗聴するマルウェア

カード情報を盗聴するマルウェアについての言及があります。

  • システム設定値を改変し、不正スクリプトを読み込むように改変
  • /lib/web/jquery.js の改変

が行われた場合、カード情報の漏洩が起きるリスクがあります。

マルウェアによって収集されたカード情報は、jpegファイルを偽装した形で一旦サーバー上に蓄えられ、外部から閲覧可能な状態になってしまいます。

再感染のリスク

このマルウェアの最も巧妙かつ恐ろしいところは、「すぐに再感染する」というところです。

ファイルシステムに対する改変を監視するツールなどを用いて、不正アクセス検知を行っている場合、Interceptor.phpやhealth_check.phpといったファイルの作成・改変を検知することが可能です。
このような仕組みを準備している事業者の場合、直ちにマルウェアに感染したファイルを除去できることでしょう。

しかしながら、このマルウェアは巧妙な手段で対策を講じてきます。

Foregenixの記事では、

  • 複数の不審なプロセスが攻撃者によって起動させられる
  • これらのプロセスはInterceptor.phpの変更を監視し、感染している状態に戻そうとする

といった仕組みについて触れています。

対策方法

このマルウェアに対する対策は、下記のものが効果的です。

  • Adobe Security BulletinHelp Center で公開されているセキュリティパッチを適用する(2.4.3-p2/2.3.7-p3以前のバージョン向け)
  • 2.4.3-p2/2.3.7-p3または2.4.4以降のバージョンへのアップデート

暫定措置として、/generated/code/Magento/Framework/App/FrontController/Interceptor.php への書き込み権限を除去する、という方法もありますが、本質的な解決にはならないと思われます。
やはりセキュリティパッチまたはアップデートの実施が確実でしょう。