この短いメモは、オープンソースのC#プロジェクトにおける既知の脆弱性を検索するトピックに関する暫定的な要約です。 脆弱で別のCVEが表示されるコードの例を見てみたかったのですが、すべてがそれほど単純ではないことが判明しました...
背景(C / C ++プロジェクトの脆弱性)
プログラミング言語CおよびC ++に関しては、既に同様の問題に直面しています。見出しで提起された質問の本質がより明確になるように、以前に行った作業について少し言及したいと思います。
詳細は説明しませんが、いくつかの文章で説明します。 以前の目標は似ていました-オープンソースのC / C ++プロジェクトで見つかったCVEを調べ、PVS-Studioがそのような問題を見つけることができるかどうかを調べることです。 作業の結果に基づいて、私はいくつかの興味深い脆弱性を発見しました(そして、この方向で作業を続ければ、PVS-Studioを使用してその発生を防ぐことができたはずです)。 実験は正常に終了し、それに基づいて、「 PVS-Studioが脆弱性を見つけるのにどのように役立つか 」という記事を書きました。
便利なことに、CVEの説明には、多くの場合、脆弱性をカバーするコミットへのリンクが含まれていました。 したがって、コード変更の履歴を見ると、脆弱性が何であり、どのように閉じられたのかを理解することができました。 その結果、タスクはそのような修正の中で興味深いものを見つけることに要約されました。
上記を要約すると、チェックに便利なCVEを決定するいくつかのポイントを特定できます。
- ソースコードへのリンクが含まれています(修正の前後)。
- コミットはローカルです。つまり、複数のファイルに「広がり」ませんが、非常に特定の場所に影響します。
- この場所のコードは、特定のプロジェクトに固有ではなく、いくつかの一般に利用可能なツールの使用に関連付けられています(たとえば、標準のツールに代わるいくつかの機能)。
- この脆弱性は、アプリケーションロジックの特定のエラーの結果ではありません。
CVEがこれらの要件を満たしている場合、ソースコードの静的分析によって検出される可能性が高くなります。
C#プロジェクトの脆弱性
オープンソースC#プロジェクトの脆弱性を検索する方向で、さまざまな側面から何度か訪問しましたが、すべてが期待した結果をもたらしませんでした。
私が注目した主な情報ツールは、CVEデータベースとCVE Details Webサイト(およびGoogle、GitHub、reddit、StackOverflow)でした。
私が使用した基本的なアプローチは次のとおりです。
- CitデータベースでGitHubを使用して最も人気のあるC#プロジェクトを検索します。 GitHubのC#プロジェクトは「星」の数でソートされ、その後、CVEデータベースを使用して約100個のプロジェクトを「打ちました」-それらのほとんどは言及されていません。
- CVEデータベースをスキャンし、GitHubへのすべてのリンク(それらは5000以上ありました)を見つけ、C#(.cs)ファイルに影響するコミットへのリンクであったものから「スナッチ」した小さなユーティリティが作成されました。 驚いたことに、そのようなリンクは8つしかありませんでした! これは明らかに十分ではありませんでした。 さらに、すべてのコミットが前のセクションで説明した「最適性」の基準を満たしていませんでした。
- GitHubの検索クエリで、10個以上の星を持つすべてのC#プロジェクトの問題の中で、タイトル、トピック、またはコメントに「CVE」という単語を含むものを選択しました。 繰り返しますが、ほとんどの場合、特定のCVEは考慮されなかったか、修正されたコミットへのリンクがありませんでした。
- .NET Open Source Developer Projectsのリストからプロジェクトをソートしました。 GoogleのCVEデータベースのCVE Details Webサイトでそれらを検索しました。
- C#や.Netなどの特定のキーワードを検索して、CVEデータベースを調べました。
- CVEデータベースおよびCVE Details WebサイトからさまざまなCVE識別子をGoogleで検索します。
- さらに、C#/ .Netの脆弱性とオープンソースプロジェクトに関連するさまざまな検索クエリに関する情報をGoogleで検索しました。
驚いたことに、これらのアプローチはすべて期待した結果をもたらしませんでした。問題の本質を正確に理解するために、ソースコードへのリンクもある脆弱性がわずかに見つかりました。
C / C ++プロジェクトで同様の作業を経験したことは、私が驚いたことです:
- 原則として、CVEデータベース内のC#プロジェクトの少数の文書化された脆弱性。 C#プロジェクトはほとんど脆弱性の影響を受けませんか? 本当に信じられない。 または、C#コードの脆弱性は単に文書化/宣伝されていないので、CVEデータベースにはそれらの脆弱性はほとんどありませんか?
- 脆弱性はCVEデータベースにあり、脆弱性が閉じられたリリースへのリンクがあります(それ自体が既に存在を確認しています)が、オープンソースプロジェクトであっても脆弱なコードについては言及されていません! 私は繰り返しますが、C / C ++プロジェクトでは、原則として、脆弱性をカバーする特定のコミットへのリンクがありました。 すなわち 開発者は、脆弱性が解決されたことを報告しただけでなく、問題自体とその解決方法も示しました。
おわりに
一般的に、C#プロジェクトの脆弱性に関するこの状況に驚かされました。 なぜそんなに少ないのですか? なぜクローズされた脆弱性の例が少ないのですか?
状況は本当にそうですか? または、必要な結果を得ることができなかった私のアプローチに欠陥がありましたか?
脆弱なコードの解析例(文書化されている、つまり、CVE識別子を持っている)がある場合、または予想される結果を得ることができない私のアプローチの明らかな欠陥に気付いた場合は、興味深いメールでvasiliev@viva64.comにメールを書いてください私はあなたの提案/コメントを読みます。
発見された脆弱性のリスト
以下に、CVE識別子と脆弱なコードの例の両方を持つ脆弱性をリストします。 おそらく彼らは誰かにとって興味深い/役に立つでしょう。 また、脆弱性コードの例への手紙のリンクを提供したい場合は、この脆弱性の識別子が以下のリストにあるかどうかを確認してください。
- CVE-2017-15280
- CVE-2017-15279
- CVE-2015-8814
- CVE-2015-8813
- CVE-2013-6795
- CVE-2012-3382
- CVE-2011-0991
- CVE-2015-2526
- CVE-2016-0132
- CVE-2017-8759
- CVE-2017-8585
この記事を英語圏の聴衆と共有したい場合は、翻訳へのリンクを使用してください:セルゲイヴァシリエフ。 C#プロジェクトの脆弱性とは何ですか?
記事を読んで質問がありますか?
多くの場合、記事には同じ質問が寄せられます。 ここで回答を収集しました: PVS-Studioバージョン2015に関する記事の読者からの質問への回答 。 リストをご覧ください。