# @tailwindcss/node@4.3.3 security report (npm)

- Verdict: **Needs review** (risk level: medium)
- Scanned: 2026-10-06T14:12:24.000Z
- Files reviewed: 4
- Findings: 2 medium, 5 low severity findings
- Report: https://security.togoder.click/npm/@tailwindcss/node
- Source: Togoder Security (https://security.togoder.click), AI source-code review

## Summary

Togoder Security scanned the npm package @tailwindcss/node@4.3.3 on Oct 6, 2026. An AI review of 4 source files produced 2 medium, 5 low severity findings. The overall verdict is medium: the findings flag risky but common patterns (dynamic code, unsafe defaults, broad file or network access) rather than confirmed malware.

## Findings

### [medium] Dynamic module loading with computed input

Finding ID: `NPS-94DA4673BA88`

File: `dist/index.js`

The code dynamically resolves and imports modules using enhanced-resolve and jiti based on user/input paths. While this is expected behavior for a CSS framework's module loader, it can be abused to load arbitrary modules if an attacker controls the input path.

### [medium] Module loader hooks registration

Finding ID: `NPS-98BFF19C0D12`

File: `dist/index.js`

At import time, it registers module resolution hooks via `module.registerHooks` or `module.register`, which modifies the Node.js module resolution behavior globally.

### [low] dynamic module loading

Finding ID: `NPS-CA913E3E7500`

File: `dist/esm-cache.loader.mjs`

The code wraps dynamic import resolution (resolve/resolveSync) and rewrites the resolved module URL by appending a query parameter derived from the parent module's URL. While not inherently malicious, this behavior can be abused to inject identifiers into module URLs, potentially affecting module caching or loading behavior in unexpected ways.

### [low] URL manipulation

Finding ID: `NPS-68D5277CDB0E`

File: `dist/esm-cache.loader.mjs`

The function l() reads the 'id' search parameter from the parent module's URL and propagates it to the resolved module's URL. This could be used to influence how modules are cached or resolved, potentially enabling cache poisoning or module confusion if the 'id' parameter is attacker-controlled.

### [low] Global hook functions

Finding ID: `NPS-F92683864E03`

File: `dist/index.js`

The code checks for global functions `__tw_load` and `__tw_resolve` and uses them if present. These could be set by other code in the same process to hijack module resolution/loading.

### [low] File system access

Finding ID: `NPS-E52314487222`

File: `dist/index.js`

The code reads files, stats files, and accesses directories during module resolution. This is expected for a CSS build tool but could be used to probe the filesystem.

### [low] Environment variable access

Finding ID: `NPS-BA10881A4D95`

File: `dist/index.js`

It reads `process.env.DEBUG` and `process.env.NODE_PATH` for configuration. DEBUG is used for instrumentation reporting; NODE_PATH for module resolution. No credential harvesting detected.

## Files reviewed

- `dist/esm-cache.loader.mjs` (medium): The module dynamically rewrites resolved import URLs using a query parameter from the parent URL; no data exfiltration, credential harvesting, obfuscation, or command execution was detected, but the URL manipulation warrants caution.
- `dist/index.js` (medium): This is the Tailwind CSS v4 bundler code; it performs dynamic module loading and filesystem resolution which is expected but has security implications if inputs are untrusted.
- `dist/index.mjs` (safe): The code is a minified build artifact of the Tailwind CSS Node.js package, containing no malicious patterns such as data exfiltration, credential harvesting, or unauthorized code execution.
- `dist/require-cache.js` (safe): The file only provides a utility to clear Node.js require cache entries and contains no malicious patterns.

AI analysis is guidance, not a guarantee. Methodology: https://security.togoder.click/methodology
