|
| 1 | +--- |
| 2 | +title: About supply chain security |
| 3 | +intro: '{% data variables.product.product_name %} helps you secure your supply chain, from understanding the dependencies in your environment, to knowing about vulnerabilities in those dependencies{% ifversion fpt or ghec or ghes > 3.2 %}, and patching them{% endif %}.' |
| 4 | +miniTocMaxHeadingLevel: 3 |
| 5 | +shortTitle: Supply chain security |
| 6 | +redirect_from: |
| 7 | + - /code-security/supply-chain-security/managing-vulnerabilities-in-your-projects-dependencies |
| 8 | +versions: |
| 9 | + fpt: '*' |
| 10 | + ghes: '*' |
| 11 | + ghae: issue-4864 |
| 12 | + ghec: '*' |
| 13 | +type: overview |
| 14 | +topics: |
| 15 | + - Advanced Security |
| 16 | + - Dependency review |
| 17 | + - Dependency graph |
| 18 | + - Vulnerabilities |
| 19 | + - Dependencies |
| 20 | + - Pull requests |
| 21 | + - Repositories |
| 22 | +--- |
| 23 | + |
| 24 | +## About supply chain security at GitHub |
| 25 | + |
| 26 | +With the accelerated use of open source, most projects depend on hundreds of open-source dependencies. This poses a security problem: what if the dependencies you're using are vulnerable? You could be putting your users at risk of a supply chain attack. One of the most important things you can do to protect your supply chain is to patch your vulnerabilities. |
| 27 | + |
| 28 | +You add dependencies directly to your supply chain when you specify them in a manifest file or a lockfile. Dependencies can also be included transitively, that is, even if you don’t specify a particular dependency, but a dependency of yours uses it, then you’re also dependent on that dependency. |
| 29 | + |
| 30 | +{% data variables.product.product_name %} offers a range of features to help you understand the dependencies in your environment{% ifversion ghes < 3.3 or ghae %} and know about vulnerabilities in those dependencies{% endif %}{% ifversion fpt or ghec or ghes > 3.2 %}, know about vulnerabilities in those dependencies, and patch them{% endif %}. |
| 31 | + |
| 32 | +The supply chain features on {% data variables.product.product_name %} are: |
| 33 | +- **Dependency graph** |
| 34 | +{% ifversion fpt or ghec or ghes > 3.1 or ghae %}- **Dependency review**{% endif %} |
| 35 | +- **{% data variables.product.prodname_dependabot_alerts %} ** |
| 36 | +{% ifversion fpt or ghec or ghes > 3.2 %}- **{% data variables.product.prodname_dependabot_updates %}** |
| 37 | + - **{% data variables.product.prodname_dependabot_security_updates %}** |
| 38 | + - **{% data variables.product.prodname_dependabot_version_updates %}**{% endif %} |
| 39 | + |
| 40 | +The dependency graph is central to supply chain security. The dependency graph identifies all upstream dependencies and public downstream dependents of a repository or package. You can see your repository’s dependencies and some of their properties, like vulnerability information, on the dependency graph for the repository. |
| 41 | + |
| 42 | +{% ifversion fpt or ghec or ghes > 3.1 or ghae %} |
| 43 | +Other supply chain features on {% data variables.product.prodname_dotcom %} rely on the information provided by the dependency graph. |
| 44 | + |
| 45 | +- Dependency review uses the dependency graph to identify dependency changes and help you understand the security impact of these changes when you review pull requests. |
| 46 | +- {% data variables.product.prodname_dependabot %} cross-references dependency data provided by the dependency graph with the list of known vulnerabilities published in the {% data variables.product.prodname_advisory_database %}, scans your dependecies and generates {% data variables.product.prodname_dependabot_alerts %} when a potential vulnerability is detected. |
| 47 | +{% ifversion fpt or ghec or ghes > 3.2 %}- {% data variables.product.prodname_dependabot_security_updates %} use the dependency graph and {% data variables.product.prodname_dependabot_alerts %} to help you update dependencies with known vulnerabilities in your repository. |
| 48 | + |
| 49 | +{% data variables.product.prodname_dependabot_version_updates %} don't use the dependency graph and rely on the semantic versioning of dependencies instead. {% data variables.product.prodname_dependabot_version_updates %} help you keep your dependencies updated, even when they don’t have any vulnerabilities. |
| 50 | +{% endif %} |
| 51 | +{% endif %} |
| 52 | + |
| 53 | +{% ifversion ghes < 3.2 %} |
| 54 | +{% data variables.product.prodname_dependabot %} cross-references dependency data provided by the dependency graph with the list of known vulnerabilities published in the {% data variables.product.prodname_advisory_database %}, scans your dependencies and generates {% data variables.product.prodname_dependabot_alerts %} when a potential vulnerability is detected. |
| 55 | + {% endif %} |
| 56 | + |
| 57 | +## Feature overview |
| 58 | + |
| 59 | +### What is the dependency graph |
| 60 | + |
| 61 | +To generate the dependency graph, {% data variables.product.company_short %} looks at a repository’s explicit dependencies declared in the manifest and lockfiles. When enabled, the dependency graph automatically parses all known package manifest files in the repository, and uses this to construct a graph with known dependency names and versions. |
| 62 | + |
| 63 | +- The dependency graph includes information on your _direct_ dependencies and _transitive_ dependencies. |
| 64 | +- The dependency graph is automatically updated when you push a commit to {% data variables.product.company_short %} that changes or adds a supported manifest or lock file to the default branch, and when anyone pushes a change to the repository of one of your dependencies. |
| 65 | +- You can see the dependency graph by opening the repository's main page on {% data variables.product.product_name %}, and navigating to the **Insights** tab. |
| 66 | + |
| 67 | +For more information about the dependency graph, see "[About the dependency graph](/code-security/supply-chain-security/understanding-your-software-supply-chain/about-the-dependency-graph)." |
| 68 | + |
| 69 | +{% ifversion fpt or ghec or ghes > 3.1 or ghae %} |
| 70 | +### What is dependency review |
| 71 | + |
| 72 | +Dependency review helps reviewers and contributors understand dependency changes and their security impact in every pull request. |
| 73 | + |
| 74 | +- Dependency review tells you which dependencies were added, removed, or updated, in a pull request. You can use the release dates, popularity of dependencies, and vulnerability information to help you decide whether to accept the change. |
| 75 | +- You can see the dependency review for a pull request by showing the rich diff on the **Files Changed** tab. |
| 76 | + |
| 77 | +For more information about dependency review, see "[About dependency review](/code-security/supply-chain-security/understanding-your-software-supply-chain/about-dependency-review)." |
| 78 | + |
| 79 | +{% endif %} |
| 80 | + |
| 81 | +### What is Dependabot |
| 82 | + |
| 83 | +{% data variables.product.prodname_dependabot %} keeps your dependencies up to date by informing you of any security vulnerabilities in your dependencies{% ifversion fpt or ghec or ghes > 3.2 or ghae %}, and automatically opens pull requests to upgrade your dependencies to the next available secure version when a {% data variables.product.prodname_dependabot %} alert is triggered, or to the latest version when a release is published{% else %} so that you can update that dependency{% endif %}. |
| 84 | + |
| 85 | +{% ifversion fpt or ghec or ghes > 3.2 %} |
| 86 | +The term "{% data variables.product.prodname_dependabot %}" encompasses the following features: |
| 87 | +- {% data variables.product.prodname_dependabot_alerts %}—Displayed notification on the **Security** tab for the repository, and in the repository's dependency graph. The alert includes a link to the affected file in the project, and information about a fixed version. |
| 88 | +- {% data variables.product.prodname_dependabot_updates %}: |
| 89 | + - {% data variables.product.prodname_dependabot_security_updates %}—Triggered updates to upgrade your dependencies to a secure version when an alert is triggered. |
| 90 | + - {% data variables.product.prodname_dependabot_version_updates %}—Scheduled updates to keep your dependencies up to date with the latest version. |
| 91 | +{% endif %} |
| 92 | + |
| 93 | +#### What are Dependabot alerts |
| 94 | + |
| 95 | +{% data variables.product.prodname_dependabot_alerts %} highlight repositories affected by a newly discovered vulnerability based on the dependency graph and the {% data variables.product.prodname_advisory_database %}, which contains the versions on known vulnerability lists. |
| 96 | + |
| 97 | +- {% data variables.product.prodname_dependabot %} performs a scan to detect vulnerable dependencies and sends {% data variables.product.prodname_dependabot_alerts %} when: |
| 98 | +{% ifversion fpt or ghec %} |
| 99 | + - A new vulnerability is added to the {% data variables.product.prodname_advisory_database %}.{% else %} |
| 100 | + - New advisory data is synchronized to {% data variables.product.product_location %} each hour from {% data variables.product.prodname_dotcom_the_website %}. {% data reusables.security-advisory.link-browsing-advisory-db %}{% endif %} |
| 101 | + - The dependency graph for the repository changes. |
| 102 | +- {% data variables.product.prodname_dependabot_alerts %} are displayed {% ifversion fpt or ghec or ghes > 3.0 %} on the **Security** tab for the repository and{% endif %} in the repository's dependency graph. The alert includes {% ifversion fpt or ghec or ghes > 3.0 %}a link to the affected file in the project, and {% endif %}information about a fixed version. |
| 103 | + |
| 104 | +For more information about {% data variables.product.prodname_dependabot_alerts %}, see "[About alerts for vulnerable dependencies](/code-security/supply-chain-security/managing-vulnerabilities-in-your-projects-dependencies/about-alerts-for-vulnerable-dependencies)." |
| 105 | + |
| 106 | +{% ifversion fpt or ghec or ghes > 3.2 %} |
| 107 | +#### What are Dependabot updates |
| 108 | + |
| 109 | +There are two types of {% data variables.product.prodname_dependabot_updates %}: {% data variables.product.prodname_dependabot %} _security_ updates and _version_ updates. {% data variables.product.prodname_dependabot %} generates automatic pull requests to update your dependencies in both cases, but there are several differences. |
| 110 | + |
| 111 | +{% data variables.product.prodname_dependabot_security_updates %}: |
| 112 | + - Triggered by a {% data variables.product.prodname_dependabot %} alert |
| 113 | + - Update dependencies to the minimum version that resolves a known vulnerability |
| 114 | + - Supported for ecosystems the dependency graph supports |
| 115 | + |
| 116 | +{% data variables.product.prodname_dependabot_version_updates %}: |
| 117 | + - Run on a schedule you configure |
| 118 | + - Update dependencies to the latest version that matches the configuration |
| 119 | + - Supported for a different group of ecosystems |
| 120 | + |
| 121 | +For more information about {% data variables.product.prodname_dependabot_updates %}, see "[About {% data variables.product.prodname_dependabot_security_updates %}](/code-security/supply-chain-security/managing-vulnerabilities-in-your-projects-dependencies/about-dependabot-security-updates)" and "[About {% data variables.product.prodname_dependabot_version_updates %}](/code-security/supply-chain-security/keeping-your-dependencies-updated-automatically/about-dependabot-version-updates)." |
| 122 | +{% endif %} |
| 123 | + |
| 124 | +## Feature availability |
| 125 | + |
| 126 | +{% ifversion fpt or ghec %} |
| 127 | + |
| 128 | +Public repositories: |
| 129 | +- **Dependency graph**—enabled by default and cannot be disabled. |
| 130 | +- **Dependency review**—enabled by default and cannot be disabled. |
| 131 | +- **{% data variables.product.prodname_dependabot_alerts %}**—not enabled by default. {% data variables.product.prodname_dotcom %} detects vulnerable dependencies and displays information in the dependency graph, but does not generate {% data variables.product.prodname_dependabot_alerts %} by default. Repository owners or people with admin access can enable {% data variables.product.prodname_dependabot_alerts %}. |
| 132 | + You can also enable or disable Dependabot alerts for all repositories owned by your user account or organization. For more information, see "[Managing security and analysis settings for your user account](/account-and-profile/setting-up-and-managing-your-github-user-account/managing-user-account-settings/managing-security-and-analysis-settings-for-your-user-account)" or "[Managing security and analysis settings for your organization](/organizations/keeping-your-organization-secure/managing-security-settings-for-your-organization/managing-security-and-analysis-settings-for-your-organization)." |
| 133 | + |
| 134 | +Private repositories: |
| 135 | +- **Dependency graph**—not enabled by default. The feature can be enabled by repository administrators. For more information, see "[Exploring the dependencies of a repository](/code-security/supply-chain-security/understanding-your-software-supply-chain/exploring-the-dependencies-of-a-repository#enabling-and-disabling-the-dependency-graph-for-a-private-repository)." |
| 136 | +{% ifversion fpt %} |
| 137 | +- **Dependency review**—available in private repositories owned by organizations that use {% data variables.product.prodname_ghe_cloud %} and have a license for {% data variables.product.prodname_GH_advanced_security %}. For more information, see the [{% data variables.product.prodname_ghe_cloud %} documentation](/enterprise-cloud@latest/code-security/supply-chain-security/understanding-your-software-supply-chain/about-dependency-review). |
| 138 | +{% elsif ghec %} |
| 139 | +- **Dependency review**—available in private repositories owned by organizations provided you have a license for {% data variables.product.prodname_GH_advanced_security %} and the dependency graph enabled. For more information, see "[About {% data variables.product.prodname_GH_advanced_security %}](/get-started/learning-about-github/about-github-advanced-security)" and "[Exploring the dependencies of a repository](/code-security/supply-chain-security/understanding-your-software-supply-chain/exploring-the-dependencies-of-a-repository#enabling-and-disabling-the-dependency-graph-for-a-private-repository)." |
| 140 | +{% endif %} |
| 141 | +- **{% data variables.product.prodname_dependabot_alerts %}**—not enabled by default. Owners of private repositories, or people with admin access, can enable {% data variables.product.prodname_dependabot_alerts %} by enabling the dependency graph and {% data variables.product.prodname_dependabot_alerts %} for their repositories. |
| 142 | + You can also enable or disable Dependabot alerts for all repositories owned by your user account or organization. For more information, see "[Managing security and analysis settings for your user account](/account-and-profile/setting-up-and-managing-your-github-user-account/managing-user-account-settings/managing-security-and-analysis-settings-for-your-user-account)" or "[Managing security and analysis settings for your organization](/organizations/keeping-your-organization-secure/managing-security-settings-for-your-organization/managing-security-and-analysis-settings-for-your-organization)." |
| 143 | + |
| 144 | +Any repository type: |
| 145 | +- **{% data variables.product.prodname_dependabot_security_updates %}**—not enabled by default. You can enable {% data variables.product.prodname_dependabot_security_updates %} for any repository that uses {% data variables.product.prodname_dependabot_alerts %} and the dependency graph. For more information, see "[About {% data variables.product.prodname_dependabot_security_updates %}](/github/managing-security-vulnerabilities/about-dependabot-security-updates)." |
| 146 | +- **{% data variables.product.prodname_dependabot_version_updates %}**—not enabled by default. People with write permissions to a repository can enable {% data variables.product.prodname_dependabot_version_updates %}. For information about enabling security updates, see "[Configuring {% data variables.product.prodname_dependabot_security_updates %}](/github/managing-security-vulnerabilities/configuring-dependabot-security-updates)." |
| 147 | +{% endif %} |
| 148 | + |
| 149 | +{% ifversion ghes or ghae %} |
| 150 | +- **Dependency graph** and **{% data variables.product.prodname_dependabot_alerts %}**—not enabled by default. Both features are configured at an enterprise level by the enterprise owner. For more information, see {% ifversion ghes %}"[Enabling the dependency graph for your enterprise](/admin/code-security/managing-supply-chain-security-for-your-enterprise/enabling-the-dependency-graph-for-your-enterprise)" and {% endif %}"[Enabling {% data variables.product.prodname_dependabot %} for your enterprise](/admin/configuration/configuring-github-connect/enabling-dependabot-for-your-enterprise)." |
| 151 | +- **Dependency review**—available when dependency graph is enabled for {% data variables.product.product_location %} and {% data variables.product.prodname_advanced_security %} is enabled for the organization or repository. For more information, see "[About {% data variables.product.prodname_GH_advanced_security %}](/get-started/learning-about-github/about-github-advanced-security)." |
| 152 | +{% endif %} |
| 153 | +{% ifversion ghes > 3.2 %} |
| 154 | +- **{% data variables.product.prodname_dependabot_security_updates %}**—not enabled by default. You can enable {% data variables.product.prodname_dependabot_security_updates %} for any repository that uses {% data variables.product.prodname_dependabot_alerts %} and the dependency graph. For more information, see "[About {% data variables.product.prodname_dependabot_security_updates %}](/github/managing-security-vulnerabilities/about-dependabot-security-updates)." |
| 155 | +- **{% data variables.product.prodname_dependabot_version_updates %}**—not enabled by default. People with write permissions to a repository can enable {% data variables.product.prodname_dependabot_version_updates %}. For information about enabling security updates, see "[Configuring {% data variables.product.prodname_dependabot_security_updates %}](/github/managing-security-vulnerabilities/configuring-dependabot-security-updates)." |
| 156 | +{% endif %} |
0 commit comments