.NETエコシステム特有の傾向:上位20件の脆弱性の75%が高深刻度
Hayley Denbraver
2019年7月25日
0 分で読めます新しいセキュリティレポート「.NETオープンソースセキュリティの分析」をご紹介します。本レポートは次の3つの記事で構成されています。
.NETエコシステム特有の傾向:上位20件の脆弱性の75%が高深刻度
リモートコード実行、クロスサイトスクリプティング、サービス拒否の脆弱性が、.NETエコシステムで確認されている脆弱性の3分の2を占める
情報をすべてまとめた手作りのPDFレポートを無料でダウンロードいただけます。
はじめに
レポートの前編では、.NETエコシステムについて説明し、直接依存関係と間接依存関係から見た一般的なプロジェクトの構成を解説しました。今回は、Snykのプロジェクトスキャンで最も頻繁に検出される、既知の脆弱性上位20件を見ていきます。また、それらの脆弱性に関連するライブラリも取り上げます。既知の脆弱性の種類と深刻度をエコシステム全体の視点から解説した内容については、レポートの最終章をご覧ください。
.NETプロジェクトで最もよく見つかる脆弱性
Snykのプロジェクトスキャンで最も頻繁に検出され、現在ユーザーに最も大きな影響を与えている上位10個のライブラリを見てみましょう。まず上位10個の特徴を確認し、特に興味深い脆弱性を含む3つのライブラリを詳しく見ていきます。表には、脆弱性のないバージョンに移行するために必要な最低限のアップグレード先も記載しています。

この表からはいくつかの点がわかります。まず、クロスプラットフォームのWebサーバーであるASP.NET Core Kestrelは広く利用されている一方、関連する複数のライブラリに由来する高深刻度の脆弱性が数多く見つかっています。
次に、これらのライブラリの脆弱性数は全体的に少ないものの、深刻度は高い傾向があります。Snyk Vulnerability DatabaseとNuGetレジストリのデータを使って、上位3つのライブラリの用途や人気度、含まれる既知の脆弱性を詳しく見ていきましょう。
system.net.http
system.net.httpは、最新のHTTPアプリケーション向けのプログラミングインターフェースを提供します。これには、アプリケーションがHTTP経由でWebサービスを利用するためのHTTPクライアントコンポーネントや、クライアントとサーバーの両方でHTTPヘッダーの解析に使えるHTTPコンポーネントが含まれます。

人気度
system.net.httpの累計ダウンロード数は約8,100万件です。現行バージョン(4.3.4)は約340万件ダウンロードされています。System.http.netの1日あたりの平均ダウンロード数は約3万件です。
脆弱性
system.net.httpの脆弱性については、良いニュースと悪いニュースがあります。まずは良いニュースから。このライブラリの最新バージョン(4.3.4)には、既知の脆弱性はありません。利用している場合は、最新バージョンにアップグレードしましょう。
次は悪いニュースです。このライブラリの他のバージョンには、高深刻度の脆弱性が複数含まれています。そのうち1つは非常に古いバージョンにのみ存在しますが、バージョン4.1.2未満および4.3~4.3.2(両端を含む)には、高深刻度の脆弱性が4件、中深刻度の脆弱性が1件あります。
これらの脆弱性には、情報漏えい、不適切な証明書検証、権限昇格、認証の回避、サービス拒否など、さまざまな種類があります。NuGetでは、このライブラリの興味深い統計情報を確認できます。ダウンロードされたバージョンやその頻度に加え、直近6週間の詳細な情報も含まれています。
残念ながら、統計によると、過去6週間にこのライブラリがダウンロードされた回数のうち、最新バージョン(既知の脆弱性が一切ない唯一のバージョン)が占める割合はわずか16%でした。つまり、過去6週間のパッケージダウンロードの84%は、既知の高深刻度の脆弱性を複数含むバージョンだったということです。

NuGetの数値には希望も見えます。最新バージョン(4.3.4)はリリースから7か月が経っていますが、最近になって導入ペースが上がっているようです。バージョン4.3.4のダウンロード数は約330万件で、そのうち120万件は過去6週間にダウンロードされています。
system.io.pipelines
system.io.pipelinesは、単一のプロデューサーと単一のコンシューマー向けのバイトバッファー管理ツールです。つまり、.NETで高性能なI/O(入出力)を簡単に実現できるライブラリです。

人気度
system.io.pipelinesのダウンロード数は約840万件で、最新バージョン(4.5.3)は約60万件ダウンロードされています。バージョン4.6.0は現在プレビュー版です。
脆弱性
現在、system.io.pipelinesライブラリに関連する既知の脆弱性は1件のみです。先ほど取り上げたsystem.net.httpライブラリと同様、system.io.pipelinesの脆弱性にも良い面と悪い面があります。
まずは悪いニュースから。このライブラリに関連する唯一の高深刻度の脆弱性は、Webサイトをクラッシュさせる可能性のあるサービス拒否の脆弱性です。深刻度スコアは高く、悪用されると正規ユーザーがWebサイトにアクセスできなくなるほか、サーバーコストの増加やさまざまな問題につながるおそれがあります。
では、良いニュースです。このライブラリに関連する唯一の高深刻度の脆弱性は、サービス拒否の脆弱性です。
そうです、これも良いニュースです。ほかの脆弱性とは異なり、サービス拒否攻撃は通常、セキュリティ侵害を目的としていません。この脆弱性によって稼働率が低下する可能性はありますが、データや個人情報の損失につながる可能性は低いと考えられるため、安心材料になります。
推奨事項は、system.io.pipelinesをバージョン4.5.1以降にアップグレードし、この新しく便利なライブラリのセキュリティ状況を継続的に確認することです。
microsoft.aspnetcore.server.kestrel.core
microsoft.aspnetcore.server.kestrel.coreライブラリは、クロスプラットフォームWebサーバーであるASP.NET Core Kestrelのコアコンポーネントです。Kestrelはイベント駆動型の非同期I/Oベースのサーバーで、新しいASP.NETアプリケーションに最適なWebサーバーと一般に考えられています。

人気度
microsoft.aspnetcore.server.kestrel.coreの累計ダウンロード数は2,200万件を超えます。そのうち約63万件は、2018年後半にリリースされた最新バージョン(2.2.0)のダウンロードです。
脆弱性
このライブラリには現在、既知の脆弱性が4件あります。中深刻度のサービス拒否が2件、高深刻度のサービス拒否と権限昇格がそれぞれ1件です。良いニュースは、最新の2つのバージョン(2.1.7と2.2.0)には既知の脆弱性がないことです。
このライブラリに関する悪いニュースは、関連ライブラリ(microsoft.aspnetcore.server.kestrel.transport.abstractions)も、最もよく見られる脆弱性に関連するライブラリの一覧に含まれていることです。microsoft.aspnetcore.server.kestrel.coreを使用している場合、一般的な脆弱性を含む他のライブラリも使用している可能性があります。
また、Kestrelはフル機能のWebサーバーではなく、多くの場合、別のライブラリの背後で動作することも覚えておきましょう。Kestrelを単独で実行するか、NGINXやIISなどのライブラリの背後で実行するかによって、セキュリティへの取り組み方が変わります。
よく見られる脆弱性を最も多く含む、人気上位20ライブラリのうち残りのものについては、次の表で説明します。

次に、これらの脆弱性の種類、深刻度、修正方法を見ていきましょう。
.NETで最もよく見つかる脆弱性の種類
最もよく見られる脆弱性には、さまざまな種類があります。ただし、上位10件のうち半数以上はサービス拒否の脆弱性です。サービス拒否(DoS)は、システムを本来の正規ユーザーが利用できない状態にすることを目的とした攻撃の総称です。
上位10件の脆弱性の半数以上は、サービス拒否の脆弱性です。

これはセキュリティ上、興味深い意味を持ちます。ほかの脆弱性とは異なり、DoS攻撃は通常、セキュリティ侵害を目的としていません。正規ユーザーがWebサイトやサービスを利用できないようにし、サービス停止を引き起こすことを狙っています。
よく知られたサービス拒否攻撃の一つに、DDoS(分散型サービス拒否)攻撃があります。多数のマシンから大量のトラフィックを発生させ、システムのネットワーク回線を埋め尽くそうとする攻撃です。オープンソースライブラリの場合、DoSの脆弱性を悪用し、アプリケーションコードの欠陥やオープンソースライブラリの使用を通じて、サービスをクラッシュさせたり、機能不全に陥らせたりすることができます。
DoSの脆弱性には、次のような一般的な種類があります。
CPU/メモリの過剰消費:細工されたリクエストを攻撃者が送信し、システムの処理に不釣り合いな時間をかけさせる。
クラッシュ:細工されたリクエストを攻撃者が送信し、システムをクラッシュさせる。
高額なサービス拒否攻撃、それに伴う悪評、サービス停止、収益の損失は誰も望みませんが、機密情報が漏えいするセキュリティ侵害は、さらに深刻な事態になりかねません。
脆弱性の深刻度
このデータからわかる悪いニュースは、最もよく見られる脆弱性の4分の3が高深刻度と評価されていることです。上位20件の残り4分の1は中深刻度の脆弱性で、低深刻度の脆弱性はありませんでした。CVSSスコアは5.3~8.8で、中央値は7.5でした。

最もよく見られる脆弱性の75%が高深刻度と評価されています。
.NETエコシステムでは、プロジェクトに含まれる脆弱性の数は多くない傾向が見られます。そのためセキュリティ対策を後回しにしてもよいと考える人がいるかもしれませんが、深刻度の統計を見れば、それが誤りであることがわかります。.NETエコシステムでは既知の脆弱性はそれほど多くないものの、対処しなければ深刻な混乱や損害を招くおそれがあります。
すべての脆弱性に修正方法がある
Snykが選出した上位20件の脆弱性には、すべて修正方法が用意されていました。
上位20件の脆弱性の大半は高深刻度と評価されていますが、良いニュースもあります。Snykが選出した上位20件の脆弱性には、すべて修正方法が用意されていました。これは非常に良い知らせです。修正方法がなくても脆弱性を把握することには価値がありますが、プロジェクトのセキュリティ向上につながる具体的な対策に勝るものはありません。
さらに詳しく知りたい方へ
エコシステムの既知の脆弱性を俯瞰してみませんか?レポートの最終章はこちらからご覧いただけます。
もちろん、レポート全文を無料でダウンロードすることもできます。