ニュース

Apache Struts 2の脆弱性、「Jakarta Stream Multi Part Request」でも影響

 Apache Struts 2における任意のコードが実行可能な脆弱性(CVE-2017-5638/S2-045)に関して、パーサーを「Jakarta Stream Multi Part Request」に変更する方法では脆弱性を回避できないことが確認された。一般社団法人JPCERTコーディネーションセンター(JPCERT/CC)が17日、注意喚起情報を更新して明らかにした。JPCERT/CCでは、脆弱性を修正したApache Struts 2のバージョン「2.3.32」「2.5.10.1」にすることを強く推奨している。

 この脆弱性は、multipart/form-data形式のリクエストを処理するパーサー「Jakarta Multipart parser」の処理に起因するもの。細工を施したHTTPリクエストを送信することで、リモートから任意のコードを実行可能だという。実証コードが公開されているほか、実際にこれを悪用したとみられる攻撃も発生している。Apache Struts 2のバージョン「2.3.5~2.3.31」「2.5~2.5.10」が影響を受ける。

Apache Struts 2における任意のコードが実行可能な脆弱性のイメージ(IPAによる注意喚起より)

 Apache Struts 2の開発元であるApache Software Foundationでは、脆弱性を修正したApache Struts 2のバージョン「2.3.32」「2.5.10.1」をリリース済みだが、速やかなアップデートが難しい場合などの回避策として、multipart/form-dataを扱うパーサーを、デフォルトのJakarta Multipart parserから別の実装に変更する方法を提示。Jakarta Stream Multi Part Requestなどを挙げていた。

 JPCERT/CCが9日時点で出した注意喚起情報でも、使用するパーサーをJakarta Stream Multi Part Requestに変更した場合は任意のコードが実行されないことを確認したと報告していた。しかし、同パーサーでも攻撃が実行可能な場合があるとの情報を受け取ったという。そこで検証を行った結果、脆弱性の影響を受けるApache Struts 2のバージョンを使用している場合、パーサーをJakarta Stream Multi Part Requestに変更しても攻撃が可能なことを確認したとしている。

【追記 2017年3月22日 15:05】
 Apache Software Foundationは21日、Apache Struts 2の脆弱性に関する新たなアドバイザリ「S2-046」を公開。パーサー用の修正プラグインを提供開始した。Apache Struts 2のバージョン「2.3.32」「2.5.10.1」にアップデートできない環境へ向けた一時的な回避策となるもので、「Jakarta Multipart parser」を修正するプラグイン「Struts 2-secure-jakarta-multipart-parser-plugin-1.0.jar」と、「Jakarta Stream Multipart Request」を修正する「Struts 2-secure-jakarta-multipart-parser-plugin-1.0.jar」が提供されている(2017年3月22日付関連記事『Apache Struts 2脆弱性の一時的な回避策、パーサー用修正プラグイン公開』参照)。