Skip to main content

Documentation Index

Fetch the complete documentation index at: https://docs.pipefort.com/llms.txt

Use this file to discover all available pages before exploring further.

Pipefort runs 25 deterministic checks per scan, split across two surfaces:
  • 8 workflow checks parse .github/workflows/*.yml and inspect the YAML.
  • 17 repository-configuration checks call the GitHub API and inspect branch protection, default workflow permissions, secret scanning, and Dependabot status.
Most map to the OWASP Top 10 CI/CD Security Risks; three are workflow best-practice checks.

Workflow file checks

CategoryTitleSeverityAuto-fix
CICD-SEC-1Dangerous checkout in pull_request_targetHIGH
CICD-SEC-3Unpinned third-party actionMEDIUM
CICD-SEC-4Poisoned Pipeline Execution (shell injection)HIGH
CICD-SEC-5Missing permissions specificationMEDIUM
CICD-SEC-6Hardcoded credentialsHIGHpartial
BEST-PRAC-1Command piped directly to shellHIGH
BEST-PRAC-2Job timeout not configuredLOW
BEST-PRAC-3Self-hosted runner usageLOW

Repository configuration checks

These read GitHub-side settings and surface under a “Repository configuration” group in the UI (CLI: <repository settings> file label). They need the expanded GitHub App permissions described in GitHub App permissions; the CLI needs --github-token (or $GITHUB_TOKEN, or gh auth token).

Branch protection (CICD-SEC-1)

RuleTitleSeverity
BP-MISSINGDefault branch has no branch protection ruleHIGH
BP-FORCE-PUSHDefault branch allows force pushesHIGH
BP-DELETIONDefault branch can be deletedHIGH
BP-NO-REVIEWDefault branch does not require pull request reviewsHIGH
BP-FEW-REVIEWERSDefault branch requires fewer than 2 approving reviewsMEDIUM
BP-STALE-REVIEWSDefault branch does not dismiss stale reviews on new commitsMEDIUM
BP-NO-STATUS-CHECKSDefault branch does not require status checks to passMEDIUM
BP-ADMIN-BYPASSAdmins can bypass branch protectionHIGH
BP-NO-CODEOWNERS-REVIEWCODEOWNERS exists but their review is not requiredLOW
BP-NO-SIGNED-COMMITSDefault branch does not require signed commitsLOW

Actions runtime (CICD-SEC-4, CICD-SEC-5)

RuleTitleSeverity
WPERM-WRITEDefault GITHUB_TOKEN permissions are read-writeHIGH
WPERM-PR-APPROVEGitHub Actions can approve pull requestsHIGH
ACTIONS-ALL-ALLOWEDAll GitHub Actions and reusable workflows are allowedMEDIUM

Dependency hygiene (CICD-SEC-3)

RuleTitleSeverity
DEPENDABOT-ALERTS-OFFDependabot alerts are disabledMEDIUM
DEPENDABOT-FIXES-OFFDependabot security updates are disabledLOW

Credential hygiene (CICD-SEC-6)

RuleTitleSeverity
SECRET-SCANNING-OFFSecret scanning is disabledMEDIUM
SECRET-PUSH-PROTECTION-OFFSecret-scanning push protection is disabledHIGH

Rulesets

The CLI’s --ruleset flag (and the web app’s ruleset selector) controls which checks contribute to the final list:
  • all (default) — every check listed above.
  • owasp — only the CICD-SEC-* checks. The five workflow checks plus all 17 repository-configuration checks all carry CICD-SEC-* categories and flow into this ruleset together.

Enabling and disabling individual rules

The web app lets you toggle any individual rule on or off without changing the ruleset — per user, with optional per-repository overrides. See Rule settings for the model and the UI. The CLI’s filtering is limited to the coarser --ruleset choice above; multi-tenant preferences depend on the database and are web-only.

How the checks run

Each workflow check is a function that takes the parsed workflow YAML AST and returns a list of findings. The CLI and the web app both invoke the same ScanBytes(name, content) entrypoint. Repository-configuration checks are a separate pass: the API client first fetches the relevant GitHub settings (FetchRepositorySettings) and then runs ScanRepositorySettings(context) to produce findings. These findings carry a synthetic file path (<repository settings>) and a zero line/column so consumers can render them apart from per-file findings. See Auto-fix for which workflow categories the CLI’s --fix flag rewrites. Repository-configuration findings have no auto-fix — they’re flagged for manual remediation via GitHub’s UI.