- 28 Jun 2022
- 6 Minutes to read
Vulnerability Scanning and Blocking
- Updated on 28 Jun 2022
- 6 Minutes to read
ProGet can automatically scan the third-party, open-source packages and container images that you're using for vulnerabilities, and allow you to assess the risk that they may pose.
This enables you to:
- Block packages or container images that you deem too risky to use
- Warn users of vulnerabilities that they should be careful with
- Identify which of your Projects and Releases are impacted by vulnerabilities
- Alert you when new vulnerabilities are discovered
This article will explain how vulnerability scanning works,
For a walkthrough on how to configure vulnerability scanning in just a few minutes, see HOWTO: Scan & Block Packages with OSS Index.
What are Vulnerability Sources?
ProGet works with leading vulnerability data providers that aggregate vulnerability records from databases like the National Vulnerability Database.. These data providers are called "vulnerability sources", and after configuring them to scan your feeds, ProGet will routinely download vulnerability records that relate to your packages and container images.
To configure vulnerability sources, navigate to Reporting & SCA > Vulnerabilities:
There are currently two vulnerability sources in ProGet:
- OSS Index is free software service that catalogs open source packages and identifies vulnerabilities
- Clair is a free, self-managed tool that scans for vulnerabilities in your container images.
We may add additional vulnerability sources later from other vendors. Some users have created their own vulnerability sources using the Inedo SDK.
Note that Clair requires extra setup, the details for which can be found in the configuring clair in ProGet section. If you don't see OSS Index as a vulnerability source or WhiteSource as a package access rule, check Admin > Extensions to make sure those extensions are installed
Routine Vulnerability Scanning
Vulnerability sources download vulnerabilities on a routine basis by using the
VulnerabilityDownloader scheduled job. By default, this will run on a nightly basis, but you can configure it to run at different times.
You can also manually run the job by navigating to Administration -> Scheduled Jobs page. Then click the green play button to the right of the
Feeds & Download Blocking
After setting-up a vulnerability source in ProGet, you can select which feeds you'd like to configure for vulnerability scanning and blocking by navigating to Reporting & SCA > Vulnerabilities:
When a feed is scanned by a vulnerability source, ProGet will display vulnerability information on packages and may be configured to block downloads.
Both the manual and OSS Index workflows use vulnerability reports, which essentially identify that a particular package or versioned range of packages has a known vulnerability. This record is either manually entered or is imported from OSS Index, based on packages in a particular feed.
For container reports, Clair attempts to determining which operating system (OS) a container image was built with and then uses that OS to scan specific security databases to check for vulnerabilities. These vulnerabilities are then automatically associated with the container's affected layer within the registry Clair was configured to scan. Manual vulnerability records can also be added to affected container layers by specifying that layer's digest.
All newly entered or imported vulnerability reports are considered unassessed, which means that packages matching the vulnerability will be blocked until the report is assessed. An assessment involves an authorized user reviewing the report, choosing an assessment type (Ignore, Caution, Block), and leaving an optional comment.
An "assessment" you make on a package or container image vulnerability may be configured to expire. This means that, unless it's reassessed, the vulnerability report will be considered "unassessed" after expiry.
There are two primary use-cases for expiration.
- If you permit packages or container images with unassessed vulnerabilities to be downloaded, this means that you can use an expiring assessment to temporary block a package.
- If you block unassessed vulnerabilities, then you can use an expiring assessment to temporary un-block a package.
The reason to temporarily block or unblock packages is due to the nature of security vulnerabilities. Just because a particular package or container image has a security vulnerability, it doesn't mean your application will utilize the vulnerable aspects. In fact, constantly jumping to newer versions just to avoid reported vulnerabilities is often less secure - the newer versions have unknown vulnerabilities, which you might be using.
By temporary unblocking packages and container images, you can periodically review how engineers are using them. The usage may have changed.
Blocking a Package Download
Blocked will prevent any packages within the version range or container images that include the vulnerable layer to be downloaded. From the
Vulnerabilities page or the
Vulnerabilities tab on the package or container image page, selecting the vulnerability, then
Assess, and choose
Blocked, optionally adding a comment.
Browsing to a package version within the range specified or a container image with an associated layer in the blocked vulnerability will display
Blocked where the download button would normally be, and the package or container image will be not be downloadable from its associated feed API.
Note: while the package version or container image is blocked from download, it may still appear in search or list results.
ProGet comes with three built-in assessment types:
- Ignore indicates that the vulnerability report is not applicable or irrelevant and therefore allows for packages to be downloaded
- Caution tells developers to be careful to avoid the vulnerability; packages may be downloaded, but a warning is issued on the web UI
- Blocked means a vulnerability is too severe to allow use, and packages are prevented from being downloaded
You can edit or create your own assessment type by going to
Admin > Assessment Types, and specifying a name, expiration (days), color, whether or not packages would be blocked, and an auto-assessment range.
Automatically Assess Vulnerabilities
ProGet can automatically assess new vulnerabilities based on a vulnerability's CVE Score. You can configure this by simply creating or editing the auto-assessment range on an assessment type.
Note that auto-assessment only applies to new vulnerabilities; if an assessment expires, it will not be automatically re-assessed.
Manual Vulnerability Records
You can also add a manual vulnerability record on a specific package version (or version ranges), or on a container image layer. One reason you may wish to do this is if you discover a vulnerability that isn't yet publicly disclosed.
To add manual records, navigate to the
Vulnerabilities tab on the package or container image page then click the
Add Vulnerability button to specify the feed, the package ID and version(s) or the container image layer digest, and the details of the vulnerability.
Manual vulnerability records may encompass multiple package versions using version range syntax, for example:
|3.0.0||version = 3.0.0|
|[3.0]||version = 3.0|
|<=2.0||version <= 2.0|
|[1.3,1.4]||1.3 <= version <= 1.4|
|>=1.3 <=1.4||1.3 <= version <= 1.4|
|>2.5||version > 2.5|
|<=1.0,>=1.2||version <= 1.0 or version >= 1.2|
|<1.1 >1.1||Exclude version 1.1|
Note: versions must be specified out to their full value to match. For example, 2.0 will not match 2.0.0
Due to the inconsistency on container repository tags, container registries are not compatible with version ranges.
ProGet 6.0 and Earlier
Projects and Releases, as well as vulnerability notifications are only available in ProGet 2022 and later.
The ability to Automatically Assess Vulnerabilities is only available in ProGet 6.0 and later.
In ProGet 6.0 and earlier, vulnerability sources were configured on the main Vulnerabilities, and then on each feeds Detection and Blocking tab.