Your team reviews the code. You run the tests. The CI pipeline is green. And still, a package 100 million developers trust each week installs a Remote Access Trojan on every machine that runs npm install. That is what happened with Axios in March 2026 — and it is a warning that most engineering teams and CTOs are not yet equipped to act on.
Inspired by this article. The perspective and analysis below are original.
Axios is a promise-based HTTP client used across virtually every category of modern JavaScript application — web apps built with React, Vue, or Angular; desktop apps built on Electron; mobile apps using React Native; SaaS admin panels; CI/CD tooling. It sits in the dependency graph without calling attention to itself. That invisibility is exactly what attackers exploit.
In late March 2026, an attacker used compromised credentials belonging to a lead maintainer of the project to publish two poisoned packages to npm: axios@1.14.1 and axios@0.30.4. Neither version appears in the official Axios GitHub tag list. Any automated check comparing published npm versions against repository tags would have caught the discrepancy — but most pipelines do not run that check.
Both malicious versions injected a new dependency — plain-crypto-js@4.2.1 — that appears nowhere in the legitimate Axios source code. When installed with npm scripts enabled, a postinstall hook triggered node setup.js, which downloaded an obfuscated dropper. That dropper then retrieved a platform-specific Remote Access Trojan payload targeting macOS, Windows, or Linux.
The detail that should concern every DevOps team is this: the malware dropper cleaned up after itself. After execution, any inspection of the installed package directory shows a completely clean manifest. No postinstall script. No setup.js. No suspicious field in package.json. Running npm audit or manually reviewing installed files reveals nothing.
The absence of evidence is not evidence of absence. Standard npm security tooling is blind to this class of attack once the dropper has run.
The indicators of compromise you can actually search for are:
If your network egress logs show any connection to that domain or IP address during a build window, treat it as confirmed compromise regardless of what the package directory shows.
The infection path is the install or build step — not application runtime. End users loading a web app in a browser are not directly exposed. The target is the developer environment and, more critically, the CI/CD pipeline.
Any workflow that installed an affected version with npm scripts enabled may have exposed every secret accessible in that environment at install time. That includes:
If there is any possibility your team or pipeline ran one of the affected versions, treat those environments as fully compromised. Rotate every secret that was accessible during the install. An attacker with repository access or signing keys can backdoor future releases — or pivot directly toward your users and backend systems.
This attack succeeded because the attacker compromised the credentials of a trusted maintainer. Everything else — the poisoned packages, the RAT payload, the self-cleaning dropper — is operational execution of a plan made possible by one stolen credential.
For engineering leaders who publish packages or operate internal registries, this is a direct lesson. Maintainer accounts for any npm package — internal or external — should enforce multi-factor authentication. Publish tokens should be scoped to the minimum required permission, rotated on a schedule, and never stored in plain text as CI environment variables visible to all pipeline jobs.
Open-source trust is not a property of a package. It is a property of the processes and credential management practices that protect every person authorised to publish to it. When one account is compromised, the trust extended to the package by 100 million weekly downloads becomes the attack vector.
The Axios incident is not a reason to stop using open-source packages. It is a reason to manage dependency trust actively rather than assume it. These are the concrete steps that address the specific attack pattern:
package-lock.json or yarn.lock with npm ci in pipelines. Never allow npm install to resolve to a version not pinned in the lock file. Treat lock file changes as requiring explicit review in pull requests.npm ls and dependency diff reporting in CI can surface new transitive additions automatically for review.--ignore-scripts for production dependency installs where feasible, or run postinstall hooks in isolated environments with no access to secrets. Postinstall scripts that have not been explicitly reviewed and approved should not execute with access to cloud credentials.Supply chain attacks against npm are not theoretical scenarios. They are operational. The Axios incident follows a pattern seen in dozens of similar attacks over the past several years — the specific novelty is the scale of the target package and the sophistication of the post-install cleanup.
The question for engineering leadership is not whether this class of attack is real. It demonstrably is. The question is whether your current dependency management practices, CI configuration, and secret handling would contain the damage if a package your team trusts today becomes the attack vector tomorrow.
For most organisations, the honest answer is: probably not fully. The mitigations are not exotic — they are engineering discipline applied systematically to the dependency lifecycle. Start with lock file enforcement, transitive dependency auditing, and secret isolation in build environments. Build the monitoring and alerting around it. Make it part of how releases are reviewed, not an afterthought.
Excellence Consulting works with software engineering teams and technology leadership to assess and strengthen software supply chain security practices — from dependency governance to CI/CD pipeline hardening. If the Axios incident raises questions about your current posture, we are glad to work through what a practical assessment looks like for your environment.