🔍 Static Analysis Security Report - November 4, 2025 #3117
Closed
Replies: 1 comment
-
|
This discussion was automatically closed because it was created by an agentic workflow more than 1 week ago. |
Beta Was this translation helpful? Give feedback.
0 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
-
🔍 Static Analysis Security Report - November 4, 2025
Executive Summary
Comprehensive static analysis scan of 67 agentic workflows using three security and code quality tools (zizmor, poutine, actionlint). Analysis identified 1,736 total findings across all workflows, with 6 priority security issues requiring immediate attention.
Critical Findings:
Overall Security Posture: Moderate risk with critical vulnerabilities in self-hosted runner usage and command injection that require immediate remediation.
Analysis Methodology
Tools Used
Scan Coverage
.lock.ymlformat with static analysis enabledSummary Statistics
Findings by Tool
Findings by Severity
Priority Security Issues
🔴 Priority 1: Self-Hosted Runners on Pull Requests
Tool: Poutine
Rule:
pr_runs_on_self_hostedSeverity: WARNING (High Security Impact)
Count: 35 occurrences across 8 workflows
Affected Workflows
Security Impact
Running workflows on self-hosted runners for PR events creates a CRITICAL security vulnerability:
Recommended Actions
Fix Guide:
/tmp/gh-aw/cache-memory/fix-templates/poutine-pr_runs_on_self_hosted.md🔴 Priority 2: Command Injection Vulnerability
Tool: Poutine
Rule:
injectionSeverity: WARNING (High Security Impact)
Count: 2 occurrences in 1 workflow
Affected Workflows
Security Impact
Direct interpolation of user-controlled input into bash/JavaScript creates command injection vulnerabilities:
Example Vulnerable Pattern
If issue title is
feature"; rm -rf / #, the command becomes:git checkout -b feature"; rm -rf / #Recommended Fix
Use environment variables instead of direct interpolation:
Fix Guide:
/tmp/gh-aw/cache-memory/fix-templates/poutine-injection.md🟡 Priority 3: Template Injection Risks
Tool: Zizmor
Rule:
template-injectionSeverity: Low (but can escalate)
Confidence: High
Count: 33 occurrences across 3 workflows
Affected Workflows
Security Impact
Template expressions (
${{ }}) that include user-controlled data can lead to code injection:Recommended Fix
Replace direct template usage with environment variables:
Fix Guide:
/tmp/gh-aw/cache-memory/fix-templates/zizmor-template-injection.mdReference: Zizmor Template Injection Audit
🔵 Priority 4: Expression Error (Runtime Failure)
Tool: Actionlint
Rule:
expressionSeverity: Error
Count: 1 occurrence in 1 workflow
Affected Workflows
Issue Details
Property
label_namesis accessed but not defined inworkflow_dispatchinputs:Impact
Recommended Fix
Add the missing input definition or remove the reference to
label_names.🔵 Priority 5: Unquoted Variables (SC2086)
Tool: Actionlint (shellcheck)
Rule:
SC2086Severity: Info
Count: 1,420 occurrences across 67 workflows
Issue
Variables used without quotes can cause word splitting and globbing:
Recommended Fix
Quote all variable expansions:
mv "$FILE_PATH" /destination/Impact
🔵 Priority 6: Unquoted Command Substitution (SC2046)
Tool: Actionlint (shellcheck)
Rule:
SC2046Severity: Warning
Count: 67 occurrences across 67 workflows
Issue
Unquoted command substitution can cause word splitting:
Recommended Fix
Quote command substitution or use better alternatives:
Additional Findings Summary
Poutine Findings
Actionlint Findings
Detailed Analysis by Tool
🔍 Zizmor Security Findings
Template Injection (33 findings)
Rule:
template-injectionSeverity: Low
Confidence: High
Reference: (redacted)#template-injection
Occurrences by Workflow
Why This Matters
While marked as "Low" severity, template injection can escalate to critical if:
Fix Strategy
Replace all instances of user-controlled template expressions with environment variables. See fix template for detailed guidance.
🔒 Poutine Supply Chain Findings
1. Self-Hosted Runner Security (37 findings - HIGH PRIORITY)
Already covered in Priority Issues above
2. Command Injection (2 findings - HIGH PRIORITY)
Already covered in Priority Issues above
3. Unpinnable Actions (43 findings)
Rule:
unpinnable_actionSeverity: Note
Impact: Limited supply chain protection
Affected Locations
.github/actions/daily-perf-improver/build-steps/action.github/actions/daily-test-improver/coverage-steps/actionpkg/workflow/js/node_modules/@actions/github-script/.github/actions/install-dependencies/actionExplanation
Some GitHub Actions depend on mutable components (npm packages, Docker images) that make pinning to specific commits ineffective for supply chain security.
Recommendation
Accept this limitation or consider:
4. Unverified Action Creators (3 findings)
Rule:
github_action_from_unverified_creator_usedSeverity: Note
Impact: Moderate supply chain risk
Recommendation
⚙️ Actionlint Code Quality Findings
Shellcheck Issues Distribution
Expression Errors (1 finding - ERROR PRIORITY)
Already covered in Priority Issues above
Pattern Analysis
All 67 workflows are affected by similar shellcheck issues, indicating:
Typical Locations
Historical Trends
Comparing with previous scan (November 3, 2025):
Key Observations
Recommendations
Immediate Actions (Critical - Within 24 hours)
✅ Fix command injection in create-branch workflow
/tmp/gh-aw/cache-memory/fix-templates/poutine-injection.md✅ Review self-hosted runner usage
/tmp/gh-aw/cache-memory/fix-templates/poutine-pr_runs_on_self_hosted.mdShort-term Actions (High Priority - Within 1 week)
✅ Fix template injection in 3 workflows
/tmp/gh-aw/cache-memory/fix-templates/zizmor-template-injection.md✅ Fix expression error in poem-bot workflow
Medium-term Actions (Within 1 month)
✅ Address SC2086 shellcheck issues
✅ Implement automated static analysis in CI/CD
Long-term Actions (Ongoing)
✅ Update workflow generation templates
✅ Security training and documentation
✅ Supply chain security
Fix Templates Available
Detailed fix guides have been created for priority issues:
Self-Hosted Runner Security
Path:
/tmp/gh-aw/cache-memory/fix-templates/poutine-pr_runs_on_self_hosted.mdCovers: 4 fix strategies, specific recommendations per workflow, testing procedures
Command Injection Prevention
Path:
/tmp/gh-aw/cache-memory/fix-templates/poutine-injection.mdCovers: Environment variable pattern, validation, common injection sources, testing
Template Injection Mitigation
Path:
/tmp/gh-aw/cache-memory/fix-templates/zizmor-template-injection.mdCovers: Safe vs unsafe contexts, fix patterns, action inputs, verification
Verification Checklist
After implementing fixes, verify:
gh aw compile --zizmor --poutine --actionlintNext Steps
Appendix: Scan Configuration
{ "scan_date": "2025-11-04T09:00:00Z", "repository": "githubnext/gh-aw", "tools": { "zizmor": "latest", "poutine": "latest", "actionlint": "integrated" }, "workflows_scanned": 67, "scan_method": "comprehensive", "data_source": "cache_analysis_nov_3" }Report Generated: November 4, 2025
Next Scan: November 5, 2025 (automated daily scan)
Contact: See repository maintainers for questions
Additional Resources:
Beta Was this translation helpful? Give feedback.
All reactions