════════════════════════════════════════════════════════════════════════ FILE :: npm-pypi-mini-shai-hulud-supply-chain.txt TYPE :: BLOG / LOG / FIELD NOTES PUBLISHED :: 2026-05-14 16:59 CET ARTICLE :: 05 / 15 AUTHOR :: floriano righetti ════════════════════════════════════════════════════════════════════════
npm, PyPI and Mini Shai-Hulud: the week the supply chain moved back to the center of operational cybersecurity
> The Mini Shai-Hulud campaign on npm and PyPI: 84 malicious TanStack versions shipped via GitHub Actions, OIDC token abuse and a confirmed OpenAI breach. Why the supply chain is now an operational cybersecurity problem — and what to check today.
Updated 14 May 2026.
This week, software supply chain risk moved back to the front of the stage. We are not talking about a single suspicious package uploaded to npm by a freshly created account, but about a broader campaign that hit legitimate packages, used by real developers and real CI/CD pipelines, jumping from npm to PyPI and involving well-known projects such as TanStack, Mistral AI, UiPath, OpenSearch and Guardrails AI.
The recurring name in the analyses is Mini Shai-Hulud: a campaign aimed at credential theft and automatic propagation across developer ecosystems. The most important point, for anyone running infrastructure or applications, is not the name of the campaign. It is that the build environment has become a primary target.
What happened
The best-documented case is TanStack. According to the official postmortem, on 11 May 2026, between 19:20 and 19:26 UTC, 84 malicious versions were published across 42 @tanstack/* packages. The compromised versions did not come from a classic maintainer password theft: the attack leveraged a combination of GitHub Actions workflows, cache poisoning and abuse of OIDC tokens generated during the pipeline.
In practice, the malicious code managed to enter the release path closely enough to the legitimate process to obtain seemingly trustworthy publications. This is the point that should make us pause: signatures, attestations and provenance are useful tools, but they are not enough if the environment producing them is already compromised.
Socket, StepSecurity and NHS Digital later tied the episode to a wider campaign covering npm and PyPI packages. Public indicators include packages linked to Mistral AI, OpenSearch and Guardrails AI, with payloads capable of executing code at install or import time, searching for tokens, cloud keys and CI/CD secrets, and attempting new malicious publications when they find credentials with sufficient privileges.
Why this is an operational incident, not just a technical one
The software supply chain is often treated as a development topic: lockfiles, dependencies, versions, packages. This incident shows it is also very much a topic of day-to-day operational security.
An npm install, a pnpm install or a Python import is no longer just a setup step. In a compromised context it can become the moment when GitHub tokens, npm keys, AWS/GCP/Azure credentials, secret managers, Kubernetes tokens, local configuration files and SSH keys are read.
The risk does not stop at the developer's machine. If the dependency is installed in CI/CD, the payload can see environment variables, ephemeral tokens, publish permissions and repository access. From there the attack can try to move laterally: publish new versions, modify repositories, establish persistence or exfiltrate sensitive material.
The breach effect: the OpenAI case
On 13 May 2026 OpenAI published a response to the TanStack attack. According to the company, two employee corporate devices were affected. OpenAI states it found no evidence of access to user data, production systems or intellectual property, but observed activity consistent with credential exfiltration on a limited subset of internal repositories accessible from the affected devices.
The operationally interesting part is the response: system isolation, session revocation, credential rotation, temporary restrictions on deploy workflows and preventive rotation of signing certificates. This is the correct behavior when the incident involves developer environments and pipelines: assume compromise until proven otherwise, shrink the blast radius and regenerate the secrets.
What to check right now
For anyone running Node.js or Python projects, the priority is to reconstruct the actual exposure. You need to check the lockfiles — package-lock.json, pnpm-lock.yaml, yarn.lock, requirements.txt or poetry.lock — and verify whether versions linked to the public indicators were installed between 11 and 14 May. Looking at direct dependencies is not enough: many packages arrive transitively.
Then review the CI/CD logs for the most recent runs: unusual installs, calls to unexpected packages, downloads from non-standard domains, sudden use of Bun where it was not planned, connections to domains tied to the public IOCs, unscheduled npm publish or repository changes.
Every runner or developer machine that installed a malicious version should be treated as potentially compromised. In that case, simply reinstalling the dependencies is not enough: you need token rotation, repository verification, SSH key review, secret-manager audits and analysis of the persistence mechanisms reported by the researchers.
The lesson for SMBs
For many small and medium-sized businesses the problem is not having an enterprise-grade SOC. The problem is knowing, within a few hours, where a library has been installed and which secrets were reachable from that environment.
Three simple controls change a lot:
An inventory of dependencies and lockfiles for every active project.
A clear separation between development, CI and production credentials.
A ready-to-go procedure to rotate GitHub, npm, cloud and SSH tokens without improvising.
When a campaign like Mini Shai-Hulud lands, whoever has these three elements does not eliminate risk, but drastically cuts the response time. And in operational cybersecurity, time is often the difference between a contained incident and a sprawling compromise.
Bottom line
This week's attack is not just "another piece of malware on npm". It is a reminder: today the perimeter also runs through package.json, CI runners, OIDC tokens, build caches and developer machines.
Effective defense is not about blocking every new library. It is about building intelligent friction: pinned dependencies, cooldown windows, minimum permissions, readable logs, rotatable secrets and workflows designed as hostile environments by default.
The operational message is simple: if a pipeline can publish software or access secrets, it must be treated as a critical system. Even when it is "just installing dependencies".
-- END OF TRANSMISSION -- █
> ln -s ./linked-nodes
- [PART OF] Operational Cyberinfrastructure