CI/CD Pipeline Security Control with Security Gate
Overview
Security Gate is the control that lets you define vulnerability thresholds and use them to evaluate whether a build should proceed in CI/CD.
The feature combines two layers:
- Platform configuration and monitoring: define the rules, review executions, and inspect why a pipeline passed, failed, or generated a warning.
- AST enforcement in CI/CD: run the assertion command during the pipeline so the configured policy is enforced automatically.
This guide covers both parts.
Prerequisites
Before using Security Gate with Conviso AST, set your API key:
export CONVISO_API_KEY='your-api-key'
How Security Gate Works
At a high level, the flow is:
- Define the policy that will be used for an asset.
- Run the Security Gate assertion in CI/CD.
- Review the execution result in the Platform when needed.
Security Gate evaluates vulnerabilities that are still considered open risks, especially those in Identified, In Progress, and Awaiting Validation.
For status definitions, see Workflow Status.
Configuring Security Gate in the Platform
The Platform is the recommended place to manage Security Gate because policies take effect immediately and remain centralized.
There are two main configuration models:
- Global rule: default rule applied to all assets.
- Asset rule: override for a specific asset.
Global Rule Configuration
Use the global rule to define the default company-wide baseline.
- Navigate to Policies.
- Locate the Security Gate (Global) section.
- Configure each severity level with:
- Max Vulnerabilities Allowed
- Max Days to Fix
- Click Save Policies.

Practical interpretation:
- if the number of vulnerabilities stays within the allowed threshold, the rule can pass;
- if the count exceeds the threshold but none are overdue, the result may become
Warning; - if vulnerabilities exceed the allowed aging window, the result becomes
Failed.
Asset Rules
Use an asset rule when a specific asset needs different thresholds from the global baseline.
Common cases:
- legacy applications that need a gradual hardening path;
- critical assets that require stricter limits;
- special projects with different operational constraints.
To review the active rule for an asset:
- Navigate to Assets.
- Open the target asset.
- Go to the CI/CD tab.
- Review the Security Gate card.

To create or edit an asset rule:
- Open the Security Gate card options menu.
- Select Add/Edit configuration.
- Define the desired thresholds.
- Review the pending changes.
- Save the configuration.


To remove the override and return to the global rule:
- Open the Security Gate card options menu.
- Select the reset option.
- Confirm the removal.


Monitoring Security Gate in the Web Interface
The Platform is also the main place to inspect Security Gate executions after the pipeline runs.
Execution List
Go to CI/CD > Security Gate to see the execution list across the company.

From this screen, you can:
- filter by status, asset, and execution date;
- search by execution ID or asset name;
- sort the list by ID, status, or execution time;
- save a default filter view.
Execution Statuses
Each execution is displayed with one of these statuses:
- Passed: the evaluated vulnerabilities are within the configured thresholds.
- Warning: the configured quantity threshold was exceeded, but there are no overdue vulnerabilities according to
Max Days to Fix. - Failed: at least one vulnerability exceeded the configured aging rule or another threshold that blocks the pipeline.
Execution Details
Click any execution to inspect the result in detail.

This view helps you confirm:
- which asset and execution time were evaluated;
- which rule type was applied:
GlobalAssetCustom
- what threshold was expected for each severity;
- how many vulnerabilities were found;
- how many were already expired based on the configured aging window;
- which recent scans provide context for the result.
Running Security Gate in CI/CD with AST
After the policy is defined, execute Security Gate in the pipeline with Conviso AST. It is a step of its own, run after the scan: a conviso ast run reports findings and exits 0, and this command is what decides whether the build proceeds.
The gate evaluates one branch — the checked-out one, or the one named with --branch-name. It reads a verdict and never creates an asset: when no asset matches the repository, it warns and exits 0, so set CONVISO_ASSET_ID to point at the right one.
conviso vulnerability assert-security-rules prints a deprecation banner and will be removed. It stays supported so a pipeline that gates on it keeps blocking while it migrates to the policy configured on the Platform.
Using Platform-based Configuration
If the policy is managed in the Platform, use:
conviso vulnerability assert-security-rules
This command fetches the active Security Gate rule for the asset, evaluates the vulnerabilities against it, and records the execution in the Platform.
Optional: export the full result as JSON
To persist the complete gate response (including all vulnerability fields returned by the API), use --output:
conviso vulnerability assert-security-rules --output gate-result.json
The JSON file contains the same payload used by the CLI, which is useful for CI artifacts, downstream automation, or debugging large SCA advisories that are summarized in the terminal output.
Using YAML-based Configuration
If you prefer to keep the rule in the repository, use:
conviso vulnerability assert-security-rules --rules-file 'FILE_NAME.yml'
This makes the pipeline apply the thresholds declared in the repository instead of the ones configured on the Platform.
Understanding CLI Results
After running the assertion command, the pipeline receives a success or failure result. Both configuration models print the same report; the first line names which policy was applied.
Platform-based Results
When the policy comes from the Platform, the CLI prints a severity summary for every run and, on failure, an enriched breakdown of the vulnerabilities that caused the gate to fail.
Success Response
If the rule is respected, the output is similar to:
💬 Running security gate with platform rules...
💬 Security Gate Result for Asset: my-api (ID: 42)
Execution Date: 2026-06-10T14:32:11Z
Severity Summary:
✅ CRITICAL: 0/0
✅ HIGH: 2/5
✅ MEDIUM: 1/10
⚪ LOW: N/A (not configured)
✅ Security gate PASSED.
Each severity line shows the current count versus the configured limit. Icons reflect the backend evaluation status when available (✅ pass, ⚠️ warning, ❌ fail).
Failure Response
If the rule is violated, the CLI still prints the severity summary and then lists up to 10 offending vulnerabilities inline:
💬 Running security gate with platform rules...
💬 Security Gate Result for Asset: my-api (ID: 42)
Execution Date: 2026-06-10T14:32:11Z
Severity Summary:
❌ CRITICAL: 1/0
✅ HIGH: 2/5
✅ MEDIUM: 1/10
⚪ LOW: N/A (not configured)
🔴 Security Gate FAILED — 3 vulnerabilities exceeded threshold
┌──────────────────────────────────────────────────────────────────────────────────────────────────┐
│ [CRITICAL] SQL Injection │
│ File: app/models/user.rb:42 │
│ │
│ Unsanitized user input is passed directly to a query. │
│ CVSS: 9.1 │
│ │
│ Link: │
│ https://app.convisoappsec.com/spa/company/11/vulnerabilities/123?assetId=42 │
└──────────────────────────────────────────────────────────────────────────────────────────────────┘
💡 Full vulnerability details: re-run with --output gate-result.json
Error: Security gate FAILED. Vulnerabilities exceed configured limits.
For each failing vulnerability, the CLI shows:
- severity and title;
- file path and line number, when available;
- a short description summary (markdown and code blocks are stripped; long SCA advisories are truncated for readability);
- CVSS score, when available;
- a direct link to open the vulnerability in the Conviso Platform.
When more than 10 vulnerabilities caused the failure, the CLI prints how many remain and provides an issuesUrl link to review the full filtered list in the Platform.
Use --output gate-result.json to save the complete API response, including full descriptions, instead of relying only on the terminal summary. When --output is provided, the CLI writes the JSON file before printing the failure details and updates the hint to point to the saved path.
The command exits with a non-zero status on failure, so the pipeline should be treated as blocked.
YAML-based Results
When you pass --rules-file, the report is the same as above — severity summary, failure breakdown, and --output — with the header naming the file the thresholds came from:
💬 Running security gate with rules from security-gate.yml...