Malicious code in tailwind-extension-kit (npm)
The npm package tailwind-extension-kit contained malicious code that fetches and executes attacker-controlled JavaScript from a hardcoded IP endpoint when registered as a Tailwind plugin. The payload is executed with full Node.js capabilities, including access to browser credentials and system information via declared dependencies.
- Disclosed
- Last updated
- Blast radius
- Developers using tailwind-extension-kit as a Tailwind plugin; arbitrary code execution on developer machines with full Node.js capabilities.
- Ecosystems
- Attack vectors
- Affected entities
- tailwind-extension-kitnpm package presenting as Tailwind CSS utility
The npm package tailwind-extension-kit was distributed with malicious code disguised as a Tailwind CSS utility plugin. When the package's default export getPlugin is invoked (as instructed in the README), it fetches JSON from a hardcoded bare-IP endpoint at https://31.97.137.157:45000/icons/109 and extracts the data.credits field.\n\nThe fetched data is passed to JavaScript's new Function(...) constructor with bindings to require, process, module, and Buffer, enabling full Node.js execution. The malicious code is disguised with cover-story framing—variables named IconProvider and iconDomain, a CDN hostname map, and a Font Awesome path fragment—to mask the loader as legitimate icon retrieval.\n\nThe package declared runtime dependencies on @primno/dpapi, better-sqlite3, and node-machine-id, consistent with browser-credential and cookie-stealer payloads. Developers who registered the default export as a Tailwind plugin would execute attacker-controlled code with full system access on their machines.\n\nThe incident was identified and credited to the OpenSSF malicious-packages project.
Indicators of compromise
- Packages
- tailwind-extension-kit
- IPs
- 31.97.137.157
Remediation
- Immediately uninstall tailwind-extension-kit from all development environments
- Audit npm package.json and lock files for any presence of tailwind-extension-kit
- Review browser credentials, cookies, and system access logs on affected developer machines for signs of compromise
- Rotate any credentials or tokens that may have been exposed
- Update Tailwind CSS and all dependencies to ensure no residual malicious code remains
- Implement package verification and code review practices for third-party npm dependencies before use
Sources
- GitHub Advisory GHSA-8v25-mhwg-4xhq · GitHub Advisory Database
Cite this entry
"Malicious code in tailwind-extension-kit (npm)." supplychainattack.org, Supply Chain Attack Incident Catalog. Disclosed August 19, 2026; last updated August 19, 2026. https://supplychainattack.org/incident/malicious-code-in-tailwind-extension-kit-npm-1ou0gh
Suggest a correction
Found an error or have a newer source? Corrections to factual errors take priority over new entries.
Related incidents
- containedcritical
Malicious code in 3-buildsight-web (npm)
The npm package 3-buildsight-web contains malicious code that fetches and executes arbitrary JavaScript from a remote Bitbucket URL on module load, granting full page privileges to an unverified third party.
npmCompromised package - resolvedcritical
Malicious code in @usaa-grp-personal-profile/personal-profile-common (npm)
Malicious package @usaa-grp-personal-profile/personal-profile-common version 999.0.0 published to public npm as a dependency-confusion attack targeting an organization's internal registry. The package contains preinstall and postinstall hooks that exfiltrate hostname, username, and working directory to an attacker-controlled OAST endpoint on every install.
npmDependency confusionCompromised package - resolvedcritical
Malicious code in create-coin (npm)
create-coin@20.1.1 on npm contained malicious postinstall code that collected sensitive environment variables, credentials, and host reconnaissance data. The package impersonated an esbuild platform build and exfiltrated data to a hardcoded endpoint.
npmCompromised packageTyposquatting - resolvedcritical
Malicious code in @syncraft-labs/vue (npm)
The npm package @syncraft-labs/vue version 0.4.1 contained malicious obfuscated code in its ESM build that implements a blockchain-hosted C2 dropper (EtherHiding pattern), enabling remote code execution on any consumer importing the package.
npmCompromised package