dpndncY

Scan policies

A scan policy is the rulebook every scan of a tenant is judged against. It turns the findings of a scan into one verdict, pass or fail, with the reasons. That verdict is what a pipeline's exit code, a pull request check and the console's pass/fail badge show.

Each tenant has one active policy. Choose it under Settings, Scan policy. It applies to every scan that tenant starts afterwards: from the console, from the CLI, from a pipeline, and scheduled rescans.

#What a policy checks

A scan fails when any of these is exceeded:

Rule Fails when
Critical, high, medium vulnerabilities the count is above the limit. A limit of 0 means none allowed; any means that severity is not limited
Highest severity score (CVSS) any vulnerability scores above the limit
Overall risk score the combined risk score of the scan (0 to 100) is above the limit
Critical and high with a known exploit the count is above the limit
Known exploited (CISA KEV) any finding is on the KEV list, when this rule is on
Unfixed vulnerabilities a finding of a chosen severity has no fixed version yet, when this rule is on
Strong copyleft licences a package uses one (GPL and similar), when they are not allowed
Unknown licences a package's licence could not be identified, when they are not allowed
Maintenance a package looks abandoned or poorly maintained beyond the policy's tolerance

The Scan policy page shows these as plain numbers for every profile, and, when you select another profile, exactly which rows would change and whether each becomes stricter or looser.

#Built-in profiles

There are 35 built-in profiles. The names that refer to a framework or regulation mean the limits follow the intent of that framework's vulnerability-management expectations. They help you meet a standard; they do not certify anything.

#General (8)

Profile Critical High Medium Max CVSS Notes
Standard - Balanced Security (standard) 0 5 20 9 fails on known-exploited; fails on unfixed critical/high; no strong copyleft
Enterprise - Corporate Standard (enterprise) 0 3 15 8 fails on known-exploited; fails on unfixed critical/high; no strong copyleft
Startup - Fast Development (startup) 2 10 50 9 fails on known-exploited; fails on unfixed critical
Open Source Project (opensource) 1 8 30 9 fails on known-exploited; fails on unfixed critical
SaaS - Cloud Service (saas) 0 3 12 8 fails on known-exploited; fails on unfixed critical/high; no strong copyleft
Development & Testing (development) 5 20 any 10
Strict - Maximum Security (strict) 0 0 0 6.5 fails on known-exploited; fails on unfixed critical/high/medium; no strong copyleft; no unknown licences
Permissive - Minimal Security (permissive) 3 15 any 10 fails on known-exploited; fails on unfixed critical

#Compliance (7)

Profile Critical High Medium Max CVSS Notes
SOC 2 - Vulnerability Management (soc2) 0 2 12 8 fails on known-exploited; fails on unfixed critical/high; no strong copyleft
ISO/IEC 27001 - Technical Vulnerabilities (iso27001) 0 3 15 8 fails on known-exploited; fails on unfixed critical/high; no strong copyleft
NIST SSDF - Secure Software Development (nist-ssdf) 0 2 10 8.5 fails on known-exploited; fails on unfixed critical/high; no strong copyleft
EU NIS2 and Cyber Resilience Act (nis2-cra) 0 0 8 7.5 fails on known-exploited; fails on unfixed critical/high; no strong copyleft
EU DORA - ICT Risk for Financial Entities (dora) 0 0 4 7.5 fails on known-exploited; fails on unfixed critical/high/medium; no strong copyleft; no unknown licences
Medical Devices - FDA and IEC 62304 (medical-device) 0 0 2 7 fails on known-exploited; fails on unfixed critical/high/medium; no strong copyleft; no unknown licences
Aerospace - DO-326A and DO-356A (aerospace) 0 0 2 7 fails on known-exploited; fails on unfixed critical/high/medium; no strong copyleft; no unknown licences

#Industry (11)

Profile Critical High Medium Max CVSS Notes
Automotive - ISO 26262 (automotive) 0 0 3 7 fails on known-exploited; fails on unfixed critical/high/medium; no strong copyleft; no unknown licences
Financial Services - PCI-DSS (financial) 0 0 5 7.5 fails on known-exploited; fails on unfixed critical/high/medium; no strong copyleft; no unknown licences
Healthcare - HIPAA (healthcare) 0 0 5 7.5 fails on known-exploited; fails on unfixed critical/high/medium; no strong copyleft; no unknown licences
Government - FedRAMP (government) 0 0 0 7 fails on known-exploited; fails on unfixed critical/high/medium; no strong copyleft; no unknown licences
Defense & Military - DoD (defense) 0 0 0 6 fails on known-exploited; fails on unfixed critical/high/medium; no strong copyleft; no unknown licences
E-Commerce - PCI-DSS (ecommerce) 0 2 10 7.5 fails on known-exploited; fails on unfixed critical/high; no strong copyleft
Telecommunications - Network Security (telecommunications) 0 1 5 7.5 fails on known-exploited; fails on unfixed critical/high/medium; no strong copyleft; no unknown licences
Energy & Utilities - Critical Infrastructure (energy) 0 0 2 7 fails on known-exploited; fails on unfixed critical/high/medium; no strong copyleft; no unknown licences
Education - FERPA (education) 0 5 15 8.5 fails on known-exploited; fails on unfixed critical/high
Gaming & Entertainment (gaming) 1 8 25 9 fails on known-exploited; fails on unfixed critical
IoT Devices (iot) 0 1 5 7 fails on known-exploited; fails on unfixed critical/high/medium; no strong copyleft; no unknown licences

#Workflow (7)

Profile Critical High Medium Max CVSS Notes
Pull Request Gate (pr-gate) 0 20 any 10 fails on known-exploited; fails on unfixed critical
Production Release Gate (release-gate) 0 2 10 8 fails on known-exploited; fails on unfixed critical/high; no strong copyleft
Known Exploited Only (kev-only) any any any 10 fails on known-exploited
Legacy Burn-Down (legacy-burn-down) 2 15 any 10 fails on known-exploited
Internet-Facing Services (internet-facing) 0 1 10 8 fails on known-exploited; fails on unfixed critical/high; no strong copyleft
Internal Tools (internal-tools) 1 8 40 9 fails on known-exploited; fails on unfixed critical
Supply Chain Hardened (supply-chain) 0 3 15 8.5 fails on known-exploited; fails on unfixed critical/high; no strong copyleft

#Licences (2)

Profile Critical High Medium Max CVSS Notes
Licence Compliance - No Copyleft or Unknown (license-compliance) 0 5 20 9 fails on known-exploited; fails on unfixed critical/high; no strong copyleft; no unknown licences
Publishing Open Source or Redistributing (oss-distribution) 0 3 15 9 fails on known-exploited; fails on unfixed critical/high; no strong copyleft; no unknown licences

#Choosing one

Situation Start with
No idea yet Standard
A pull request check that must not be blocked by old backlog Pull Request Gate
The build that ships to customers Production Release Gate
A large backlog you want to burn down without blocking everyone Known Exploited Only, then Legacy Burn-Down, then tighten
An internet-facing API or site Internet-Facing Services
You redistribute the software Publishing Open Source or Redistributing
Licences matter more than vulnerabilities Licence Compliance
An auditor asks for a framework the matching Compliance profile, or a custom one
Safety-critical or regulated sector the Industry profile, or Strict

Move towards stricter profiles in steps. Going from a permissive profile straight to Strict will fail almost every project on day one.

#Custom policies

When no profile fits, build your own. Owners and admins can:

  • New custom policy (top right of the page): starts from the profile you choose;
  • Customise this profile: copies the profile you are looking at.

A custom policy has a name, an optional description, a profile it starts from, and any of these limits changed:

Limit Range
Critical, high, medium vulnerabilities 0 to 998, or no limit
Critical and high with a known exploit 0 to 998, or no limit
Highest severity score 0 to 10
Overall risk score 0 to 100
Fail on CISA KEV on or off
Fail on unfixed critical, high, medium on or off each
Allow strong copyleft, allow unknown licences on or off each

While you edit, the editor shows how strict the result is and lists every difference from the profile it started from. Only the differences are stored, so everything you did not change is inherited.

Rules for custom policies:

  • Names are unique within a tenant. A tenant can have up to 50.
  • Edits apply to scans started after you save.
  • A policy that is active cannot be deleted: switch to another first.
  • A custom policy belongs to its tenant and is invisible to others.
  • If an active policy is ever removed, scans fall back to Standard rather than failing.

#Through the API

All of this needs the admin role.

# List built-in and custom policies, each with its limits
curl -H "Authorization: Bearer $TOKEN" https://api.dpndncy.example.com/api/admin/policies

# Create
curl -X POST https://api.dpndncy.example.com/api/admin/policies   -H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json"   -d '{"name":"Payments service","baseId":"release-gate","limits":{"maxHigh":0,"maxCvss":7}}'

# Change one (PUT /api/admin/policies/<id>), delete one (DELETE ...), or make one active:
curl -X POST https://api.dpndncy.example.com/api/admin/policy   -H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json"   -d '{"policyId":"policy_1793969812737"}'

baseId is the id of a built-in profile from the tables above. Invalid limits are refused with the reason, for example maxHigh must be a whole number from 0 to 999.

#How a pipeline sees it

The CLI in --ci mode exits 0 when the policy verdict is pass and 1 when it is fail, and prints the violations. Changing the tenant's policy changes what pipelines do from the next run, with no change to the pipeline. See The dpndncy command line.