npm

The animatecss-tailwind-adapter npm Supply Chain Attack

Updated 23 Oct 2026 · Incident date 28 Jul 2026

Version 2.0.6 of the animatecss-tailwind-adapter npm package is malicious. npm replaced it with a security holding package on 20 October 2026. No patched release is listed.

A GitHub malware advisory and an OpenSSF malicious packages record describe it. Both tie it to a fake job interview campaign that sends developers a take-home coding test.

What happened

The npm account grant587holloway published animatecss-tailwind-adapter 2.0.6 on 28 July 2026 at 20:03 UTC. The registry preserves its publication date. On 20 October 2026, npm took over the package and published 0.0.1-security. The latest tag now points to that placeholder.

The GitHub advisory says the package is part of a fake job interview campaign. It uses the same method as the "Contagious Interview" campaign. A fake company sends the target a take-home coding assessment repository.

That repository commits a file at web/.npmrc. The file holds a plaintext npm auth token. The repository also has a tailwind.config.js that loads animatecss-tailwind-adapter as a Tailwind plugin.

The package presents itself as an Animate.css integration for Tailwind. Its main file is plugin.js. It declares a runtime dependency on a private scoped package, @aaron205whitmore/postcss-animate-utils.

Public scanners cannot see that private package. It resolves only with the npm token that the lure repository commits.

Both sources cite public analysis by Yunus Aydın of animatecss-tailwind-adapter, which the advisory calls the earlier package in the chain. That analysis reports that the private package contacts an operator-controlled server. It then runs the code it receives with full Node.js privileges. The advisory attributes that behavior to this analysis.

The package has no install scripts. For this reason, npm install --ignore-scripts does not stop it. The code runs when Tailwind loads its config, for example during npm run dev or next dev.

The GitHub advisory lists two more packages built from the same template. A different single-use npm account published each one. The repository field of animatecss-tailwind-adapter names the GitHub account sericpieap. animatecss-tailwind-bridge uses the same GitHub account. The advisory says neither repository is public.

The OpenSSF record MAL-2026-17665 went live on 7 October 2026 and credits juanda2222 as the finder. The GitHub advisory GHSA-v2r3-66q9-gmvw followed on 8 October 2026. Neither source marks the package as a test.

Affected versions

The affected release is animatecss-tailwind-adapter 2.0.6. The GitHub advisory lists these packages from the same template:

PackageVersionPublishedPrivate dependency
animatecss-tailwind-adapter2.0.62026-07-28@aaron205whitmore/postcss-animate-utils
animatecss-tailwind-bridge2.0.62026-09-13@jasperquinn/postcss-motion-helpers
tailwind-animatecss-uniform2.0.72026-09-28@jasperquinn/postcss-motion-helpers

The GitHub advisory lists no patched version. Treat every version of these packages as unsafe.

The npm registry now serves the security holding package 0.0.1-security. It is a placeholder, not a repaired release of the plugin.

Indicators of compromise

The sources list no domains, IP addresses or file hashes. They name these packages, accounts and files:

  • npm packages animatecss-tailwind-adapter, animatecss-tailwind-bridge and tailwind-animatecss-uniform
  • Private npm scopes @aaron205whitmore and @jasperquinn in a lockfile
  • npm publisher account grant587holloway
  • GitHub account sericpieap in a package repository field
  • A committed web/.npmrc file that holds an npm auth token
  • A tailwind.config.js that loads one of the packages above as a plugin
  • The package entry file plugin.js

How to check

Search each project for the three package names and the two private scopes. Run these commands from the project root. They only read files.

npm ls animatecss-tailwind-adapter animatecss-tailwind-bridge tailwind-animatecss-uniform
grep -rnE "animatecss-tailwind-adapter|animatecss-tailwind-bridge|tailwind-animatecss-uniform|@aaron205whitmore|@jasperquinn" --include=package.json --include=package-lock.json --include=yarn.lock --include=pnpm-lock.yaml --include=tailwind.config.js .

Then look for committed .npmrc files that hold a token:

grep -rln "_authToken" --include=.npmrc .

If you ran a take-home coding test from an unknown company, check that folder first. A package-name match identifies a dependency to investigate. An .npmrc file alone does not prove infection. Do not print or share its token.

What to do now

  1. If you find any of the three packages, remove them from package.json and delete the lockfile entries.
  2. Delete the take-home test repository from your machine.
  3. If you ran npm run dev, next dev or a Tailwind build in that repository, treat the machine as compromised. The private dependency in this chain is reported to run server-supplied code with full Node.js privileges.
  4. Rotate the npm tokens, GitHub tokens, cloud keys and SSH keys on that machine. Do this from a clean machine.
  5. Rotate any npm token that a repository commits in an .npmrc file.
  6. Review your lockfiles for the @aaron205whitmore and @jasperquinn scopes.

What Vigilance would show (rebuilt from public reports)

Vigilance compares the version you trust with the new one and names the file that gained a new power. The block below is rebuilt from the public reports in the words Vigilance prints. It is not a captured scan, because the malicious release is not redistributed.

vigi diff --old animatecss-tailwind-adapter-prev --new animatecss-tailwind-adapter-current
files scanned: 33

HEADS UP  1 file can now do things the old version could not. The rest changed and gained nothing.

CHANGED    plugin.js
           It now downloads from the internet, reads saved passwords and access keys and runs other programs. It did not before.

Frequently asked questions

Is animatecss-tailwind-adapter malware?

Yes. GitHub advisory GHSA-v2r3-66q9-gmvw and OpenSSF record MAL-2026-17665 list version 2.0.6 as malicious. npm replaced the package with a security placeholder on 20 October 2026.

Does --ignore-scripts protect against animatecss-tailwind-adapter?

No. The package has no install scripts. Its code runs when Tailwind loads the config, for example during npm run dev or next dev.

How does the fake job interview npm attack work?

A fake company sends a take-home coding test. The test repository commits an npm token and a Tailwind config that loads the package. The package pulls a private dependency that only that token can fetch.

Sources

  1. github.com/advisories/GHSA-v2r3-66q9-gmvw
  2. osv.dev/vulnerability/MAL-2026-17665
  3. registry.npmjs.org/animatecss-tailwind-adapter

More supply chain attacks

All 122 attacks in the library · npm supply chain attacks · How to prevent supply chain attacks

Check the next update before you install it

Vigilance compares the version you trust with the new one. It names the one file that gained a power the old version did not have.

Start the free 14-day watchBrowse the attack library