The Package Firewall is Endor Labs’ SaaS solution that offers real-time protection against malicious packages during software installations. It safeguards your software supply chain by preventing malicious packages from reaching your developers. Positioned between package managers and public package registries, it automatically blocks the installation of packages containing malware while allowing safe packages to install normally. Security teams often discover malware only after it enters your environment, forcing reactive cleanup. The Package Firewall closes that gap by intercepting every package installation request before it completes. Integrate Artifactory with the Package Firewall so Artifactory uses Endor Labs as the remote for public registry traffic. The Package Firewall blocks any malicious package instantly and returns an error, so it never reaches your environment. Legitimate packages pass through unchanged, keeping your developers productive and your pipeline secure. You can configure a Package Firewall policy to customize which packages the firewall flags and how it responds. The firewall can flag packages based on malware, restricted licenses, or minimum age threshold violations. For each criteria, you can choose between two responses:Documentation Index
Fetch the complete documentation index at: https://docs.endorlabs.com/llms.txt
Use this file to discover all available pages before exploring further.
- Warn: Records the event and allows the package installation without interrupting your CI pipeline.
- Block: Prevents the package installation entirely and returns an error.
How it works
The Package Firewall inspects package requests before serving them. When a developer or CI pipeline requests a package to download, the request goes to your private registry, such as JFrog Artifactory. Configure Artifactory to use the Package Firewall URL as its remote source instead of upstream package registries. This setup ensures that the firewall inspects every package request before downloading the package. The following steps describe how Package Firewall intercepts each package installation request and its response.- Route traffic through the Package Firewall: Artifactory forwards each request to the Package Firewall so that the firewall evaluates every package before serving it to the developer or pipeline.
- Authenticate and control access: Requests to the Package Firewall require an Endor Labs API key with the appropriate role and license.
- Evaluate each package request: For each package request, the Package Firewall parses the ecosystem, package name, and version, and checks it against the Endor Labs’ malware database. If a Package Firewall policy is configured, the firewall also evaluates restricted licenses, minimum package age, and exceptions before deciding on the action.
-
Firewall decision: Based on the malware check and policy conditions, the Package Firewall either blocks package installations or allows it with a warning log. If no criteria matches, the package is allowed and no log is recorded.
- The Package Firewall blocks the request and Artifactory returns HTTP 404 if the package is found in Endor Labs’ malware database, or if a policy condition matches with Block. The Package Firewall records an event with the package, version, and reason.
- The Package Firewall allows the installation and redirects the client with HTTP 307 if a policy condition matches with Warn. The Package Firewall records a warning event with the package, version, and reason.
- The Package Firewall allows the installation and redirects the client with HTTP 307 if no malware is detected. The client then downloads the package directly from the public registry through this redirect.
- View Package Firewall logs: Package Firewall logs the actions the firewall takes on package installation requests, which is helpful for debugging and compliance. The logs include details such as the package, version, time of the event, and the reason the package was blocked or allowed with a warning. If no criteria matches, the package is allowed and no log is recorded.
Prerequisites
- You must have the Package Firewall license.
- JFrog Artifactory with permission to create remote repositories and configure credentials.
- Download and install endorctl. See Install and configure endorctl for more information.
Configure the Package Firewall
Complete the following steps to integrate JFrog Artifactory with the Endor Labs Package Firewall:- Create an API key for the Package Firewall.
- Configure JFrog Artifactory.
- Verify that the Package Firewall is blocking malware.
- Query Package Firewall logs.
Create an API key for the Package Firewall
You must create an API key with theSYSTEM_ROLE_PACKAGE_FIREWALL role. JFrog Artifactory uses this key to authenticate to the Package Firewall. Run the following command and replace:
<namespace>with your namespace.<API key name>with the name of the API key for the Package Firewall use case.<YYYY-MM-DDTHH:MM:SSZ>with the API key expiration in ISO 8601 UTC format, for example2026-12-31T23:59:59Z.
- Username:
spec.key - Password:
spec.secret
Configure JFrog Artifactory
Configure a remote repository in JFrog Artifactory so package traffic goes through the Package Firewall. Use the steps below for either npm or PyPI.Configure JFrog Artifactory for an npm remote repository
Configure JFrog Artifactory for an npm remote repository
- Log in to JFrog Artifactory.
- Select Administration > Repositories from the left sidebar.
- Click Create a Repository and select Remote.
-
Select npm as the package type.

-
Enter a Repository Key, for example
endor-firewall-npm. -
Enter the repository URL:
https://factory.endorlabs.com/v1/namespaces/<namespace>/firewall/npm/. Replace<namespace>with your Endor Labs namespace. - Enter the User Name and Password you saved when creating the API key.
-
Click Create Remote Repository.

Configure JFrog Artifactory for a PyPI remote repository
Configure JFrog Artifactory for a PyPI remote repository
- Log in to JFrog Artifactory.
- Select Administration > Repositories from the left sidebar.
- Click Create a Repository and select Remote.
-
Select PyPI as the package type.

-
Enter a Repository Key, for example
endor-firewall-pypi. -
Enter the repository URL:
https://factory.endorlabs.com/v1/namespaces/<namespace>/firewall/pypi/. Replace<namespace>with your Endor Labs namespace. - Enter the User Name and Password you saved when creating the API key.
- In PyPI Settings, set Registry URL to the same URL you entered in step 6.
-
Click Create Remote Repository.

Local setup for developers
Update your package manager to use Artifactory as its source, routing all installs through the Package Firewall instead of the public registry. Once you create the Artifactory remote:- Navigate to Administration > Repositories.
- Click the three vertical dots next to the repository you configured and select Set Me Up.
- Enter Your JFrog account password if prompted.
- Click Generate Token & Create Instructions.
-
Follow the instructions to configure your local machine,
.npmrcorpip.conf, based on your package type. Refer to JFrog Artifactory documentation for more information. -
Run the following command to verify that your local registry is pointing to the Artifactory remote. Ensure the output matches the Artifactory remote URL you configured.
- For npm packages, run
npm config get registry. - For PyPI packages, run
pip3 config list | grep index-url.

- For npm packages, run
Verify that the Package Firewall is blocking malware
After configuring.npmrc or pip.conf, try installing a package that Endor Labs has classified as malware. The Package Firewall blocks the installation and Artifactory returns a 404.
The following are examples of packages classified as malware in the Endor Labs.
npm
npm
E404 error code and 404 Not Found response confirm that the firewall blocked the package.pip
pip
E404 error code and 404 Not Found response confirm that the firewall blocked the package.View Package Firewall logs
To view Package Firewall logs in the Endor Labs user interface:- Select Findings from the left sidebar.
- Select Package Firewall.
-
Select an event to view the following details:
- Info: Package name, package version, API key, remote address, request URL, action taken, the reason the event was flagged, and when the event occurred.
- Risk Details: Explanation of why the package was flagged and remediation guidance.
- Metadata: Ecosystem, package release date, advisory published date, CWE ID, and OSV ID when available.
- Malware Info: Malware detection record in raw JSON format.
Filter Package Firewall logs
Use filters to narrow Package Firewall logs by ecosystem, action, rule reason, or time.- Select Findings from the left sidebar.
- Select Package Firewall.
- Toggle the filter panel to show the filters.
-
Set any of the following filters to narrow the log list.
- Ecosystem - Filter logs by their package ecosystem.
- Action: Filter logs by the action taken on the package installation, either Warning or Blocked.
- Reason: Filter logs by why the package was flagged, which can be Malware detected, Minimum package age not met, or Restricted license.
- All Time - Filter logs by when the event was recorded. You can select All Time, Last Day, Last Week, Last Month, Last 60 Days, Last 90 Days, or a custom range.
endorctl. See Query Package Firewall logs using endorctl.
Query Package Firewall logs using endorctl
The Package Firewall logs record every action the firewall takes on package installation requests. You can view them by querying theendorctl API.
-
To list all Package Firewall logs in your namespace, run the following command. Replace
<namespace>with your namespace. -
To list logs only for a specific ecosystem, add a filter.
Replace:
<ecosystem_variable>withECOSYSTEM_NPMfor npm andECOSYSTEM_PYPIfor PyPI.<namespace>with your namespace.
-
To list logs for a specific package in an ecosystem, use a filter with
spec.ecosystem,spec.package_name, andspec.package_version.Replace:<namespace>with your namespace.<ecosystem_variable>withECOSYSTEM_NPMfor npm andECOSYSTEM_PYPIfor PyPI.<package_name>with the package name you want to query.<package_version>with the package version you want to query.
SYSTEM_ROLE_PACKAGE_FIREWALL to route traffic through the Package Firewall. It does not grant access to the Package Firewall Log API.To query logs, create an API key with at least the Read-only role. For more information about roles and permissions, see Authorization roles.Troubleshooting and FAQ
Does the Package Firewall block installation of all versions of a malicious package?
Does the Package Firewall block installation of all versions of a malicious package?
How does the Package Firewall handle transitive dependencies?
How does the Package Firewall handle transitive dependencies?
Does the Package Firewall slow down package installations?
Does the Package Firewall slow down package installations?
What if Artifactory has already cached a package that is declared malicious later?
What if Artifactory has already cached a package that is declared malicious later?
How do I troubleshoot connection issues?
How do I troubleshoot connection issues?
- Verify that the Package Firewall URL in Artifactory is correct.
- Ensure network connectivity from Artifactory to the Package Firewall.
- Ensure the firewall rules allow outbound connections from Artifactory.
How do I troubleshoot authentication issues?
How do I troubleshoot authentication issues?
- Verify the API key and secret are correct and that the key has the SYSTEM_ROLE_PACKAGE_FIREWALL role.
- Ensure that the credentials are in the format Artifactory expects.
- Check the Artifactory logs for authentication errors.
How do I troubleshoot cache issues?
How do I troubleshoot cache issues?
- Verify that Artifactory has sufficient storage for the cache.
- Set cache expiration to short durations so that more requests hit the Package Firewall.
- Check the cache hit and miss rates. Clear the cache if you need to test with a fresh request.
What happens with package version ranges like `npm install express@^4.0.0`?
What happens with package version ranges like `npm install express@^4.0.0`?