Apache Strutsの脆弱性とWAFによる対策

 2019.11.14  株式会社ジェイピー・セキュア

Apache Strutsは、オープンソースソフトウェアとして提供されているWebアプリケーションフレームワークです。ゼロからWebアプリケーションを開発するよりも効率的に開発を進めることができますが、Apache Strutsでは、度々深刻な脆弱性が発見されているという問題も抱えています。

本稿ではStruts2の脆弱性を解説し、Webアプリケーションを保護するためのWAF(Web Application Firewall)による対策ついてご紹介します。

なぜ、Apache Struts2には脆弱性が多いのか?

Struts2では、コンパイルなしでコードを実行するOGNL (Object-Graph Navigation Language) と呼ばれるJavaに似たライブラリが多用されています。2017年3月に発生した多くの情報漏えい事件の原因となったS2-045においてもOGNLの機能が使用されていました。この脆弱性は大きな話題となり「OGNLインジェクション」という言葉を見聞きした方も多いと思います。

OGNLは便利な機能ですが、脆弱性があるとHTTPリクエストに埋め込まれた悪意のあるコードがOGNLによって実行されることになります。ユーザー入力によってOGNLを操作、実行されてしまうのは非常に危険であることは言うまでもありません。OGNLはStruts2の随所で使用されており、切り離すことはできない存在です。今後も主要機能の1つである以上、新たな改良においてもOGNLが使用されていくでしょうし、まだ知られていない箇所を含めて脆弱性が発見される可能性を否定することはできません。

Struts2には、OGNLに起因するRCE(Remote Code Execution)の脆弱性、攻撃が多いという実情があります。

 

こんなにある?Apache Struts2の脆弱性

Struts2の脆弱性には影響の大小、国内では報道されなかったものを含めて多数存在しています。サイバー攻撃から企業・組織を守る取り組みや国民に向けた情報セキュリティ対策の普及啓発などを行っている情報処理推進機構(IPA)では、Struts2の脆弱性を一覧で紹介しています。

<Apache Struts脆弱性一覧:抜粋>

 

 

番号

脆弱性対策情報

影響を受けるバージョン

S2-016

任意のコマンドを実行される脆弱性

2.0.0 - 2.3.15

S2-020

複数の脆弱性

2.0.0 - 2.3.16.1

S2-021

ClassLoader を操作される脆弱性

2.0.0 - 2.3.16.3

S2-022

ClassLoader を操作される脆弱性

2.0.0 - 2.3.16.3

S2-032

任意のコードを実行される脆弱性

2.3.20 - 2.3.28 (2.3.20.3 および 2.3.24.3 を除く)

S2-033

任意のコードを実行される脆弱性

2.3.20 - 2.3.28 (2.3.20.3 および 2.3.24.3 を除く)

S2-037

任意のコードを実行される脆弱性

2.3.20 - 2.3.28.1

S2-045

任意のコードを実行される脆弱性

2.3.5 - 2.3.31

2.5 - 2.5.10

S2-046

Jakarta Multipart パーサに関する脆弱性(S2-045と同様)

2.3.5 - 2.3.31

2.5 - 2.5.10

S2-048

任意のコードを実行される脆弱性

2.1.x - 2.3.x

S2-052

任意のコードを実行される脆弱性

2.1.2 - 2.3.33

2.5 - 2.5.12

S2-053

任意のコードを実行される脆弱性

2.0.0 - 2.3.33

2.5 - 2.5.10.1

S2-057

任意のコードを実行される脆弱性

2.3 - 2.3.34

2.5 - 2.5.16

サポートされていないバージョンも影響を受けるおそれがあります。

S2-058

影響を受けるリリースバージョンの変更のお知らせ

2.0.0 - 2.5.12

引用:IPA『Apache Struts2 の脆弱性対策情報一覧

一覧には「任意のコードを実行される脆弱性」と記載されたものが多くなっていますが、前述のRCEに分類される脆弱性です。

いかがでしょうか?Struts2にはRCEだけでなく、様々なタイプの脆弱性があり、常に最新バージョンを使用するように努めないとサイバー攻撃の被害に遭う危険性があります。

WAFによるApache Struts2のセキュリティ対策

Struts2のセキュリティ対策として、Strutsを「使わない」または「別のフレームワークに切り替える」という対策が示されることがあります。根本的な対処であり、新しくWebサービスを提供していくにあたり、わざわざStruts2を使用することはないと言えます。しかしながら、Struts2は業種・業態を問わず幅広く利用されており、現実的に今すぐ変えることはできないと考えられます。また、サポートが終了しているStruts1のまま運用を続けているサイトも存在するくらいですので、運用上の理由でStruts2を使用し続けなければならないサイトも多数存在すると考えられます。

そこで、WAFというセキュリティ製品の有効活用をおすすめしています。WAFはクライアントからWebサイトへのアクセスを検査し、WAFを経由する通信1つ1つをチェックします。SQLインジェクションやクロスサイトスクリプティング、RCEなどの脆弱性を悪用した攻撃がないか通信内容をチェックして、検出・防御してくれるのです。脆弱性の有無にかかわらず、独立したかたちでWebアプリケーションを保護することができ、Webサイトセキュリティを大幅に強化できます。

2017年に公開されたS2-045の脆弱性は、日本時間の3月6日に脆弱性が公開されました。短時間でPoC(Proof of Concept)が確認されると、日本国内でも数多くの被害が発生し、3月8日にはIPAからの注意喚起がありました。このとき、多くのWAFベンダーは3月7日時点で脆弱性を悪用する攻撃に対するシグネチャをリリースしており、セーフティネットとしてWAFが大きな役割を果たしました。

もちろん、最新バージョンの利用やパッチの適用という根本的な対策が第一です。しかし、すぐにバージョンアップできない、テストに時間を要するなど、運用上の課題があるのも事実です。攻撃者は待ってくれません。Apache Strutsのセキュリティ対策の一つとして、WAFの有効活用をぜひご検討ください。

 

WAFとは ~ SiteGuardシリーズが選ばれる理由 ~

SITEGUARD
ジェイピー・セキュアソフトウェアライセンス価格表

RELATED POST関連記事


RECENT POST「技術動向」の最新記事


Apache Strutsの脆弱性とWAFによる対策
SITEGUARD

RANKING人気資料ランキング

RECENT POST 最新記事

ブログ無料購読

RANKING人気記事ランキング

TOPIC トピック一覧