概要
Spring Bootは 、ユーザーがJavaアプリケーションを迅速に開発できるように、Springプラットフォームの事前設定をすぐに使える状態で提供する。 Spring Frameworkを活用することで、Spring Bootはアプリケーションの構成、データアクセス、セキュリティを管理するさまざまなツールを提供しながら、Webアプリケーションの開発を簡素化する。
Spring Bootに署名偽造の脆弱性パストラバーサルの脆弱性(CVE-2024-38807)が確認された。この脆弱性により、ハッカーは、あるユーザーによって署名されたように見えるコンテンツを、実際には別のユーザーによって署名されるようにすることができます。 この脆弱性は、spring-boot-loader または spring-boot-loader-classic を使用し、ネストされた jar の署名検証を行うためにカスタムコードを使用しているアプリケーションに影響します。
This issue affects Spring Boot versions >=2.7.0 through <=2.7.21, >=3.0.0 through <=3.0.16, >=3.1.0 through <=3.1.12, >=3.2.0 through <=3.2.8, and >=3.3.0 through<=3.3.2.
詳細
モジュール情報
- 製品スプリングブーツ
- 影響を受けるパッケージとバージョン テキスト
- spring-boot-loader – versions >=2.7.0 through <=2.7.21
- spring-boot-loader-classic – versions: >=3.0.0 through <=3.0.16, >=3.1.0 through <=3.1.12, >=3.2.0 through <=3.2.8, and >=3.3.0 through<=3.3.2
- GitHubリポジトリ: https://github.com/spring-projects/spring-boot
- パッケージマネージャ:メイブン
脆弱性情報
このMedium-severity脆弱性は、上記でハイライトしたバージョンのSpring Bootの spring-boot-loaderと spring-boot-loader-classicパッケージに存在する。
この脆弱性は、他のJarの中に入れ子になっている署名されたJarを検証するためにカスタムコードを活用するSpring Bootを搭載したアプリケーションに存在し、先にロードされたJarの署名を誤って帰属させる可能性がある。
この脆弱性は、ネストされたJarと証明書が実行時にロードされ、処理される方法のギャップに起因する。その結果、動的なコードを実行する前に暗号署名に依存するアプリケーションは、署名されていない、不一致の、あるいはそうでなければ無効なJarを署名されたものとして検証することができる。
再現の手順
無効なシグネチャが見つからない、または無効なシグネチャがロードされることは、以下の手順で再現できる:
- ジャーを作成または選択し、次の方法で署名します。 jarsignユーティリティを使って署名する。
- 別途コンパイルしたクラス・ファイル(例:Foo.class)をJar(例:invalid.jar)に追加します。
- jarが確かに無効であることを検証する:jarsigner -verify invalid.jar
- 無効なjarを別のjar(つまりparent.jar)の中にネストする。
- parent.jarと invalid.jarが確実にロードされるようにアプリケーションを設定する。
- どちらのジャーも警告なしでロードされることに注意。
カスタム署名検証を実行するアプリケーションも影響を受ける可能性があることに注意してください。この脆弱性を再現する手順はアプリケーションに大きく依存するため、私たちのチームは問題を再現する手順を適宜更新していきます。もし、あなたのプロジェクトがこのような影響を受ける可能性があると思われる場合は、HeroDevsチームまでご連絡いただき、具体的なプロジェクトの状況についてご相談ください。
緩和
- Spring Boot 3.2と3.3のユーザーは、この問題が解決されたコミュニティがサポートする最新のソースバージョン(それぞれ少なくとも3.29と3.3.3)にアップデートしてください。
- 2.7を含む他のバージョンのSpring Bootはコミュニティサポートされなくなりました。コミュニティサポート版には、この問題に対処するためのアップデートはありません。詳細はこちらをご覧ください。
- 署名検証は2.7.0で導入されたため、2.6.x以下のSpring Bootユーザーはこの脆弱性の直接的な影響を受けませんが、これらのバージョンでは無効な署名を持つJarがエラーなくロードされる可能性があります。そのため、すべてのプロジェクトでSpring Bootのサポートされているバージョンにアップデートすることを推奨します。
- リスクを制限し、ランタイムエラーを防ぐために、すべてのjarが適切に署名され、有効であることを確認する。
移行に時間をかけたいユーザーは、HeroDevsのような商用サポートパートナーを活用して、EOL後のセキュリティ・サポートを受けることができる。
クレジット
参考文献
弊社がサポートするオープンソースソフトウェアに新たな脆弱性が修正された場合、いつでもアラートを受け取ることができます。