March 20, 2026 · 9 min read
The Agent Was Authorized. The Attack Was Too.
The Cline supply chain attack moved through authorized channels at every step. No perimeter was breached. No token was forged. The security stack was not broken — it was operating at the wrong layer.
By AmplefAI
On February 17, 2026, a compromised npm token was used to publish a poisoned version of Cline, the open-source AI coding assistant. The payload itself was simple: a postinstall script that silently ran npm install -g openclaw@latest. The package stayed live for roughly eight hours and was downloaded around 4,000 times before it was deprecated and replaced with a clean version.
The interesting part was not the payload.
It was the path.
Cline had an automated GitHub issue triage workflow. When someone opened an issue, a workflow would spin up Claude with repository access and a set of tools to analyze and respond. The intent was understandable: reduce maintainer burden by automating first response.
Security researcher Adnan Khan showed that a prompt injection embedded in an issue title could push that triage flow into taking actions it should never have been able to take. From there, the attacker moved through GitHub Actions cache behavior, pivoted into the nightly publish path, obtained the npm publish token, and pushed the compromised package. Public reporting from Socket and StepSecurity aligns on the broad chain: prompt injection into issue triage, cache poisoning, token compromise, and malicious publish.
That chain matters for one reason above all others:
Every critical step in the chain used an authorized channel.
The GitHub issue was a valid API call. The triage workflow was an approved GitHub Action. The cache operations used platform-native mechanisms. The final publish used a real, non-revoked npm token.
No classic perimeter breach was required. No exotic exploit chain had to cross a boundary a firewall was built to understand. The attacker moved through approved paths using valid permissions and expected system behavior.
That is the part security leaders should pay attention to.
What the Traditional Stack Could Not Stop
Walk the chain step by step and the category mismatch becomes obvious.
The prompt injection arrived as text in a GitHub issue. That is not a firewall event. It is not a WAF event. It is not the kind of signal most SIEM rules are built to prioritize.
The triage agent then executed shell commands inside a GitHub Actions runner. That looks like ordinary CI behavior. Ephemeral runners execute shell commands constantly. From the perspective of endpoint tooling, git, npm, and shell usage inside CI are not inherently suspicious. They are the job.
The cache poisoning stage used the platform's own cache system. The publish token was then accessed from a workflow path already authorized to use it. And the final npm publish succeeded because the token was valid and the action matched an expected operational pattern.
Attack Chain Visibility
That is why this incident is so clarifying.
It was not that security tooling failed to inspect hard enough. It is that most of the conventional stack was operating at the wrong layer.
Some supply-chain tooling did catch the compromised package quickly after publication. Socket flagged the anomalous install script, and StepSecurity reported detection within minutes based on deviations from trusted publishing patterns and missing provenance attestations. But that is a different class of control. It is post-publish detection, not inline prevention before execution. By then, the package had already been live and installs had already happened. (We have written before about why observability alone does not constitute governance — this incident is the sharpest illustration yet.)
So the sharper claim is not that the stack saw literally nothing.
It is that the stack had nothing in the right place to stop the chain before the agent acted.
Where Governed Execution Breaks the Chain
In a governed execution model, the chain does not need to be recognized as an attack in order to be stopped.
It breaks at the action boundary.
The triage agent is not treated as a vaguely trusted automation. It is treated as a registered actor with a declared action class. Call it issue-triage. Call it repo-support. The label matters less than the principle: the actor is known, the action space is declared, and every requested action is evaluated before runtime access is granted.
So when a manipulated model attempts to request shell execution, the relevant question is not:
Did the model get prompt injected?
The relevant question is:
Is shell execution authorized for this agent, in this context, under this action class?
And if the answer is no, the chain ends there.
The action is denied. The denial is recorded. The requested action, triggering context, policy decision, trace ID, and timestamp are bound into an immutable forensic chain.
The important thing here is what governed execution does not require.
It does not require perfect prompt filtering. It does not require semantic certainty that the input was malicious. It does not require the model to remain uncompromised.
The model can be manipulated. The attempt can still fail.
Because the control sits at the action boundary, not the input boundary.
That is the architectural difference.
Traditional security often asks:
Is this traffic malicious?
Governed execution asks:
Is this action authorized for this actor in this context?
The first question depends on recognizing the attack.
The second does not.
Why This Is Not Just Another Vulnerability Story
Prompt injection is not a bug in the ordinary sense.
It is not the kind of flaw you patch once and retire. You can harden prompts. You can add filters. You can build classifiers and detectors and layered mitigations. All of that helps. But none of it changes the deeper fact that language models are designed to interpret natural language, and adversarial instructions are still instructions in natural language.
That is why this incident matters beyond Cline.
It is one of the clearest public demonstrations so far of what happens when an AI agent is granted meaningful access inside a production pathway without a governing action boundary around it. The issue was not simply that the model made a bad judgment. The issue was that the model was sitting inside an execution environment with capabilities that were never constitutionally constrained.
That is a governance failure.
Not a model failure alone. Not a firewall failure alone. A governance failure. The capability explosion we explored previously now has a concrete case study — and the answer is the same: if you do not govern execution, you govern nothing.
The Layer Problem
This is where many teams still get stuck.
Network security governs traffic between systems. Endpoint security governs processes on machines. Application security governs code, dependencies, and known software weaknesses. Supply-chain detection governs package integrity and release anomalies.
All of those layers still matter.
But none of them were built to answer the question autonomous agents force into the foreground:
What is this agent allowed to do, here, now, given this context?
Where Each Layer Sees the Attack
To a firewall, an agent tool call is just an HTTPS request. To endpoint tooling, shell execution inside CI is just a process doing CI work. To package infrastructure, a valid token publishing a release looks like a release.
The real risk surface is not just traffic, process, or package.
It is the gap between what the agent can do and what it should be allowed to do.
That gap is where governed execution lives.
It sits between agent intent and runtime execution. It evaluates requested action against declared authority. It binds that decision to policy and context. And it leaves behind a chain that can actually be reconstructed later.
That is the missing layer.
That is what we build.
One More Thing
The payload used in this incident was OpenClaw, the open-source agent runtime our own fleet runs on.
That detail is worth addressing directly.
Public reporting did not characterize OpenClaw itself as malware in the narrow sense. Socket described the payload as non-malicious in that nothing harmful ran automatically beyond the install itself. At the same time, both Socket and StepSecurity make clear that silently installing a capable agent runtime onto developer machines through a compromised package path is serious. A legitimate runtime can still become part of a malicious chain when it is deployed without the operator's knowledge or consent.
The runtime was not the root failure. The missing action boundary was.
And in a strange way, that makes the point more clearly than any pitch deck could.
The runtime itself is not the category error.
The category error is allowing ungoverned agents to operate with meaningful production authority and then expecting conventional controls to catch the consequences after the fact.
OpenClaw on a machine, by choice, under governance, is one thing.
OpenClaw installed silently because an AI-enabled workflow was manipulated into stealing a publish token is something else entirely.
The tool did not fail the boundary.
There was no boundary.
What Actually Changes
The lesson here is not that AI agents are too dangerous to use.
And it is not that organizations need to throw away the security stack they already have.
The lesson is simpler, and harder:
Once an agent can take actions inside production systems, the security question changes.
It is no longer enough to ask whether the input is suspicious, whether the network looks clean, or whether the token was technically valid.
You also need to ask whether the action itself was authorized for that agent, in that context, before execution.
That is the minimum bar.
Declare what the agent is allowed to do. Enforce it before runtime access. Prove it afterward with a forensic chain that holds up under scrutiny.
That is what governed execution is for.
A firewall that cannot inspect agent intent is not broken. It is simply operating at a different layer. But if your agents are taking actions in production, that leaves a blind spot large enough to swallow the entire fleet.
And that blind spot is only getting bigger.
AmplefAI builds the independent governance layer that ensures AI capability remains accountable to your institution — not your provider.
Learn more at amplefai.comAmplefAI
Continue Reading
Follow the thinking
We're building the constitutional layer for autonomous AI — in public. Get new posts delivered.
No spam. Governance-grade email only.