Struts 2 の脆弱性について

no extension

最近は Web や Java 絡みの仕事をしてないのでスルーしようかと思ったけど,あちこちで騒がれてるみたいなので簡単に紹介する。

脆弱性の内容

Apache Struts 2 には、「Jakarta Multipart parser」のファイルアップロード処理に起因する、リモートで任意のコードが実行される脆弱性(CVE-2017-5638)が存在します。
本脆弱性が悪用された場合、遠隔の第三者によって、サーバ上で任意のコードを実行される可能性があります。
via Apache Struts2 の脆弱性対策について(CVE-2017-5638)(S2-045)

既に攻撃コード(Proof of Concept; PoC)が存在し実際に被害が出ているようだ。

影響度(CVSS)

JVNVU#93610402: Apache Struts2 に任意のコードが実行可能な脆弱性」より

CVSSv3 基本評価値 7.3 (CVSS:3.0/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:L/A:L)

基本評価基準 評価値
攻撃元区分(AV) ネットワーク(N)
攻撃条件の複雑さ(AC) 低(L)
必要な特権レベル(PR) 不要(N)
ユーザ関与レベル(UI) 不要(N)
スコープ(S) 変更なし(U)
情報漏えいの可能性(機密性への影響, C) 低(L)
情報改ざんの可能性(完全性への影響, I) 低(L)
業務停止の可能性(可用性への影響, A) 低(L)

CVSS については解説ページを参照のこと。

影響を受ける製品

  • Apache Struts 2.3.5 から 2.3.31
  • Apache Struts 2.5 から 2.5.10

Struts 1 に影響があるかどうかは不明(公開されている PoC では問題ないようだ?)。

対策・回避策

対策としては以下のバージョンにアップデートする。

  • Apache Struts 2.3.32 以降
  • Apache Struts 2.5.10.1 以降

回避策として以下も紹介されている。

ただちにアップグレードすることが困難である場合、「Content-Type」のバリデーションを行い、”multipart/form-data”と一致しないリクエストを破棄するサーブレットフィルターを実装することにより問題を回避することが可能です。
via CVE-2017-5638 - 脆弱性調査レポート
また、Apache Software Foundation は、パーサをデフォルトの Jakarta Multipart parser (JakartaMultiPartRequest) から変更することも対策として呼びかけています。速やかなアップデートが難しい場合は、本対策の適用をご検討ください。
via Apache Struts 2 の脆弱性 (S2-045) に関する注意喚起

(追記) 代替パーサもこの脆弱性の影響を受けることが判明している。 ただし S2-046 で修正版が出ているようだ。

ブックマーク