界: Environment
このセクションには、ソース コード以外のものでも、作成中の製品のセキュリティにとって重要なものがすべて含まれています。この分野が対象とする問題は、ソース コードに直接関係しないため、この分野の他の部分と分けました。
Build Misconfiguration: External Maven Dependency Repository
Abstract
この Maven ビルド スクリプトは外部ソースに依存しているため、攻撃者が悪意のあるコードを最終製品に挿入したり、ビルド マシンの制御権を得る可能性があります。
Explanation
依存関係の管理を支援するためのいくつかのツールが Java の開発環境で利用できるようになっています。Apache Ant および Apache Maven のいずれのビルドシステムにも、依存関係を管理しやすくするために特別に設計された機能が搭載されており、Apache Ivy は明示的に依存関係マネージャとして開発されています。これらのツールの動作は異なりますが、ビルド時にビルドプロセスで指定された外部の依存関係を自動的にダウンロードするという共通の機能を実装しています。この機能により、開発者 B は開発者 A と同じ方法でソフトウェアを簡単にビルドできるようになります。開発者は依存関係情報をビルドファイルに格納するだけで、ソフトウェアをビルドできます。つまり、各開発者およびビルドを担当するエンジニアは、手動で依存関係を管理する作業に付帯する問題に煩わされることなく、一貫性のある方法で依存関係を取得して、コードをコンパイルし、配布できます。次の例では、ビルドプロセスの一環として外部の依存関係を管理するために Ivy、Ant、および Maven がどのように使用されているかを示しています。
Maven では、依存関係を取得する明示的な URL を一覧表示する代わりに、開発者が依存関係の名前とバージョンを指定し、Maven はその基盤となる設定に基づいて、依存関係を取得するサーバーを識別します。よく使用されるコンポーネントの場合、これによって開発者は依存関係の場所を調査する必要がなくなります。
例 1: 以下の Maven pom.xml ファイルからの抜粋は、開発者が複数の外部の依存関係を、その名前とバージョンを使用してどのように指定するかを示しています。
これらのシステムには、2 つの異なるタイプの攻撃シナリオが影響します。攻撃者は、依存関係をホストしているサーバーを侵害するか、ビルド マシンが使用している DNS サーバーを侵害して、依存関係をホストするサーバーのホスト名のリクエストを、攻撃者が制御するマシンにリダイレクトする可能性があります。どちらのシナリオでも、攻撃者は、侵害されていない他のマシンで実行されているビルドに、悪意のあるバージョンの依存関係を挿入できます。
トロイの木馬の依存関係を提供するために使用される攻撃手段かどうかに関係なく、これらのシナリオには、ビルド システムが悪意のあるバイナリを盲目的に受け入れてビルドに含めるという共通の要素があります。ビルド システムには悪意のあるバイナリを拒否する手段がなく、コード レビューなどの既存のセキュリティ メカニズムは通常、外部の依存関係ではなく内部で開発されたコードに焦点を当てているため、このタイプの攻撃は、高い確率で、開発環境や実運用環境に目立たぬように広がります。
侵害された依存関係が手動のビルド プロセスに組み込まれるリスクはあるものの、自動ビルド システムでは外部ソースから依存関係を取得する傾向があるため、新しい環境でビルド システムを実行すると、そのたびに攻撃者による攻撃のチャンスが増えます。攻撃者は、依存関係が何度も取得される間に、依存関係サーバーまたは DNS サーバーを 1 回侵害するだけで、ビルドが行われているマシンを侵害できます。
Maven では、依存関係を取得する明示的な URL を一覧表示する代わりに、開発者が依存関係の名前とバージョンを指定し、Maven はその基盤となる設定に基づいて、依存関係を取得するサーバーを識別します。よく使用されるコンポーネントの場合、これによって開発者は依存関係の場所を調査する必要がなくなります。
例 1: 以下の Maven pom.xml ファイルからの抜粋は、開発者が複数の外部の依存関係を、その名前とバージョンを使用してどのように指定するかを示しています。
<dependencies>
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.1</version>
</dependency>
<dependency>
<groupId>javax.jms</groupId>
<artifactId>jms</artifactId>
<version>1.1</version>
</dependency>
...
</dependencies>
これらのシステムには、2 つの異なるタイプの攻撃シナリオが影響します。攻撃者は、依存関係をホストしているサーバーを侵害するか、ビルド マシンが使用している DNS サーバーを侵害して、依存関係をホストするサーバーのホスト名のリクエストを、攻撃者が制御するマシンにリダイレクトする可能性があります。どちらのシナリオでも、攻撃者は、侵害されていない他のマシンで実行されているビルドに、悪意のあるバージョンの依存関係を挿入できます。
トロイの木馬の依存関係を提供するために使用される攻撃手段かどうかに関係なく、これらのシナリオには、ビルド システムが悪意のあるバイナリを盲目的に受け入れてビルドに含めるという共通の要素があります。ビルド システムには悪意のあるバイナリを拒否する手段がなく、コード レビューなどの既存のセキュリティ メカニズムは通常、外部の依存関係ではなく内部で開発されたコードに焦点を当てているため、このタイプの攻撃は、高い確率で、開発環境や実運用環境に目立たぬように広がります。
侵害された依存関係が手動のビルド プロセスに組み込まれるリスクはあるものの、自動ビルド システムでは外部ソースから依存関係を取得する傾向があるため、新しい環境でビルド システムを実行すると、そのたびに攻撃者による攻撃のチャンスが増えます。攻撃者は、依存関係が何度も取得される間に、依存関係サーバーまたは DNS サーバーを 1 回侵害するだけで、ビルドが行われているマシンを侵害できます。
References
[1] Standards Mapping - DISA Control Correlation Identifier Version 2 CCI-001167, CCI-001499, CCI-001749, CCI-001812
[2] Standards Mapping - NIST Special Publication 800-53 Revision 4 CM-5 Access Restrictions for Change (P1), CM-11 User-Installed Software (P1), SC-18 Mobile Code (P2)
[3] Standards Mapping - NIST Special Publication 800-53 Revision 5 CM-5 Access Restrictions for Change, CM-11 User-Installed Software, CM-14 Signed Components, SC-18 Mobile Code
[4] Standards Mapping - OWASP API 2023 API8 Security Misconfiguration
[5] Standards Mapping - OWASP Mobile 2014 M7 Client Side Injection
[6] Standards Mapping - OWASP Mobile 2024 M8 Security Misconfiguration
[7] Standards Mapping - OWASP Mobile Application Security Verification Standard 2.0 MASVS-CODE-4
[8] Standards Mapping - OWASP Top 10 2013 A5 Security Misconfiguration
[9] Standards Mapping - OWASP Top 10 2017 A6 Security Misconfiguration
[10] Standards Mapping - OWASP Top 10 2021 A05 Security Misconfiguration
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 4.0 Requirement 2.2.6
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 4.0.1 Requirement 2.2.6
[13] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-001390 CAT II, APSC-DV-001430 CAT II, APSC-DV-001440 CAT II, APSC-DV-003300 CAT II
[14] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-001390 CAT II, APSC-DV-001430 CAT II, APSC-DV-001440 CAT II, APSC-DV-003300 CAT II
[15] Standards Mapping - Security Technical Implementation Guide Version 4.4 APSC-DV-001390 CAT II, APSC-DV-001430 CAT II, APSC-DV-001440 CAT II, APSC-DV-003300 CAT II
[16] Standards Mapping - Security Technical Implementation Guide Version 4.5 APSC-DV-001390 CAT II, APSC-DV-001430 CAT II, APSC-DV-001440 CAT II, APSC-DV-003300 CAT II
[17] Standards Mapping - Security Technical Implementation Guide Version 4.6 APSC-DV-001390 CAT II, APSC-DV-001430 CAT II, APSC-DV-001440 CAT II, APSC-DV-003300 CAT II
[18] Standards Mapping - Security Technical Implementation Guide Version 4.7 APSC-DV-001390 CAT II, APSC-DV-001430 CAT II, APSC-DV-001440 CAT II, APSC-DV-003300 CAT II
[19] Standards Mapping - Security Technical Implementation Guide Version 4.8 APSC-DV-001390 CAT II, APSC-DV-001430 CAT II, APSC-DV-001440 CAT II, APSC-DV-003300 CAT II
[20] Standards Mapping - Security Technical Implementation Guide Version 4.9 APSC-DV-001390 CAT II, APSC-DV-001430 CAT II, APSC-DV-001440 CAT II, APSC-DV-003300 CAT II
[21] Standards Mapping - Security Technical Implementation Guide Version 4.10 APSC-DV-001390 CAT II, APSC-DV-001430 CAT II, APSC-DV-001440 CAT II, APSC-DV-003300 CAT II
[22] Standards Mapping - Security Technical Implementation Guide Version 4.11 APSC-DV-001390 CAT II, APSC-DV-001430 CAT II, APSC-DV-001440 CAT II, APSC-DV-003300 CAT II
[23] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-001390 CAT II, APSC-DV-001430 CAT II, APSC-DV-001440 CAT II, APSC-DV-003300 CAT II
[24] Standards Mapping - Security Technical Implementation Guide Version 5.1 APSC-DV-001390 CAT II, APSC-DV-001430 CAT II, APSC-DV-001440 CAT II, APSC-DV-003300 CAT II
[25] Standards Mapping - Security Technical Implementation Guide Version 5.2 APSC-DV-001390 CAT II, APSC-DV-001430 CAT II, APSC-DV-001440 CAT II, APSC-DV-003300 CAT II
[26] Standards Mapping - Security Technical Implementation Guide Version 5.3 APSC-DV-001390 CAT II, APSC-DV-001430 CAT II, APSC-DV-001440 CAT II, APSC-DV-003300 CAT II
[27] Standards Mapping - Security Technical Implementation Guide Version 6.1 APSC-DV-001390 CAT II, APSC-DV-001430 CAT II, APSC-DV-001440 CAT II, APSC-DV-003300 CAT II
desc.config.java.build_misconfiguration_external_maven_dependency_repository