Prompt-Injection As A Ci Entry Point Via Issue Metadata
Sources: 1 • Confidence: Medium • Updated: 2026-04-12 10:23
Key takeaways
- Cline ran an AI-powered issue triage workflow that executed anthropics/claude-code-action@v1 with tool access (including Bash, Read, and Write) when any user opened an issue.
- GitHub Actions caches can share the same name across different workflows, and Cline used the same cache key for node_modules in both the issue triage workflow and the nightly release workflow.
- A malicious issue title could direct the agent to run an npm install of an attacker-controlled, GitHub-hosted package as part of triage.
- The published compromised package reportedly only added OpenClaw installation and did not take more destructive actions.
- The issue triage prompt included the issue title as input to the agent.
Sections
Prompt-Injection As A Ci Entry Point Via Issue Metadata
- Cline ran an AI-powered issue triage workflow that executed anthropics/claude-code-action@v1 with tool access (including Bash, Read, and Write) when any user opened an issue.
- The issue triage prompt included the issue title as input to the agent.
- If a tool-capable agent receives an untrusted issue title, an attacker can craft that title to coerce the agent into executing commands.
- The attack chain against the Cline GitHub repository began with a prompt injection embedded in the title of a newly opened issue.
Least-Privilege Limits Impact But Cache Sharing Can Bypass Trust Boundaries
- GitHub Actions caches can share the same name across different workflows, and Cline used the same cache key for node_modules in both the issue triage workflow and the nightly release workflow.
- A successful compromise of the issue triage workflow could poison a shared cache that the nightly release workflow later restores, enabling theft of the release workflow's npm publishing secrets.
- The issue triage workflow did not have access to key secrets such as npm publishing credentials, which initially limited impact.
- GitHub evicts Actions caches that grow beyond 10GB, and the cacheract package exploited this by expanding cached paths to about 11GB to force eviction and then caching new files that enabled secret stealing.
Dependency Installation As An Injected Execution Mechanism
- A malicious issue title could direct the agent to run an npm install of an attacker-controlled, GitHub-hosted package as part of triage.
- An npm package can execute arbitrary code during installation via a preinstall script defined in package.json.
Observed Impact Described As Limited Despite High Potential Severity
- The published compromised package reportedly only added OpenClaw installation and did not take more destructive actions.
Unknowns
- What exact GitHub Actions workflow YAML, permissions, and runner environment settings were in place for the issue triage and nightly release workflows at the time of the incident?
- Is there direct evidence (logs/artifacts) that the issue-title prompt injection executed commands and installed attacker-controlled packages during triage runs?
- Were npm publishing secrets actually exfiltrated from the nightly release workflow, and if so, what tokens/identities were affected and for how long?
- What specific cache keys, scopes, and restore/save behaviors enabled cross-workflow cache reuse, and can untrusted workflows write to caches later restored by trusted workflows?
- What is the precise behavior of the compromised published package (including install-time scripts and any network or filesystem side effects) across the full distribution artifact?