Feature FAQ

Pepper is a complete application-security platform: it discovers, classifies and helps you fix vulnerabilities across source code, dependencies, containers and running applications, then signs and ships the evidence into your CI/CD pipeline. This page answers the twelve most common questions about what Pepper covers and where each feature lives in the product.

At a glance

#CapabilityStatusWhere
1CI/CD security with fail-build policiesBuild gates & templates
2Software Composition Analysis (SCA)SCA
3SBOM generation (CycloneDX & SPDX)SBOM
4Static Application Security Testing (SAST)SAST
5Dynamic Application Security Testing (DAST)DAST
6VCS pre-commit / pre-merge + secretsPre-commit
7Code signing (cosign / RSA)Signing
8Container & artifact scanningContainers
9AI prioritisation & remediationAI
10Ticketing / SIEM / IDE integrationsIntegrations
11Compliance mapping & dashboardsCompliance
12Audit log & trend analysisAudit / Trends

1 · CI/CD security & fail-build policies

Every project can have a build gate defining the maximum number of findings allowed at each severity, and an optional fail-on-new rule that rejects any finding not present in the previous scan. The worker evaluates the gate at the end of every scan and stamps the result on the Scan record.

2 · Software Composition Analysis (SCA)

Pepper parses dependency manifests from 13+ ecosystems and looks every package up against OSV for known vulnerabilities, plus a malicious-package heuristic for supply-chain attacks.

Supported ecosystems:

OSV calls are batched and cached. In air-gapped mode set vulnDbMode = offline to skip remote lookups.

3 · SBOM (CycloneDX & SPDX)

Every scan automatically emits two software-bill-of-materials documents from the dependency graph SCA produced. They are stored as scan artifacts in MinIO and downloadable through the API or the scan-detail UI.

FormatSpecArtifact typeDownload
CycloneDX 1.5 JSON SBOM_CYCLONEDX GET /api/scans/<id>/artifacts/cyclonedx
SPDX 2.3 JSON SBOM_SPDX GET /api/scans/<id>/artifacts/spdx

Each SBOM includes purl identifiers, dev vs. runtime classification, a root application component carrying scan / commit / branch metadata, and (for SPDX) DEPENDS_ON / DEV_DEPENDENCY_OF relationships.

SBOMs are signed automatically when code signing is enabled.

4 · Static Application Security Testing (SAST)

Pepper runs two SAST engines side by side: a deterministic pattern engine for well-known vulnerability classes, and an LLM-based analyser that reads each file in context. Findings from both engines are deduplicated and ranked.

5 · Dynamic Application Security Testing (DAST)

Pepper delegates DAST to dapper, an AI-driven pentester that exercises a running application. The DAST scanner lives at src/scanners/dast/ and can talk to dapper two ways:

  1. HTTP mode — recommended. Set dastEndpoint under Settings → DAST. Pepper POSTs the target URL to dapper, polls GET /scans/<id> until COMPLETED, then ingests the findings.
  2. CLI fallback — when dastEndpoint is unset but the dapper binary is on the worker, Pepper invokes dapper start URL=… OUTPUT=json and parses the local JSON report.

Configuration:

6 · Container & artifact scanning

The CONTAINER scanner discovers image references in source — both FROM directives in Dockerfiles and image: entries in Compose files — then runs Trivy against each image when it is installed on the worker.

Findings include:

Without Trivy installed, the scanner emits an INFO-level image inventory finding for each discovered image so you still know what your build pulls in.

Install Trivy in the worker image via apk add --no-cache trivy (or download the binary directly) and the next scan will pick it up automatically.

7 · Code signing

Pepper signs every SBOM it produces, so downstream consumers can prove the artifact came from your Pepper instance. Two modes are supported:

Signatures are uploaded as a SIGNATURE artifact (GET /api/scans/<id>/artifacts/signature) and contain the algorithm, artifact digest, signature, identity, and signing timestamp for each signed file.

8 · Pre-commit hook + secret detection

Pepper blocks commits that introduce HIGH/CRITICAL secrets or SAST issues by installing a git pre-commit hook that calls POST /api/precommit/scan with the staged file contents.

Install (one-liner)

curl -fsSL https://pepper.your-org.com/api/precommit/install.sh \
  | bash -s -- https://pepper.your-org.com ppr_xxxxxxxxxxxx

The installer:

What runs on each commit

The hook POSTs every staged file (under 2 MB) to /api/precommit/scan. Pepper runs the secret-pattern engine plus the SAST pattern rules in memory and returns a list of findings. The commit is blocked if any match the PEPPER_FAIL_ON set (defaults to CRITICAL,HIGH).

Bypass for emergencies: git commit --no-verify.

Pre-merge variant (webhooks)

For pre-merge enforcement, point your GitHub / GitLab repository at the respective webhook (Settings → Integrations shows the URLs). Pepper will start an INCREMENTAL scan against the PR/MR head and the build gate decides whether the merge can proceed.

9 · Integrations (Jira, Slack, SIEM, IDE)

Outbound integrations are stored encrypted in the IntegrationConfig table and dispatched at scan-completion time. All secrets are protected with AES-256-GCM at rest.

KindBehaviour
Slack Incoming-webhook URL. Posts a summary (severity counts, gate status) for each completed scan. Filter via notifyOn: scan_complete, gate_failed, critical_finding.
Jira REST API + project key. Opens an issue for every OPEN, CRITICAL / HIGH finding (configurable). Includes severity, file:line, rule id, CVE/CWE, and a back-link to the Pepper scan. Severity is mapped onto Jira priorities.
SIEM HTTPS POST (CEF / LEEF / JSON) or syslog (UDP/TCP). Every finding becomes one event with normalised severity score, scanner, project, file, CVE and CWE fields. Use for ArcSight, QRadar, Splunk, Sentinel.
IDE plugins Authenticated REST surface at GET /api/ide/findings?projectId=…&filePath=…&minSeverity=HIGH. Returns the latest completed scan plus findings touching the requested file. Auth: Authorization: Bearer ppr_….
GitHub OAuth for private clones + opening fix PRs. Per-finding "Open fix PR" uses an LLM to generate the patch and opens a real PR against the source repo.

Manage all of these under Settings → Integrations → Outbound, or call POST /api/integrations directly. Test connections from the UI ("Send test message" / "Send test event") or via POST /api/integrations/test.

10 · AI features

Pepper uses LLMs in five distinct places, all configured from Settings → LLM Config:

Pepper speaks to any OpenAI-compatible API (OpenAI, Azure, OpenRouter, Anthropic via proxies) or to a local Ollama instance — set llmProvider, llmBaseUrl, llmModel in Settings → LLM Config.

11 · Compliance mapping

Findings are mapped to OWASP Top 10, NIST SP 800-53, and ISO 27001 controls. Generate a per-scan compliance report from the scan detail page or /scans/<id>/compliance.

12 · Audit log

Every security-relevant action is appended to the immutable AuditLog table. View it under Settings → Audit Log or GET /api/audit-log.

Tracked actions include:

Each entry stores action, resource, resourceId, the acting userId, the originating IP, a timestamp, and a JSON details blob.

The /trends page renders three historical charts powered by GET /api/dashboard/trends?days=N:

Get started →    CI/CD recipes →    API reference →