0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

攻撃コードは、ログで待っていた。Magento「StyleSmuggler」の怖い仕組み

0
Posted at

エラーとして記録した文字列が、あとからPHPとして実行される。

Adobe Commerce/Magentoで悪用が確認された「StyleSmuggler」(CVE-2026-75650)は、この連鎖を使います。認証不要。Adobeの評価はCVSS 3.1で 10.0。9月7日に緊急修正が公開されています。[1][2]

怖いのは、攻撃コードを置くリクエストと、動かす処理が別になっていることです。不正な入力にエラーを返しても、その文字列を保存した先で攻撃が続きます。

リクエスト、ログ、テンプレートへ同じデータが渡る概念画面を確認するエンジニア

AI生成の説明用イメージです。実際の被害現場やMagentoの管理画面ではありません。

エラーを返した。その裏で仕込みが進む

Akamaiが9月14日に公開した分析では、代表的な経路はこうなります。[2]

細工されたリクエスト
    ↓
解釈できなかった値をログへ保存
    ↓
別のリクエストでテンプレート処理を起動
    ↓
汚染されたログを読み込み、PHPを実行

入口はGraphQLへのHTTPリクエスト。ヘッダやパラメータに入った攻撃コードが、エラー処理を通ってサーバー側のログに残ります。その後、別の処理からそのファイルが読み込まれ、実行に至ります。

「不正な値だから記録した」が、攻撃者のファイル書き込みを手伝ってしまう。

ログを保存した瞬間にPHPが動くわけではありません。保存と実行をつなぐ、後段の読み込み経路が問題です。

調査でも、最終的にコードが動いたリクエストだけを見ると、最初に文字列を置いた操作を見落とします。入口と実行地点を分けて追う必要があります。

メールを開かなくても実行される

Sansecが報告した経路の一つは、決済失敗の通知メールを生成させるものでした。攻撃コードが動くのは、サーバーがメール本文を組み立てる段階です。受信者が開く必要はなく、配送に失敗しても成立し得ます。[3]

ここで「では、メール送信を止めよう」と考えると、対処を狭めすぎます。

Sansecの9月14日更新には、メールを使わずに実行する経路も記載されています。報告ファイルやログを経由するため、セッションの保存先をRedisに変えるだけでも防げません。[3]

見るべきなのはメール機能の有無ではなく、外部入力が保存されたファイルを、どの処理が実行可能なものとして読み込むかです。

.logという名前は、安全装置にならない

PHPのincludeは、指定されたファイルを取り込み、評価します。PHPとして評価される内容を含むファイルを渡せば、拡張子が.phpでなくても、その名前だけでは実行を止められません。[4]

読み方の違いを、概念的に並べるとこうです。

ログをデータとして読む
    → 記録された文字列を取り出す

同じファイルをコードとして評価する
    → 含まれるPHPコードが実行対象になる

「自分のサーバーが作ったファイル」と「中身を信頼できるファイル」は同じではありません。HTTPヘッダ、検索語、フォーム入力など、ログの材料は外から届きます。OWASPも、別の信頼領域から来たイベント情報には、偽造や悪意あるデータが混じる前提で扱うよう求めています。[5]

自分の実装を点検するなら、ファイルごとに次の二つを突き合わせてください。

  • 誰が中身に影響できるか。 未認証の利用者でも、エラーを起こして文字列を残せるか。
  • 何として読み直すか。 単なるデータか、テンプレートか、実行するコードか。

この二つが別々のチームやモジュールに分かれると、危険な組み合わせが見えにくくなります。

たとえば、ログ側は「この値は表示せず保存するだけ」と考え、テンプレート側は「サーバー内のファイルだから安全」と考える。個々の説明はもっともらしくても、つなげると外部の文字列が実行地点まで届きます。

レビューで描くべき矢印は、入力から保存まで、その先の読み込みまでです。

対応は「パッチを当てた」で終わらせない

まず、Adobeの最新版の対応表で、製品名と正確なバージョンに合うVULN-39341の修正を確認してください。9月11日更新の手順には、同じ2.4.8系でもパッチレベルによって異なるアーカイブが載っています。「2.4.8向け」を一つ選べば済む話ではありません。[6]

そのうえで、作業を三つに分けます。

  1. 侵入口を塞ぐ。 対象バージョン用の修正を適用し、適用結果を確認する。
  2. 侵入済みの痕跡を調べる。 ログ、実行中のプロセス、その実体のパス、永続化設定、想定外のPHPファイルを調査する。パッチは、すでに置かれたバックドアまで消してくれるものではありません。[3]
  3. 持ち出された可能性のある資格情報を無効化する。 Adobeは暗号化キーだけでなく、関連するAPI・連携・サーバーの資格情報も、発行元で更新するよう案内しています。[6]

保管庫の鍵を交換しても、すでにコピーされたAPIキーは失効しません。

Adobeの手順にはメンテナンスモードやcronの停止・再開も含まれます。本番で暗号化キーだけを単発で変えず、利用環境に合う一連の手順として実施してください。[6]

StyleSmugglerから持ち帰るべき問いは、一つです。

あなたのシステムで、外から来た文字列が「保存したから信頼できるもの」に変わる場所はありませんか。

ログ、テンプレート、アップロード、ジョブの再実行。その接続部分まで確認する価値があります。

参考資料

確認日:2026年9月20日。影響範囲と修正ファイルは、適用時にもAdobeの最新情報を確認してください。

[1] Adobe — Security update available for Adobe Commerce | APSB26-146(9月7日)

[2] Akamai — CVE-2026-75650: StyleSmuggler — Critical RCE in Adobe Commerce and Magento(9月14日)

[3] Sansec — StyleSmuggler: Magento and Adobe Commerce 0-day RCE under active attack(9月5日公開、9月14日更新)

[4] PHP Manual — include

[5] OWASP — Logging Cheat Sheet

[6] Adobe — Critical Security Update Available for Adobe Commerce (APSB26-146)(9月11日更新)

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?