「Spring Frameworkの脆弱性にはどのようなものがある?」
「セキュリティを強化するための具体的な対策・予防策が知りたい」
Spring Frameworkは、アプリケーション開発を便利にするJavaのフレームワークです。過去に危険度の高い脆弱性が発見されて、大きな話題となりました。Spring Frameworkを安全に使い続けるためには、セキュリティ対策の実施が欠かせません。
本記事では、以下の内容を詳しく解説します。
- Spring Frameworkとは
- Spring Frameworkが狙われる理由と事例
- セキュリティを強化する方法
- Spring Frameworkの脆弱性対策
- Spring Frameworkを狙った攻撃への予防策
本記事を読むことで、Spring Frameworkに関する脆弱性の事例や、実施すべきセキュリティ対策が分かります。Spring Frameworkを使用してJavaを開発している組織の方は、ぜひご一読ください。
OSSのフレームワークを導入している組織の方、必見!
Spring Frameworkの脆弱性対策を実施したいが、何から取り組むべき?
最新バージョンへ適宜アップデートする体制を整え、セキュアな状態を維持することが必要不可欠です。また、実装したコードに潜む脆弱性を見落とさないためにも、Webシステム全体の脆弱性をチェックし、最適な対策を実施する工程を加えましょう。方法はこちらの資料をご覧ください。
Spring Frameworkとは
Spring Frameworkとは、Webアプリケーションを作る際に活用するJavaのフレームワークのことで、単に「Spring」とも呼ばれます。フレームワークはアプリケーション開発を便利にする機能を備えたツールで、開発効率を上げるのに欠かせません。
Springの特徴には、以下のようなものがあります。
プログラム修正しやすい
Springは、一つひとつのプログラムを独立させてプログラム修正できるのが特徴です。Java開発は大規模なものが多く、従来はプログラム修正に時間がかかっていました。Springを使用すれば修正範囲が小さくなり、短時間でプログラム修正できます。
メンテナンスしやすい
共通プログラムのコードを短くまとめられるため、記述量が減ってメンテナンスしやすくなります。コードがシンプルになるので不具合も発見しやすく、修正も楽に行えます。
テストしやすい
Springでは1つの処理ごとではなく、一連の流れでテストできます。バグが発見しやすくなり、テスト工数も最小限で済みます。
なお、Springよりも機能を使いやすくしたものに「Spring Boot」があります。Spring BootはWebアプリケーションの構築に必要なサーバーを内包しており、環境設定も最低限で済むのが特徴です。ただし、使用するにはSpringの知識が必要となります。
またSpringを安全に使うには、Java自体の脆弱性についても知っておく必要があります。Javaの脆弱性については「Javaの脆弱性|攻撃による影響や被害事例を元に2つの有効な対策を紹介」で詳しく紹介しているので、ぜひご参考ください。
Spring Frameworkの脆弱性が狙われる理由と事例
Javaは汎用性が高くさまざまなOSで動作させられるため、人気のプログラミング言語です。Javaのフレームワークの中でも、SpringはWebアプリケーション構築において多くの組織で利用されています。多くの人がSpringを用いてJava開発を行っていることから、攻撃者から狙われやすい傾向にあります。
Springは過去に脆弱性が見つかっており、悪用された事例もあるフレームワークです。ここでは、発見された脆弱性「Spring4Shell」の概要と、悪用される条件・実際の被害について解説します。
Spring4Shell(CVE-2022-22965)
2022年3月31日に、通称Spring4Shell(CVE-2022-22965)と呼ばれるSpringの脆弱性が発見されました。Spring4Shellを利用してシステム内で任意のJavaコードを実行することで、サーバーの遠隔操作が可能となる危険度の高い脆弱性です。脆弱性の深刻度を示したCVSSv3では、10点満点中9.8点と評価されました。
Spring4Shellを悪用しようとする試みは3.7万件も観測され、脆弱性の発見から4日で欧州を中心とした世界の16%の組織が影響を受けました。
また、Java関連の脆弱性では、2021年11月に「Log4j」の重大な脆弱性が発見されました。Log4jはJavaのロギングツールであり、発見された当時は被害範囲も広く、社会に大きな影響を与えました。詳しくは「Log4jの脆弱性|想定される被害とその対策をわかりやすく解説」にて解説しているので、Log4jを使用している方はお読みいただき、対処方法を確認しておくことをおすすめします。
Spring4Shellの脆弱性が悪用される条件
Spring4Shellの脆弱性が悪用される条件には、以下の5つがあります。
- Springのバージョンが5.3.0から5.3.17、5.2.0から5.2.19、またはサポートが終了している過去のバージョン
- Javaの実行環境がJDK9以降のバージョンである
- Apache Tomcatをサーブレットコンテナとして使用している
- アプリケーションをSpring BootのWAR形式でパッケージ化している
- 「spring-webmvc」あるいは「spring-webflux」を使用している
脆弱性に対応するために、SpringおよびSpring Bootで修正版が配信されています。Spring4Shellは上記5つの条件をすべて満たしていないと悪用されませんが、今後新たな被害を受けるリスクも考えられるため、修正版を適用しておきましょう。
Spring4Shellの脆弱性を利用した実際の被害
Spring4Shellの脆弱性が実際に悪用され、「Mirai」や「コインマイナー」などのマルウェアに感染する事例が報告されています。マルウェアとはWebアプリケーションなどに害を与えたり、悪用したりすることが目的のソフトウェアです。感染すると情報を盗まれる、ファイルを改ざんされる、踏み台に利用されるなどの被害にあうリスクがあります。
MiraiはルーターなどのIoT機器をターゲットとするマルウェアで、サーバーやWebサイトに過剰な負荷をかけるDDoS攻撃を行います。コインマイナーは仮想通貨を採掘するマルウェアで、感染するとPCのデータ処理装置に負荷がかかり端末の処理機能が低下します。
Spring Frameworkの脆弱性を確認する方法
Springの脆弱性を確認する方法に、脆弱性情報データベースがあります。脆弱性情報データベースは既知の脆弱性に関する情報をデータ化し、詳細を一般公開しているプラットフォームです。
脆弱性情報を収集・公開しているサイトには、以下の3つがあります。
CVE
脆弱性に固有の名前や番号を付けてデータベース化しており、辞書のように検索できるサイト。
NVD
アメリカ国立標準技術研究所(NIST)が管理している脆弱性データベース。脆弱性の詳細やCVSSによる危険度を確認できる。
JNV
JPCERT/CCとIPAが管理している脆弱性データベース。日本で利用されているソフトウェアで見つかった脆弱性情報や、対策方法を提供している。
脆弱性情報データベースでSpringに関する情報を確認し、脆弱性が潜んだバージョンを使用していないか確認しておきましょう。
Spring Frameworkの脆弱性対策
Springの脆弱性による被害を防ぐには、常に最新バージョンに保つことが重要です。最新バージョンは既知の脆弱性が解消されているため、サイバー攻撃の被害にあうリスクを減らせます。
Springの最新バージョンについては、Springの公式サイトで確認可能です。バージョンを確認して最新でなかった場合は、すみやかにバージョンアップしましょう。
Spring Securityでセキュリティを強化する方法
セキュリティを強化するためのフレームワークに、「Spring Security」があります。Spring SecurityはSpringがベースになっているアプリケーションを保護するためのデファクトスタンダードであり、備えているセキュリティ機能は、以下の通りです。
機能 | 概要 |
---|---|
認証機能 | Webアプリケーションを利用するユーザーが不審でないか判別する。 |
認可機能 | ユーザーの権限をチェックし、不審な場合はアクセスを制限する。 |
セッション管理機能 | ユーザーとWebアプリケーション間の連続したやり取りを1つの操作として管理する。二重ログインなどを防止できる。 |
セキュリティヘッダ出力機能 | ChromeなどのWebブラウザに搭載されたセキュリティ対策機能を利用し、ブラウザを悪用した攻撃を防ぐ。 |
CSRF対策機能 | サイバー攻撃「クロスサイトリクエストフォージェリ」を防ぐ。 |
ファイアウォール機能 | 不審なURLを弾き、ディレクトリトラバーサルなどを防ぐ。 |
Spring Securityを活用することで、Springの安全性を高められます。ただしSQLインジェクションやバッファオーバーフローなど、対策できない脆弱性もあるため注意しましょう。Spring Securityで対策できる脆弱性とできない脆弱性は、以下の図の通りです。

Spring Securityの保護対象に含まれていない脆弱性には、別の対策が必要です。次章ではSpring Securityで対応できない脆弱性にも有効な対策方法を紹介します。
Spring Frameworkのさらなるセキュリティ強化
Spring Frameworkのセキュリティをさらに強化する方法には、次の2つがあります。
- 脆弱性診断を実施する
- WAFを導入する
脆弱性診断とWAFはそれぞれ役割が異なり、両方とも取り入れることで攻撃を防げる確率が高まります。脆弱性を早期発見してWebアプリケーションを守るために、2つの予防策の導入を検討しましょう。
1. 脆弱性診断を実施する
脆弱性診断を実施すると、SpringなどのフレームワークやWebアプリケーションに潜むセキュリティ上の欠陥を発見できます。定期的に脆弱性診断を実施すれば脆弱性の早期発見につながり、攻撃を受ける前に対策を立てることが可能です。
脆弱性診断で具体的に診断できる項目には、以下のようなものがあります。
- クロスサイトスクリプティングなどのサイバー攻撃につながる脆弱性の有無
- 認証機能の不備
- アカウント機能の不備
- 情報漏えいを招く脆弱性の有無
- プログラムロジックの問題点
Webアプリケーションのリリース前に脆弱性診断を実施し、リリース後も定期的に検査することで被害にあうリスクを大幅に減らせるでしょう。
なお脆弱性診断や診断ツールの詳細、クロスサイトスクリプティングへの対策方法などは、以下の記事で詳しく解説しています。ぜひご参考ください。
▼関連記事
脆弱性診断(セキュリティ診断)とは|必要性からやり方まで、すべて解説
脆弱性診断ツール(サービス)|有料・無料の違いと5つの選定ポイント
クロスサイトスクリプティング(XSS)|影響と対策をわかりやすく解説
2. WAFを導入する
WAFはWebアプリケーションに特化したファイアウォールで、導入すると不正アクセスやマルウェアなどのさまざまな攻撃からWebアプリケーションを守れます。通信内容を解析できるため、従来は検知が難しかった攻撃も防ぐことが可能です。
WAFはネットワーク上に設置するため、Springに脆弱性が潜んでいてもWebアプリケーションに攻撃が到達する前に通信をブロックできます。対応できる攻撃の種類が幅広いため、WAFを導入すればセキュリティを大幅に強化できるでしょう。
ただし、WAFだけでは防げない脆弱性も存在します。詳しくは「WAFとは|どこまで守れる?セキュリティ対策の効果をわかりやすく解説」に記載しているので、WAFの導入を検討される方は、お読みいただくことをおすすめします。
まとめ|Spring Frameworkの脆弱性に備えた対策を継続的に実施しよう
Spring Frameworkとは、Javaのアプリケーション開発を便利にするフレームワークのことで、単にSpringとも呼ばれます。過去に脆弱性が発見されているため、安全に使い続けるには最新バージョンへのアップデートとセキュリティ対策の実施が欠かせません。
Springは、「Spring Security」というフレームワークを導入するとセキュリティを強化できます。不審なアカウントのアクセスを制限したり、不正な通信をチェックしたりする機能があります。
また、以下の2つの予防策を実施することも、セキュリティ向上に有効です。
- 脆弱性診断を実施する
- WAFを導入する
脆弱性診断はセキュリティ上の欠陥を早期発見でき、WAFはサイバー攻撃からWebアプリケーションを守ります。Springを安全に使い続けるために、セキュリティ対策を継続的に実施しましょう。