sisakulint

Find and auto-fix security vulnerabilities in GitHub Actions #

52 security rules. 38+ auto-fixes. Taint propagation. 100% detection on GitHub Security Lab advisories.

sisakulint logo
$ brew tap sisaku-security/homebrew-sisakulint
$ brew install sisakulint
CI-Friendly static linter with autofix, SAST, semantic analysis for GitHub Actions - sisaku-security/sisakulint

GitHub - sisaku-security/sisakulint: CI-Friendly static linter with autofix, SAST, semantic analysis for GitHub Actions

CI-Friendly static linter with autofix, SAST, semantic analysis for GitHub Actions - sisaku-security/sisakulint

favicon

github.com


What is sisakulint? #

sisakulint is a static and fast SAST (Static Application Security Testing) tool for GitHub Actions. It automatically validates YAML workflow files according to security guidelines provided by GitHub.

Why GitHub Actions Security Matters #

GitHub Actions has become the de facto standard for CI/CD in open source projects. However, workflow files often contain security vulnerabilities that can lead to:

  • Supply chain attacks - Malicious code injection through compromised dependencies
  • Credential leaks - Exposed secrets in logs or artifacts
  • Privilege escalation - Overly permissive GITHUB_TOKEN permissions
  • Code injection - Untrusted input executed as code via ${{ }} expressions

These vulnerabilities are frequently exploited in real-world attacks, making automated security scanning essential.

Key Capabilities #

CapabilityDescription
Taint PropagationTracks untrusted input across steps, jobs, and reusable workflows. No other GitHub Actions scanner does this.
Auto-Fix (38+ rules)Don’t just report — fix. Automatically remediate 38+ security issues.
Supply Chain DetectionImpostor commits, ref confusion, vulnerable actions. CVSS 9.8 coverage.
OWASP CI/CD Top 10Full coverage of the OWASP CI/CD Top 10 Security Risks.
SARIF OutputNative SARIF format for reviewdog and GitHub Code Scanning integration.
CI-FriendlyFast execution designed for CI/CD pipelines.

Validated Against Real-World Vulnerabilities #

BenchmarkDetection Rate
GitHub Security Lab (GHSL) advisories100% (18/18)
GitHub Security Advisories (GHSA)81.6% (31/38)

Affected projects include: PX4-Autopilot, vets-api, weaviate, harvester, nrwl/nx, ag-grid


Existing Tools and Their Limitations #

GitHub Actions has become the de facto CI/CD platform, yet the security tooling landscape remains fragmented. Each tool addresses a different slice of the problem — no single tool previously combined deep semantic analysis with deterministic auto-fix and supply chain coverage.

CapabilityactionlintzizmorStepSecuritySemgrepGH Advanced SecurityAI Security Agents*sisakulint
Security-focused rulesLimited24N/A (runtime)YesYesAI-based (no static rules)Yes (52 rules)
Taint propagationNoNoNoYes (Pro)YesPartialYes
Supply chain detectionNoLimitedNoLimitedLimitedLimitedYes (CVSS 9.8)
Multi-step analysisNoNoNoLimitedYesYesYes
Auto-fix (target code)NoNoN/ALimitedYes (Copilot Autofix)YesYes (38+ rules)

*AI Security Agents: Claude Code Security (Anthropic, Feb 2026), Codex Security (OpenAI, Mar 2026). Both use AI-based detection — when a false positive occurs, there is no specific rule to trace or fix.

actionlint focuses on syntax validation and best practices. zizmor is security-focused but limited to single-step pattern matching. StepSecurity takes a complementary runtime hardening approach via network restrictions and permissions. AI Security Agents represent a new class of tool that excels at finding novel vulnerabilities but cannot participate in a deterministic, self-healing loop.

Two Levels of Automated Fixing #

It is important to distinguish two levels of automated fixing in security tooling:

Level 1: Target code autofix. Systems like GitHub Copilot Autofix, SapFix, Getafix, and the newest AI agents (Claude Code Security, Codex Security) fix bugs in application code flagged by scanners. sisakulint itself has 38+ deterministic autofix rules at this level.

Level 2: Scanner self-correction. Our system operates at a fundamentally different level: it fixes the scanner’s own detection rule logic, not target code. When sisakulint produces a false positive, the orchestration system reads the semantic context of the target repository and delegates root cause analysis to an agentic AI. This creates a self-healing loop — each fix permanently improves the scanner’s detection capability.


Security Rules (52 rules) #

Code Injection & Expression Safety #

Supply Chain & Dependency Security #

Credential & Secret Protection #

Pipeline Poisoning & Artifact Integrity #

Triggers & Access Control #

AI Agent Security #

Workflow Quality & Best Practices #


Install #

macOS #

$ brew tap sisaku-security/homebrew-sisakulint
$ brew install sisakulint

Linux #

Download from the release page:

$ cd <directory where sisakulint binary is located>
$ mv ./sisakulint /usr/local/bin/sisakulint

Usage #

# Basic usage (scans .github/workflows/ in current directory)
$ sisakulint

# Remote scan — scan any GitHub repository without cloning
$ sisakulint -remote owner/repo

# Auto-fix (dry-run to preview changes)
$ sisakulint -fix dry-run

# Auto-fix (apply changes)
$ sisakulint -fix on

# SARIF output for reviewdog / GitHub Code Scanning
$ sisakulint -format "{{sarif .}}"

# With debug output
$ sisakulint -debug

OWASP CI/CD Top 10 Mapping #

OWASP RiskDescriptionsisakulint Rules
CICD-SEC-01Insufficient Flow Control Mechanismsimproper-access-control, bot-conditions, unsound-contains, ai-action-unrestricted-trigger
CICD-SEC-02Inadequate Identity and Access Managementpermissions
CICD-SEC-03Dependency Chain Abuseknown-vulnerable-actions, archived-uses, impostor-commit, ref-confusion, reusable-workflow-taint
CICD-SEC-04Poisoned Pipeline Execution (PPE)dangerous-triggers-*, code-injection-*, envvar-injection-*, envpath-injection-*, output-clobbering-*, argument-injection-*, untrusted-checkout-*, request-forgery-*, ai-action-prompt-injection
CICD-SEC-05Insufficient PBACself-hosted-runners, ai-action-excessive-tools
CICD-SEC-06Insufficient Credential Hygienecredentials, artipacked, secrets-in-artifacts, secret-exfiltration, secret-exposure, unmasked-secret-exposure, secrets-inherit
CICD-SEC-07Insecure System Configurationtimeout-minutes, deprecated-commands, cache-bloat
CICD-SEC-08Ungoverned Usage of 3rd Party Servicesaction-list, commit-sha, unpinned-images, dependabot-github-actions
CICD-SEC-09Improper Artifact Integrity Validationartifact-poisoning-*, cache-poisoning-*
CICD-SEC-10Insufficient Logging and Visibilityobfuscation

OWASP Top 10 CI/CD Security Risks | OWASP Foundation

OWASP Top 10 CI/CD Security Risks project helps defenders identify focus areas for securing their CI/CD ecosystem.

favicon

owasp.org


FAQ #

How is sisakulint different from actionlint? actionlint is an excellent syntax and best-practice linter for GitHub Actions. sisakulint builds on that foundation with 52 security-focused rules, taint propagation across steps and jobs, and 38+ auto-fixes. If actionlint is a spell checker, sisakulint is a security auditor.

How is it different from zizmor? zizmor performs single-step pattern matching. sisakulint tracks data flow across multiple steps, jobs, and reusable workflows via taint propagation — catching vulnerabilities that single-step analysis fundamentally cannot detect (e.g., TOCTOU in checkout-to-use chains, cross-job secret exfiltration).

Will it slow down my CI? No. sisakulint is designed for CI/CD pipelines and completes in seconds even on large monorepo workflow files. SARIF output integrates directly with reviewdog and GitHub Code Scanning.

What about false positives? sisakulint achieves 100% detection on GitHub Security Lab advisories with a low false positive rate. Our Level 2 self-correction system continuously improves rule precision — when a false positive is confirmed, the scanner’s own detection logic is automatically fixed and regression-tested.

Can’t AI agents (Claude Code Security, Codex Security) replace a static linter? AI agents excel at finding novel, context-dependent vulnerabilities. However, they operate non-deterministically — when a false positive occurs, there is no specific rule to trace, debug, or fix. sisakulint provides deterministic, reproducible results with traceable rules, while our self-healing architecture bridges the gap by using AI to improve the rules themselves.


Architecture #

image

sisakulint automatically searches for YAML files in the .github/workflows directory. The parser builds an AST and traverses it to apply security and best practice rules. Results are output using a custom error formatter, with SARIF support for CI/CD integration.


Achievements #


CI-Friendly static linter with autofix, SAST, semantic analysis for GitHub Actions - sisaku-security/sisakulint

GitHub - sisaku-security/sisakulint: CI-Friendly static linter with autofix, SAST, semantic analysis for GitHub Actions

CI-Friendly static linter with autofix, SAST, semantic analysis for GitHub Actions - sisaku-security/sisakulint

favicon

github.com