Curation Compliance Check
JFrog Curation defends your software supply chain by enabling early detection and blocking of malicious or risky open-source packages before they enter your environment. It helps identify harmful, vulnerable, or non-compliant packages seamlessly, enhancing security, compliance, and developer productivity.
The curation-audit command checks the project to identify third-party dependencies that violate Curation service restrictions. It provides detailed insights into policy violations and may suggest compliant package alternatives.
Learn more about Curation Supported Technologies here.
Command: curation-audit, ca
Configuration
-
Pass-Through Curation: Required for package types except npm. Configure on remote repositories in Artifactory.
-
Connect JFrog CLI to Platform:
jf c addUse an access token from Artifactory when prompted. Verify the connection:
jf c show -
Project Configuration:
- Config command: Sets up
jf cafor that package manager. - Set Me Up: The package manager's native configuration produced by Artifactory Set Me Up.
The following table describes how to configure each package manager for
jf ca.Package Manager Config Command Configuration Mode Pass-Through Required Notes npm jf npmcConfig command or Set Me Up No The --run-nativeflag helps you use native configuration.yarn No config command Set Me Up Yes Yarn V2, V3, and V4 are supported. V1 is not supported. pnpm No config command Set Me Up No pnpm v10.x only. pip jf pipcConfig command or Set Me Up Yes Maven jf mvncConfig command only Yes Go jf gocConfig command only Yes NuGet jf nugetcConfig command or Set Me Up Yes The --solution-pathflag provides a path to the .NET solution file (.slnor.slnx) when multiple solution files are present in the directory.Gradle jf gradlecConfig command only Yes Audits .jaronly, not.pomor Gradle Module Metadata.poetry No config command Set Me Up Yes Poetry v1.2.0 or higher is supported. RubyGems jf ruby-configConfig command or Set Me Up Yes Ruby 2.6.0 or higher is supported. Docker No config command. Run jf ca --image=<image>Set Me Up No Audits a Docker image against Curation policies. Does not analyze Dockerfiles or extract packages from image layers. Supported from JFrog CLI 2.89.0. pipenv No config command Set Me Up Yes pipenv v2023.7.4 or higher. Hugging Face No config command Set Me Up No The --hugging-face-modelflag audits Hugging Face models in<repo-id>[:revision]format. Multiple models can be comma-separated.Cargo No config command Set Me Up No uv No config command Set Me Up Yes uv v0.6.17 or higher is supported. - Config command: Sets up
Commands Parameters
| Parameter | Optional/Required | Description |
|---|---|---|
--format | Optional | Defines the output format. Acceptable values: table (default) and json. |
--working-dirs | Optional | A comma-separated list of directories to audit. |
--insecure-tls | Default: false | Set to true to skip TLS certificates verification. |
--threads | Optional | Number of parallel threads for checking package status. Default: 3. |
--requirements-file | Optional | [Pip] Specifies the requirements file (e.g., requirements.txt). |
--solution-path | Optional | Specifies the path to the .NET solution (.sln) file to use when the directory contains multiple solution files. |
--image | Optional | Specifies the Docker image name to audit, using the same format as the Docker CLI. |
--include-cached-packages | Default: false | [On-demand curation] Set to true to also audit cached packages. Required for Curation on-demand workflows, which rely on package caching. |
--run-native | Default: false | [npm] Use the native npm client for dependency resolution instead of jf npmc. Reads the Artifactory URL and repository from the project's .npmrc. |
--legacy-peer-deps | Default: false | [npm] Pass --legacy-peer-deps to npm install to bypass peer-dependency version conflicts. |
--use-wrapper | Default: true | [Gradle, Maven] Use the Gradle or Maven wrapper. |
--use-included-builds | Default: false | [Gradle] Set to true to also take into account included builds (composite builds), in addition to subprojects. |
--mvn-include-plugin-deps | Default: false | [Maven] Set to true to also resolve and include build-plugin transitive dependencies in the curation evaluation. By default only project dependencies are scanned. |
Examples
Audit the current directory:
jf curation-audit
Audit specific directories:
jf curation-audit --working-dirs="/path/to/project/npm_project1,/path/to/project/npm_project2"
Audit with multiple threads:
jf curation-audit --threads=5
Exclude specific packages or versions from policy restrictions using waivers:
- Execute the
jf-curation-auditcommand:
jf curation-audit
Found 4 blocked packages for project sample-node-project:1.0.0
Curation
┌────┬──────────────┬────────────┬──────────────┬─────────┬─────────┬──────────────┬──────────────┬──────────────┬──────────────┐
│ ID │ DIRECT │ DIRECT │ BLOCKED │ BLOCKED │ PACKAGE │ VIOLATED │ VIOLATED CON │ EXPLANATION │ RECOMMENDATI │
│ │ DEPENDENCY │ DEPENDENCY │ PACKAGE │ PACKAGE │ TYPE │ POLICY │ DITION │ │ ON │
│ │ PACKAGE │ PACKAGE │ NAME │ VERSION │ │ NAME │ NAME │ │ │
│ │ NAME │ VERSION │ │ │ │ │ │ │ │
├────┼──────────────┼────────────┼──────────────┼─────────┼─────────┼──────────────┼──────────────┼──────────────┼──────────────┤
│ 1 │ ansi-regex │ 3.0.0 │ ansi-regex │ 3.0.0 │ npm │ High CVE │ CVE with CVS │ Package vers │ Upgrade to t │
│ │ │ │ │ │ │ │ S score betw │ ion contains │ he following │
│ │ │ │ │ │ │ │ een 7.0 and │ the followin │ version(s): │
│ │ │ │ │ │ │ │ 8.9 (with or │ g vulnerabil │ CVE-2021-380 │
│ │ │ │ │ │ │ │ without a fi │ ity(s): │ 7: 6.0.1; 5. │
│ │ │ │ │ │ │ │ x version av │ CVE-2021-380 │ 0.1; 4.1.1; │
│ │ │ │ │ │ │ │ ailable) │ 7: 7.5 │ 3.0.1 │
└────┴──────────────┴────────────┴──────────────┴─────────┴─────────┴──────────────┴──────────────┴──────────────┴──────────────┘
- Enter
yas an answer to whether or not you want a waiver:
Do you want to request a waiver for any of the listed packages? (y/n) [n]? y
- Enter table row numbers representing packages you want to exclude from policy restrictions:
Please enter the row number(s) for which you want to request a waiver (comma-separated for multiple, range, or “all”) [all]: all
- Enter the reason for requesting a waiver:
Please enter the reason for the waiver request: Required packagesUpdated 5 days ago
