Observed since 20 Oct, 18:33 UTC
No superseded metadata states collected. Unchanged observations do not create new revisions.
Multi-platform CI/CD pipeline security scanner
Note: ActionSieve is under active development and testing. APIs, output formats, and detection behavior are subject to change.
Multi-platform CI/CD pipeline security scanner. Finds injection vulnerabilities, supply chain risks, and misconfigurations across 10 CI/CD platforms using a pattern-driven detection engine.
${{ }}, $CI_*, or platform equivalentspull_request_target with head checkout,
issue_comment with fork access, and platform equivalentsGITHUB_OUTPUT,
matrix injection, composite action output launderingpermissions: blocks, checkout with
persisted credentials, unpinned container images| Platform | Provider | Detection |
|---|---|---|
| GitHub Actions | github | Workflows, composite actions, reusable workflows |
| GitLab CI | gitlab | .gitlab-ci.yml, includes, CI variables |
| Azure Pipelines | azure | YAML pipelines, template expressions |
| Jenkins | jenkins | Declarative + scripted pipelines (tree-sitter Groovy AST) |
| CircleCI | circleci | Config, orbs, dynamic config |
| Bitbucket Pipelines | bitbucket | Pipelines, pipes, deployment variables |
| Buildkite | buildkite | Pipeline YAML, plugins, dynamic upload |
| Drone CI | drone | Pipeline YAML, plugins |
| AWS CodeBuild | codebuild | buildspec.yml, IAM/secret misconfig |
| Google Cloud Build | cloudbuild | cloudbuild.yaml, service account config |
Platform is auto-detected from repository structure. Use --platform to
force a specific one.
pip install actionsieve
Or for development:
git clone https://github.com/OpenSecBench/ActionSieve.git
cd ActionSieve
uv sync --dev
pre-commit install
Requires Python 3.12+.
ActionSieve requires a pattern catalog — YAML files that define what to detect. Patterns are maintained separately from the scanner so teams can use community patterns, private patterns, or both.
Community patterns: ActionSieve-corpus
# Point to your patterns directory
actionsieve scan --patterns path/to/patterns .
# Or set the environment variable
export ACTIONSIEVE_PATTERNS=path/to/patterns
actionsieve scan .
# Scan a repository
actionsieve scan --patterns patterns/ .
# Output as SARIF for GitHub Code Scanning
actionsieve scan --patterns patterns/ --format sarif --output results.sarif .
# Generate a component inventory (bill of materials)
actionsieve inventory .
# Check components against the advisory database
actionsieve inventory --check .
Scans all pipeline files at a point in time. Every pattern fires based on what's in the definitions. This is the default when running locally.
actionsieve scan --patterns patterns/ .
Scans in the context of a specific change. Findings are filtered or elevated based on which files changed in the PR. Auto-activates in CI environments where trigger and base ref can be detected.
# Explicit changed files
actionsieve scan --patterns patterns/ --changed-files "Dockerfile,src/app.py" .
# From git diff output
git diff --name-only origin/main | actionsieve scan --patterns patterns/ --changed-files - .
# Context file (for scripted/corpus use)
actionsieve scan --patterns patterns/ --context context.yaml .
# Force mode
actionsieve scan --patterns patterns/ --mode pr --changed-files "Dockerfile" .
actionsieve scan --patterns patterns/ --mode static . # disable auto-detection in CI
In PR mode, patterns declare how they interact with the changeset:
CI auto-detection works for GitHub Actions, GitLab CI, Azure Pipelines, Jenkins, CircleCI, Bitbucket Pipelines, Buildkite, and Drone.
Scan only pipeline files changed since a git ref:
actionsieve scan --patterns patterns/ --changed-since main .
This is orthogonal to PR mode — it controls which pipeline files enter the scanner, not how findings are filtered.
| Format | Flag | Use case |
|---|---|---|
| JSON | --format json | Default, machine-readable |
| YAML | --format yaml | Human-readable |
| SARIF | --format sarif | GitHub/Azure Code Scanning integration |
| Markdown | --format markdown | Reports, PR comments |
| OCSF | --format ocsf | GRC platform integration (Detection Finding 2004) |
| CycloneDX | inventory only | SBOM for dependency tracking |
Profiles adjust severity based on deployment context. A finding on a public repo with self-hosted runners is more severe than the same finding on a private repo with ephemeral runners.
# Built-in presets
actionsieve scan --patterns patterns/ --profile hosted-public .
actionsieve scan --patterns patterns/ --profile self-hosted .
actionsieve scan --patterns patterns/ --profile hardened .
# Custom profile file
actionsieve scan --patterns patterns/ --profile my-profile.yml .
# See effective profile after resolution
actionsieve profile resolve --profile hosted-public
Profiles can suppress categories, elevate patterns, and extend presets.
Verify that SHA-pinned actions actually point to the claimed repository:
actionsieve scan --patterns patterns/ --online .
actionsieve inventory --online --check .
Reads GITHUB_TOKEN from the environment, or pass --token.
Search an organization's repositories for vulnerable CI/CD patterns:
# Scan all repos in an org
actionsieve search my-org --patterns patterns/ --forge github
# Targeted pattern search
actionsieve search --pattern expr-injection-run --patterns patterns/ --forge github
# GitLab group
actionsieve search my-group --patterns patterns/ --forge gitlab --token $GITLAB_TOKEN
PR mode auto-activates in CI — no configuration needed.
Inspect any pattern's full description, attack scenario, mitigations, and references:
actionsieve explain --patterns patterns/ expr-injection-run
actionsieve explain --patterns patterns/ mutable-action-ref
Run detection patterns against a test corpus to validate accuracy:
# Run all corpus cases
actionsieve corpus run corpus/ --verbose
# Generate a coverage report
actionsieve corpus table corpus/
| Code | Meaning |
|---|---|
| 0 | No findings (or all suppressed) |
| 1 | Findings at medium severity or above (or above --fail-on threshold) |
| 2 | Critical findings |
See CONTRIBUTING.md for development setup and guidelines.
MIT
Download counts and popularity will appear here as the collector receives them.
| Version | Published | Direct dependencies | Open version |
|---|---|---|---|
| 0.1.1 | 31 Aug 2026 | 6 |
This describes our collected data; it is not a security assessment.
Observed since 20 Oct, 18:33 UTC
No superseded metadata states collected. Unchanged observations do not create new revisions.
package:5e92f9638f19f79989a1b64bedfb24fffc140a57793983c843a832f69de97bea