We route freight across the Nordics from Copenhagen. Our design system is Tailwind, and a frontend engineer asked an assistant for utilities to 'make tailwind-merge cleaner.' It suggested a package. She added it.
It looked like an official companion. Same naming convention, same kind of exports, polite README. It was a hallucination. The name didn't exist until someone registered it.
The package patched our build. Every npm run build quietly copied our .env into a generated CSS file. We ship our docs site to a public CDN. One afternoon, an automated diff of our published assets found a suspiciously large CSS blob. Inside it: our Stripe publishable key, our analytics token, and a webhook URL for our status page.
Nothing billable leaked — the secrets were scoped and rotated within the hour. But the shape of the attack is what stayed with us. It didn't steal at runtime. It baked the theft into our own build output, so that we would publish it to the world with our own deploy. The attack used our pipeline as the exfiltration channel.
We removed the package. We added secret-scanning to our build. We stopped trusting that a familiar-sounding name came from a familiar maintainer.