โ†Research
Researchsecurity14 min read

Checkmarx KICS, npm Bitwarden CLI and GlassWorm show developer trust is the supply chain target

Checkmarx KICS, npm Bitwarden CLI packages and GlassWorm show how supply chain compromise has moved from poisoned code to weaponised developer trust.

Checkmarx KICS, npm Bitwarden CLI packages and GlassWorm are useful together because they show the same movement in three different accents: supply chain compromise is no longer only about getting malicious code into an application dependency. The better target is now the developer's trust path. Attackers are aiming at scanners, command-line tools, extension ecosystems, package names, registry identity and the automated systems that developers use before code ever reaches production.

That distinction matters. A malicious library in an application dependency graph is bad, but it is still bounded by where that library is imported and executed. A compromised developer tool sits closer to credentials, source code, build secrets and deployment authority. A poisoned scanner is expected to inspect repositories. A CLI is expected to read local configuration. An extension is expected to run inside a workspace. A package manager is expected to execute lifecycle scripts. These systems do not need to escape the perimeter. They are already inside the workbench.

This is why the current wave should not be treated as a collection of registry incidents. The pattern is structural. Modern open-source development has created a dense mesh of delegated trust: maintainers delegate publishing to tokens, projects delegate quality checks to scanners, developers delegate secret handling to CLIs, organisations delegate build decisions to CI and AI agents increasingly delegate actions to runtime tools. Every delegation creates a boundary. The attacks are finding the ones nobody treats as boundaries anymore.

The attack surface moved into developer infrastructure

The older mental model of supply chain compromise is still useful, but it is too narrow. It imagines a dependency graph where an attacker poisons a package, a downstream consumer installs it and the payload executes in an application or build environment. That model explains typosquatting, dependency confusion and hostile maintainer updates. It does not fully explain why developer infrastructure has become such an attractive target.

Developer tools are privileged by design. They are allowed to inspect secrets because configuration is part of the job. They are allowed to traverse filesystems because repositories are their input. They are allowed to open network connections because updates, telemetry, registries and plugins are normal. They are allowed to run before tests, before reviews and before deployment gates. In many organisations they run with broader access than the application they help build.

That makes tools such as Checkmarx KICS, Bitwarden CLI-adjacent npm packages and extension-based campaigns such as GlassWorm interesting even where the details differ. They occupy the same zone of misplaced comfort. Security scanners are treated as protective infrastructure. Password-manager CLIs are treated as operational glue. IDE and marketplace extensions are treated as productivity features. All three categories sit close to sensitive material and all three inherit trust from their role rather than from continuous verification.

The result is a reversal of the usual defensive assumption. Security tooling is not automatically a control. It is also code from a supply chain. Credential tooling is not automatically a safe broker. It is also software with update channels, package names and execution hooks. Extensions are not just editor decorations. They are executable integrations inside the place where credentials, source code and build systems meet.

This does not mean every developer tool is equally dangerous. It means the category deserves the same threat modelling usually reserved for production services. If a tool can read a repository, spawn a process, reach the network or touch credentials, it is part of the attack surface. The fact that it helps developers does not make it benign. In practice, it often makes it more useful to an attacker.

Trust is being weaponised before code reaches production

A production exploit usually has to overcome an exposed service, an input path, an authorisation gap or a memory safety bug. A developer supply chain attack often starts from the opposite assumption: the victim will voluntarily run the payload because the ecosystem tells them it is normal.

That is the weaponisation of trust. It turns maintenance behaviour into execution behaviour. Updating a package, installing a helper, running a scanner, connecting an extension or invoking a CLI becomes the delivery path. The attacker does not need to persuade the production system to accept hostile input. They need to persuade the development process to accept a plausible artefact.

This is visible across the recent cases named here and across the earlier infrastructure-scale compromises covered in the analysis of tj-actions, LiteLLM and MCP. In the tj-actions compromise, the trusted object was a Git tag. In the LiteLLM incident, the trusted object was the build and packaging path. In MCP registries, the trusted object is a runtime tool description and server relationship. The mechanisms differ, but the act of compromise is similar: replace the thing the ecosystem already trusts with a thing that behaves differently.

Developer infrastructure makes that replacement especially potent. CI systems carry repository tokens and deployment credentials. Local developer machines carry SSH keys, cloud profiles, package registry tokens and plaintext environment files. Secret managers and password CLIs are by definition adjacent to sensitive material. Scanners and build tools are often granted broad filesystem access because otherwise they cannot do their job. Extension hosts and agent frameworks add another layer by blending local execution with remote metadata.

The common failure is not only that software is mutable. It is that trust relationships are rarely reviewed after they are established. A package name accumulates reputation. A maintainer account becomes the source of truth. A marketplace listing gathers installs. A scanner gets approved once and then runs everywhere. A CLI becomes a habit. Over time, the relationship becomes invisible. Attackers prefer invisible relationships because defenders do not instrument them as aggressively as public-facing services.

This is why supply chain compromise now feels less like a bug class and more like an operating model. The attacker does not need to own the whole chain. They need to own the weakest relationship that still carries authority downstream.

Open-source ecosystems reward speed over verification

None of this is accidental. The developer ecosystem was optimised for velocity. Registries make publication easy. Package managers resolve names quickly. Extensions install with low friction. CI templates encourage reuse. Security scanners, linters and formatters become one-line additions. That convenience is why the ecosystem works. It is also why trust failures propagate quickly.

The problem is not that maintainers are careless or that developers are naive. It is that the defaults are built around collaboration in a mostly honest environment. A package name is assumed to represent a project. A publisher token is assumed to represent a maintainer. A version range is assumed to mean compatibility. A marketplace identity is assumed to mean continuity. A tool that has been safe so far is assumed to remain safe after the next update.

Attackers do not have to defeat a strict verification system in many of these cases because there often is not one in the path. They need to satisfy expectations. Does the package name look close enough. Does the CLI fit a workflow. Does the extension solve a problem. Does the scanner come from a category already trusted by policy. Does the release arrive through a channel people already use. If the answer is yes, execution follows.

This is the same authentication problem discussed in the earlier piece on Git tags, package registries and extension marketplaces. These ecosystems appear different, but they share a brittle assumption: control of a publishing mechanism is treated as proof that the artefact deserves downstream execution. That assumption fails when an account is phished, a token leaks, a namespace is abused or a marketplace review fails to model hostile behaviour.

The incentives make the problem worse. Secure configuration tends to require specific knowledge and deliberate effort. Insecure configuration tends to be what happens when a tired engineer follows the quick-start documentation. Attackers do not need every organisation to be careless. They need enough organisations to keep the default path in place.

There is also a cultural problem. Open-source infrastructure has long relied on reputation as a proxy for assurance. A popular project feels safer than an obscure one. A security tool feels safer than a random dependency. A package that resembles a known tool feels less suspicious because it fits the shape of expected work. Reputation is useful for discovery, but it is a poor execution control. It does not bind artefacts to identities, restrict behaviour or prevent a legitimate account from being abused.

The Checkmarx KICS, npm Bitwarden CLI and GlassWorm cluster should be read through that lens. The attacker is not merely choosing popular ecosystems. They are choosing artefacts that arrive pre-authorised by developer expectation.

AI agents add runtime supply chain risk

The next phase is already visible in agentic systems. Traditional supply chain compromise happens before or during deployment. AI agents add a runtime layer where tools, prompts, memory, model context and external services can alter behaviour after installation.

The academic material is useful because it shows that this concern is not limited to package registries. The ClawdGo paper frames autonomous agents on platforms such as OpenClaw as exposed to prompt injection, memory poisoning, supply chain attacks and social engineering. Its proposed answer is endogenous security awareness training: teaching the agent to recognise threats at inference time rather than relying only on perimeter controls. That framing matters. It treats the agent's own judgement as part of the security boundary.

The Vision-Language-Action safety survey makes a related point for embodied systems. It identifies data supply chain vulnerabilities alongside multimodal attack surfaces, real-time defence constraints and error propagation over long-horizon trajectories. The domain differs, but the lesson carries over to software agents: when systems act on external inputs over time, the supply chain is no longer just the code they install. It is also the stream of data, tools and context they accept while operating.

That should make defenders uncomfortable. A developer can pin a dependency. A build system can verify a hash. A runtime agent connected to external tools is harder to freeze. Tool descriptions can change. Server behaviour can change. Memory can be poisoned. Context can be shaped. The boundary becomes behavioural rather than purely artefactual.

This matters because developer workflows are among the first places where agents are being normalised. Coding assistants read repositories, suggest patches, invoke tools, call terminals and interact with package managers. They sit beside exactly the developer infrastructure already being targeted. If the supply chain attack surface now includes the agent's tool ecosystem, then the old distinction between dependency compromise and social engineering starts to collapse. A malicious package, a poisoned tool description and a convincing instruction can become parts of the same chain.

The defence cannot simply be "do not use agents". That advice will not survive contact with productivity pressure. The more realistic position is that agent permissions need to be treated like deployment permissions. An agent that can read secrets, install packages, run shell commands or publish code is not an assistant in the security model. It is an automation principal with a natural-language interface.

Artefact security is necessary but insufficient

A large part of the security industry response to supply chain compromise focuses on artefacts: signatures, provenance, software bills of materials, lockfiles and reproducible builds. Those controls matter. Without them, defenders cannot answer basic questions about what ran, where it came from or whether it changed.

But artefact security does not fully solve developer trust compromise. A signed malicious package is still malicious. A package published by a compromised legitimate account may have valid provenance. A scanner installed from the expected location can still be hostile if the upstream release process was compromised. A marketplace extension can pass static review and later abuse its permissions. An AI tool can be benign at approval time and unsafe after its server-side behaviour changes.

The missing layer is relationship security. Who is allowed to introduce tools into the developer environment. What permissions those tools receive. Which network destinations they can reach. Which files they can read. Which credentials are present when they run. Which update channels are trusted. Which identities can publish. Which approvals expire. Which behaviours are anomalous for a category.

This is where many organisations remain weak. They have reasonably mature controls for production workloads and comparatively soft controls for developer workstations, CI jobs and extension ecosystems. That gap is understandable. Developer environments are messy, varied and difficult to lock down without breaking work. It is also exactly why attackers are spending time there.

A useful test is simple: if a newly installed developer tool attempted to enumerate SSH keys, read cloud credentials, walk every repository on disk and open an outbound connection to an unfamiliar host, would anyone notice before data left the organisation? In too many environments the answer is no. Endpoint detection might catch the most obvious payloads. CI logging might capture some behaviour. Network controls might block known bad destinations. But the policy model often permits the activity because developer tools are expected to be flexible.

The defensive answer is not one control. It is a set of constraints that make trust less transferable. Package installs should not imply arbitrary script execution. Scanner access should not imply unrestricted egress. CLI convenience should not imply broad credential exposure. Extension installation should not imply workspace-wide authority forever. Agent access should not imply permission to act across every connected tool.

What mature defence looks like now

The mature response starts by treating developer infrastructure as production infrastructure. That does not mean identical controls. It means comparable seriousness.

First, immutable references should become the norm wherever the ecosystem permits them. Commit SHAs, lockfiles with hashes and pinned container digests reduce silent replacement. They do not stop initial compromise, but they slow propagation and make review possible.

Second, execution should be constrained by default. Build jobs and developer tools should run with the minimum credentials required for the task. Network egress should be explicit. Filesystem access should be scoped. Package install scripts should be disabled where they are not required. CI tokens should be short-lived, narrowly scoped and unavailable to untrusted steps.

Third, publisher identity has to be stronger than account possession. Multifactor authentication, hardware-backed signing, trusted publishing workflows and provenance records all help, but only if consumers actually verify them. A registry that accepts stronger identity but clients ignore it has improved administration rather than security.

Fourth, developer tools need behavioural monitoring. The relevant question is not only whether a binary is known, but whether its actions fit its claimed purpose. A static analyser reading source files is expected. A static analyser reading wallet directories is not. A password CLI contacting its documented service is expected. A lookalike package contacting an unrelated host is not. This is ordinary detection engineering applied to the development plane.

Fifth, agentic workflows need permission models that assume manipulation. Tool approval should expire. Tool metadata should be monitored for drift. Agents should not inherit ambient credentials from the shell. High-risk actions should require human confirmation with enough context to be meaningful. Memory should be treated as writable state, not trusted truth.

None of these controls are exotic. The hard part is operational. Developer environments change quickly. Teams resist friction. Tooling breaks. Exceptions accumulate. That is why platform defaults matter. If secure behaviour remains a custom programme maintained by already-mature teams, the ecosystem-wide asymmetry stays intact.

The new normal is not inevitability

Calling this the new normal is not the same as accepting it. It is a recognition that the economics have changed. Developer infrastructure offers attackers scale, privilege and plausible execution. It turns trusted maintenance paths into delivery systems. It lets one compromised relationship reach many downstream environments.

The uncomfortable part is that the attackers are not abusing obscure corners of the ecosystem. They are using the same properties that made open-source development efficient: reusable tools, low-friction installation, delegated publishing, rapid updates and shared infrastructure. The weakness is attached to the strength.

That is why the response cannot be limited to telling developers to be more careful. Care does not scale across millions of packages, thousands of tools and increasingly autonomous workflows. Defaults scale. Platform guarantees scale. Sandboxes scale. Content-addressed artefacts scale. Short-lived credentials scale. Permission boundaries scale.

The next serious supply chain defence will not be a better checklist for deciding whether a package looks trustworthy. It will be a reduction in the number of moments where looking trustworthy is enough.

Newsletter

One email a week. Security research, engineering deep-dives and AI security insights - written for practitioners. No noise.