{"id":"MAL-2026-17667","summary":"Malicious code in tailwind-animatecss-uniform (npm)","details":"tailwind-animatecss-uniform 2.0.7 was published to npm on 2026-09-28 by the account ares0320. The package is part of a fake job interview campaign that targets developers, using the same method as the \"Contagious Interview\" campaign. A fake company sends a take-home coding assessment repository. The repository commits a web/.npmrc containing a plaintext npm auth token, and its tailwind.config.js loads this package as a Tailwind CSS plugin. The package presents itself as an Animate.css integration (\"A configurable, namespaced Animate.css integration for Tailwind CSS\", main plugin.js) but declares a runtime dependency on a private scoped npm package (@jasperquinn/postcss-motion-helpers) that is not publicly readable, so npm audit and public scanners cannot see it; it only resolves with the token committed in the lure repository. The package has no install scripts, so --ignore-scripts does not help: the code runs when Tailwind loads the config, i.e. on `npm run dev` / `next dev`. Public analysis of the earlier package in this chain (animatecss-tailwind-adapter, by Yunus Aydın) reports that the private package contacts an operator-controlled server and runs the code it receives with full Node.js privileges. Observed directly: the lure was a \"backend engineer assessment\" for a fake company \"Nodveta\" (nodveta.com), posted as a job on Torre.ai (https://torre.ai/s/dphYpcyPn1) and shared as the private GitHub repository Nodveta-Infra/backend-engineer-assessment (a Hardhat / Express / Next.js pharmaceutical cold-chain dApp). The repository's commits are dated 2026-09-20/21, but the GitHub organization was created on 2026-09-29 and this package was published on 2026-09-28, so the history was backdated. The final commits add web/.npmrc (npm auth token) and a web/AGENTS.md + CLAUDE.md written for AI coding agents: they claim the project uses an unfamiliar Next.js version, send the agent to read docs inside node_modules (which requires installing dependencies), and tell it to commit the file. The package's repository field points to a GitHub repository that is not publicly accessible. Related packages from the same template (same description, main file, dependency list and 2.0.x versioning, each published by a different single-use npm account): animatecss-tailwind-adapter 2.0.6 (2026-07-28, depends on private @aaron205whitmore/postcss-animate-utils), animatecss-tailwind-bridge 2.0.6 (2026-09-13, depends on private @jasperquinn/postcss-motion-helpers) and tailwind-animatecss-uniform 2.0.7 (2026-09-28, depends on private @jasperquinn/postcss-motion-helpers).","modified":"2026-10-08T05:15:04.288667113Z","published":"2026-10-07T18:36:40Z","references":[{"type":"PACKAGE","url":"https://www.npmjs.com/package/tailwind-animatecss-uniform"},{"type":"WEB","url":"https://torre.ai/s/dphYpcyPn1"},{"type":"WEB","url":"https://nodveta.com"}],"affected":[{"package":{"name":"tailwind-animatecss-uniform","ecosystem":"npm","purl":"pkg:npm/tailwind-animatecss-uniform"},"versions":["2.0.7"],"database_specific":{"cwes":[{"cweId":"CWE-506","description":"The product contains code that appears to be malicious in nature.","name":"Embedded Malicious Code"}],"source":"https://github.com/ossf/malicious-packages/blob/main/osv/malicious/npm/tailwind-animatecss-uniform/MAL-2026-17667.json"}}],"schema_version":"1.9.0","credits":[{"name":"juanda2222","contact":["https://github.com/juanda2222"],"type":"FINDER"}]}