Catalog PyPI
PACKAGE EXPLORERView in registry

actionsieve

PyPI

Multi-platform CI/CD pipeline security scanner

cicdgithub-actionsgitlab-cisecuritysupply-chain
Versions collected1
Direct dependencies6From release 0.1.1
Last observed20 Oct, 18:33 UTC

README

Version 0.1.1 documentation

ActionSieve

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.

What it finds

  • Expression injection — untrusted PR/issue data interpolated into shell commands via ${{ }}, $CI_*, or platform equivalents
  • Supply chain risks — unpinned action/orb/pipe/plugin refs, mutable tags, known-compromised components (advisory database)
  • Dangerous triggers — pull_request_target with head checkout, issue_comment with fork access, and platform equivalents
  • Secret exposure — static cloud credentials where OIDC is available, secrets logged or leaked through env vars
  • Privilege escalation — Docker-in-Docker on shared runners, socket mounts, privileged containers
  • Cross-step data flow — taint propagation through GITHUB_OUTPUT, matrix injection, composite action output laundering
  • Cache poisoning — cache writes reachable from fork PRs
  • Hardening gaps — missing permissions: blocks, checkout with persisted credentials, unpinned container images

Supported platforms

PlatformProviderDetection
GitHub ActionsgithubWorkflows, composite actions, reusable workflows
GitLab CIgitlab.gitlab-ci.yml, includes, CI variables
Azure PipelinesazureYAML pipelines, template expressions
JenkinsjenkinsDeclarative + scripted pipelines (tree-sitter Groovy AST)
CircleCIcircleciConfig, orbs, dynamic config
Bitbucket PipelinesbitbucketPipelines, pipes, deployment variables
BuildkitebuildkitePipeline YAML, plugins, dynamic upload
Drone CIdronePipeline YAML, plugins
AWS CodeBuildcodebuildbuildspec.yml, IAM/secret misconfig
Google Cloud Buildcloudbuildcloudbuild.yaml, service account config

Platform is auto-detected from repository structure. Use --platform to force a specific one.

Install

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+.

Patterns

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 .

Quick start

# 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 .

Scanning modes

Static mode (default)

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/ .

PR mode (diff-aware)

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:

  • Suppress — finding hidden when no relevant file is in the changeset
  • Elevate — severity bumped when a relevant file IS in the changeset
  • Always — fires identically regardless of changeset (default)

CI auto-detection works for GitHub Actions, GitLab CI, Azure Pipelines, Jenkins, CircleCI, Bitbucket Pipelines, Buildkite, and Drone.

Incremental scanning

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.

Output formats

FormatFlagUse case
JSON--format jsonDefault, machine-readable
YAML--format yamlHuman-readable
SARIF--format sarifGitHub/Azure Code Scanning integration
Markdown--format markdownReports, PR comments
OCSF--format ocsfGRC platform integration (Detection Finding 2004)
CycloneDXinventory onlySBOM for dependency tracking

Environment profiles

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.

Online checks

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

CI integration

  • GitHub Actions — ActionSieve-action (composite action with SARIF upload to Code Scanning)
  • GitLab CI / Azure Pipelines — template examples in the action repo

PR mode auto-activates in CI — no configuration needed.

Pattern details

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

Corpus testing

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/

Exit codes

CodeMeaning
0No findings (or all suppressed)
1Findings at medium severity or above (or above --fail-on threshold)
2Critical findings

Contributing

See CONTRIBUTING.md for development setup and guidelines.

License

MIT

Downloads & popularity

Awaiting observations

No metric observations yet

Download counts and popularity will appear here as the collector receives them.

Versions 1

Collected releases
VersionPublishedDirect dependenciesOpen version
0.1.131 Aug 20266

Package advisories

0
No matching advisories collected

This describes our collected data; it is not a security assessment.

Repository

PENDING
opensecbench/actionsieve

Shared repository data · GitHub

License detected in repository
Not collected

Metadata history

Meaningful changes
Current collected state Current

Observed since 20 Oct, 18:33 UTC

No superseded metadata states collected. Unchanged observations do not create new revisions.

Record identity

package:5e92f9638f19f79989a1b64bedfb24fffc140a57793983c843a832f69de97bea