tailwindcss-contact-forms (npm) · Malicious Code
Affects tailwindcss-contact-formsSource GCVE Database
Rated by Threat Radar
Data as of 14 Sep 2026, 00:46 UTC
What to do
Affected software
| Product | Affected | Fixed in |
|---|---|---|
| npmtailwindcss-contact-forms | Affected
| Fixed in– |
Check your own hosts for these packages with threat-finder (opens in a new tab), our free open-source scanner.
AI-suggested
Users should immediately remove the tailwindcss-contact-forms package from their projects and avoid installing it. Verify dependencies to ensure no transitive inclusion of this package. Consider auditing package sources and using trusted package registries. Monitor for any unusual network activity related to Ethereum RPC endpoints or unknown external endpoints.
Description
--- _-= Per source details. Do not edit below this line.=-_ ## Source: amazon-inspector (cc68c81374c5b78e36fea2f599c5e0004ead6e56dfd02b40cec4f73c62193b30) The package presents itself as a Tailwind CSS forms plugin (README, repository field, and installation docs are copied verbatim from @tailwindcss/forms) but its sole main module src/index.js is a heavily obfuscator.io-obfuscated Node loader with no CSS-plugin functionality. On require(), the module executes top-level code that installs a createRequire and publishes require, module, and global into named globals (global.r, global.m, global.i, plus several _H/_t_u/_t_s handles) and imports spawn from node:child_process — a stager shape that hands arbitrary execution primitives to code assembled from the rotating string array. It also enumerates public Ethereum JSON-RPC endpoints (drpc.org, publicnode.com, blockscout, blastapi.io) and an Etherscan-like indexer, calls eth_blockNumber / eth_getBlockByNumber / eth_getTransactionCount, and pulls the transaction list for a hardcoded 42-character Ethereum address 0xa322E5f39aDC2490Ef6f0121063eD311D3080e1a, using the returned data as C2 signalling. Results are POSTed with a custom X-Payload-* header to an external endpoint reconstructed from string-array fragments ending in ut.com/api. A CSS plugin has no legitimate reason for obfuscation, node:child_process, or Ethereum RPC traffic; the cover story does not match the shipped code, and the payload runs the moment a developer requires the package.
References
- npmjs.com/package/tailwindcss-contact-forms/v/0.5.8 (opens in a new tab)
- npmjs.com/package/tailwindcss-contact-forms/v/0.5.6 (opens in a new tab)
- npmjs.com/package/tailwindcss-contact-forms/v/0.5.5 (opens in a new tab)
- npmjs.com/package/tailwindcss-contact-forms/v/0.5.4 (opens in a new tab)
- npmjs.com/package/tailwindcss-contact-forms/v/0.5.9 (opens in a new tab)
- npmjs.com/package/tailwindcss-contact-forms/v/0.6.0 (opens in a new tab)
- npmjs.com/package/tailwindcss-contact-forms/v/0.5.7 (opens in a new tab)
- npmjs.com/package/tailwindcss-contact-forms/v/0.6.1 (opens in a new tab)