AI-Generated GitHub Copilot “Autofix” Allowed Compromise of Snowflake's Jira
TL;DR Highlight
A crafted GitHub issue title ran commands on an Actions runner and leaked Snowflake's Jira token
Who Should Read
A developer who interpolates issue or PR values into GitHub Actions workflows and lets AI coding tools edit CI code
Core Mechanics
- Issue title ran commands on the runner
- jira_issue.yml in snowflake-connector-net put the issue title straight into a shell script.
- A single quote broke out of echo '...' and allowed arbitrary command execution.
- It triggered on issues: opened, so any GitHub user could fire it.
- A safe pattern was replaced with an unsafe one
- PR #1218 removed the existing env: + jq --arg pattern.
- It replaced it with direct ${{ github.event.issue.title }} interpolation.
- The flaw went live when the PR merged on June 18.
- The security gate was always true
- The if: condition checked github.event.pull_request.user.login.
- On issues events, github.event.pull_request is always null.
- So the condition was always true and every user passed.
- GitHub Advanced Security missed it
- The scan extracted and analyzed the vulnerable jira_issue.yml but did not flag the injection.
Community Reactions
- Opinion that static analysis would have caught it
- A commenter said to run zizmor in CI and pasted its template-injection error on the exact jira_issue.yml line.
- The finding is rated High confidence and comes with an auto-fix.
- Opinion that cheap AI cleanups invited the risk
- A change that would once rot in a tech-debt backlog is now easy to generate with an agent.
- The commenter argued code is not free to review or maintain even when generation is free.
- Opinion that Snowflake owns the blame, and a counterargument
- One commenter said Snowflake allowed autofixes, so it shot itself in the foot.
- Another said anti-AI posts are overblown and humans remain responsible for oversight.
- Point that Copilot's commit looked unrelated
- A commenter noted PR #1218 had only one Copilot co-authored commit, unrelated to the vulnerability.
- The article later added an update clarifying Copilot's role.
How to Apply
- Run zizmor on your workflows
- Today, run zizmor against .github/workflows in your repo and check template-injection warnings.
- List every run: block that gets flagged.
- Move ${{ }} interpolations out of run: into env
- Receive external input like github.event.issue.title in an env: variable.
- Reference it as "$ISSUE_TITLE" in the shell and build JSON with jq --arg.
- Check AI-made CI diffs for deleted safe patterns
- In review, first look for removed defenses like env: or jq.
- Require human approval for changes to workflow files.
- Use least-privilege, short-lived workflow secrets
- Limit external service tokens like Jira to read-only.
- Set up a routine to rotate them.
Try It
# Paste into Claude or ChatGPT (GitHub Actions workflow injection review)
Security-review the GitHub Actions workflow below.
{{workflow YAML}}
Check for the following.
1. Places in run: blocks where external input like ${{ github.event.* }} is interpolated directly
2. if: conditions that become null depending on the event type and are always true (e.g., referencing github.event.pull_request on an issues event)
3. Steps that access secrets and can be triggered by untrusted user input
For each problem, show the risky line, why it is risky, and a fix using an env: variable and jq --arg.
Next step: pip install zizmor, then run zizmor .github/workflows and compare the results.Terminology
Related Papers
Same Simulation, Different Evidence: Where Retrieved Tool Output Costs LLM Agents Accuracy
Saving long tool output to files cut GPT-5.1 accuracy by 11.3 points; naming the authoritative file restored it.
Fake News, Real Crashes: Information Injection Attacks on LLM Financial Trading Agents
Fake headlines hijacked LLM trading agents 62% of the time versus 14% for prompt injection.
Harness Engineering 101: The LLM is the brain, the harness is the body
An agent is a loop managing a JSON array; 16 chapters build one from scratch
Harness2 by Google Research – Recursive Agent Harnessing
Recursively refining the harness with fixed model weights raised benchmark scores by up to 11.8 points.
Ousted Savannah police officer gave ICE agent husband access to Flock system
A police officer shared her Flock login with her ICE-agent husband; an audit found 983 searches and she was fired
Tmux and Claude Code: Sessions, Send-Keys, and the Ceiling
Running Claude Code agents in tmux works well, but limits appear around four agents.