Skip to main content

Javaの重大なセキュリティ脆弱性トップ10を公開【2019年版一覧】

2019年5月27日

0 分で読めます

GitHubでの言及数をもとに、Javaライブラリの人気ランキングをまとめたOverOpsの年次ブログ記事が公開されています。そこでこの記事では、OverOpsが選んだ人気トップ10のJavaライブラリで見つかった脆弱性を確認し、そのうち3つを詳しく見ていきます。まずは、人気順に並べたOverOps選出のトップ10をご紹介します。

  1. Jackson

  2. Hadoop

  3. org.junit

  4. org.junit.runner

  5. org.springframework

  6. Jetty

  7. com.amazonaws.services

  8. org.apache.http.client

  9. org.apache.shiro

  10. org.apache.commons.lang3

Snykの脆弱性データベースによると、これらのトップ10ライブラリでは、公開されてから現在までに合計162件の脆弱性が開示されています。Jackson、Spring Framework、Jettyの各ライブラリについて、リリースごとの脆弱性の分布を詳しく見ていきます。また、それぞれのライブラリにおける脆弱性の深刻度や種類も確認します。この3つは、重大なセキュリティ情報が数多く開示されていることに加え、多くのアプリケーションで本番環境に使われる、広く知られた重要なライブラリであるため、特に興味深い事例です。


JavaプロジェクトをSnykでモニタリングしている場合、Snykのスキャンで検出された脆弱性については、すでに通知を受け取っているはずです。そうでない場合は、Snykでアプリケーションのコードリポジトリをテストして、この記事で紹介する脆弱性の影響を受けているかどうか、無料で確認しましょう。


Jacksonの脆弱性

2018年の人気ライブラリランキングは前年から少し変わり、今回はJacksonが1位になりました。Jacksonは、JavaアプリケーションでJSONの解析によく使われる、非常に一般的なデータ処理パッケージです。

このライブラリでは、これまでに合計21件の脆弱性が報告されており、その大半は信頼できないデータのデシリアライゼーションに関するものです。

脆弱性の種類

脆弱性の件数

信頼できないデータのデシリアライゼーション

16

サービス拒否

2

不適切な入力検証

1

サーバーサイドリクエストフォージェリ

1

XML外部エンティティ

1

デシリアライゼーションとは、JSONやXMLなどのファイルを受け取り、ホストアプリケーションが扱える形式に変換する処理です。信頼できないデータのデシリアライゼーション(CWE-502)の脆弱性は、信頼できるソースから届いたものではないデータを、妥当性を十分に検証せずにアプリケーションがデシリアライズすることで発生します。その結果、攻撃者が実行の状態やフローを制御できる可能性があります。

Javaのデシリアライゼーションに関する問題は、何年も前から知られています。しかし2015年、人気ライブラリ(Apache Commons Collection)にリモートコード実行を可能にする形で悪用できるクラスが見つかり、この問題への関心が大きく高まりました。これらのクラスは、IBM WebSphereやOracle WebLogicをはじめとする多くの製品に影響するゼロデイ攻撃で利用されました。

デシリアライゼーションは攻撃の標的になりやすいものです。脆弱なクラスが実行パス上にあり、信頼できないデータをデシリアライズするアプリケーションは、いずれも侵害される可能性があります。攻撃者がデシリアライザーにペイロードを送るだけで、コマンドが実行されてしまいます。

関連する脆弱性のほとんどが深刻度「高」と評価されています。信頼できないデータのデシリアライゼーションが原因となるケースが大半であり、これは現在までにCVSSスケールで挙げられている脆弱性の中でも、特に深刻なものだからです。

「重大度別のJacksonの脆弱性の件数」というタイトルの棒グラフ。重大度が高い脆弱性は19件、中程度は2件、低いものは0件。

影響を受けていませんか?

Jacksonの現行バージョン2.9.9には、実際のところ既知の脆弱性は1件もありません。脆弱性が報告されると適切に対処され、速やかに修正されていることを示す、よくメンテナンスされた人気ライブラリの好例です。Javaアプリケーションが影響を受けているかどうかを確認するには、Snykを使って今すぐ無料でテストしてください。アップグレード先として最適な、脆弱性のない近いバージョンについても、修正方法のアドバイスを受け取れます。

Spring Frameworkの脆弱性

Spring Frameworkは、現代のJavaアプリケーションで何百万人もの開発者に利用されている、間違いなく最も人気のあるWebフレームワークです。単なるライブラリではなく、さまざまなコンポーネントを含むエコシステム全体です。エコシステムが幅広く利用されていることを考えれば、脆弱性の件数はそれほど多くないように見えるでしょう。Spring Frameworkが登場してから数十年の間に見つかった脆弱性は、合計でわずか96件です。次のグラフは、脆弱性が特定された各フレームワークバージョンにおける分布を示しています。

Spring Frameworkのバージョン別脆弱性を示す棒グラフ。3.xが最も多く、5.xが最も少ない。

想像できるとおり、脆弱性の発見には時間がかかります。そのため、修正が実装されるまで複数のバージョンにわたって残っていたものも多く、該当する各バージョンでそれぞれ1件として数えられています。したがって、上記の数を合計しても96件にはなりません。また、現行バージョンに近づくにつれて脆弱性の件数が減っているのは、実際には存在していても、まだ発見されていない脆弱性がある可能性が高いためです。

脆弱性の大半は、主に深刻度「高」または「中」と評価されています。エンドポイント、トランスポート、セキュリティのサポートなど、アプリケーション向けに幅広い機能を提供するライブラリやフレームワークでは、よく見られる傾向です。

Springフレームワークの脆弱性を深刻度別に示す棒グラフ:重大45件、中程度43件、低度8件。

次に、脆弱性の種類を見てみましょう。以下には、Spring Frameworkの歴史の中で5回以上確認された脆弱性の種類をすべて挙げています。Spring Frameworkの範囲が非常に広いため、脆弱性の種類も多岐にわたることがわかります。また、こちらの任意コード実行の脆弱性のように、Spring Expression Language(SPEL)の悪用が原因となることもある「任意コード実行」の脆弱性にも注目してください。この脆弱性は「Spring Break」とも呼ばれています。

脆弱性の種類

脆弱性の件数

任意コード実行

12

XML外部エンティティ

11

アクセス制限の回避

9

サービス拒否

9

ディレクトリトラバーサル

7

クロスサイトリクエストフォージェリ

6

認証の回避

6

クロスサイトスクリプティング

5

影響を受けていませんか?

ベストプラクティスとして、アプリケーションでは常に利用可能な最新バージョンにアップグレードすることをおすすめします。しかし、さまざまな理由から、定期的にアップグレードできないこともあります。ライブラリやフレームワークは、必要に応じて(頻繁に)アップグレードされ、セキュリティ脆弱性の修正が目的となる場合もあります。そのペースに追いつくのは簡単ではありません。Springアプリケーションが影響を受けているかどうかを確認するには、Snykを使って今すぐ無料でテストしてください。アップグレード先として最適な、脆弱性のない近いバージョンについても、修正方法のアドバイスを受け取れます。

Jettyの脆弱性

Eclipse Jettyプロジェクトは、ライブラリとして使われることもありますが、軽量アプリケーションサーバーとして使われることのほうが多いでしょう(先ほど触れたSpring Frameworkに関連するSpring Bootフレームワークで使われることもよくあります)。Jettyは数十年にわたって開発されており、多くのユーザーや貢献者がいる大規模なコミュニティを擁しています。長年にわたり、Jettyプロジェクトでは38件の脆弱性が報告されており、その半数以上は暗号に関する問題(13件)または情報漏えい(6件)です。セキュリティコンポーネントが利用者に提供する機能の性質上、バグがセキュリティ上の問題につながることも少なくありません。以下は、Jettyプロジェクトで複数回確認された脆弱性の一覧です。

脆弱性の種類

脆弱性の件数

暗号に関する問題

13

情報漏えい

6

クロスサイトスクリプティング

3

任意コマンド実行

3

認可の回避

2

クロスサイトリクエストフォージェリ

2

セッションハイジャック

2

影響を受けていませんか?

これらの脆弱性、あるいは依存関係が使用する推移的依存関係に見つかった脆弱性の影響を受けているかどうかを確認する最善の方法は、Snykを使って今すぐ無料でテストすることです。アップグレード先として最適な、脆弱性のない近いバージョンについても、修正方法のアドバイスを受け取れます。

Snykでは、開発者がプロジェクトを簡単にテストできるよう、お気に入りのIDEやGitHub、GitLab、BitBucketなどのコードリポジトリ、CIサーバーをはじめとする多くのツールとのインテグレーションを提供しています。無料でテストできますので、自動修正機能を活用して、より安全なバージョンへアップグレードしてください。安全な開発を!

Capture the Flagを始めよう

オンデマンドのバーチャル入門ワークショップを見て、Capture the Flagの課題の解き方を学びましょう。