CVE-2026-75926: Hugo 0.162.0 to 0.164.x - Node Permission Model Bypass via Default TailwindCSS Child-Process Grant
Hugo 0.161.0 placed the Node asset pipelines behind the Node.js permission model so that code running through PostCSS, Babel, or TailwindCSS could not reach the file system outside the project directory. Hugo 0.162.0 added tailwindcss to the AllowChildProcess default in config/security/securityConfig.go, which makes nodePermissionArgs in common/hexec/exec.go append --allow-child-process whenever the tool being launched is named tailwindcss. TailwindCSS loads the site's tailwind.config.js through require at startup, so top-level code in that file executes inside the permitted Node process and can call childprocess to spawn a shell. The spawned process is not a Node process and inherits none of the permission flags, so it runs with the full privileges of the account performing the build. Building a site whose theme, module, or starter template supplies the Tailwind configuration therefore yields arbitrary command execution rather than the confined file access the permission model was introduced to enforce. Hugo 0.165.0 removes tailwindcss from the default security.exec.allow list, so the tool is no longer launched under the default configuration.
Affected Software
Remediation
Recommended actions to resolve this vulnerability, in priority order.
- Upgrade
Upgrade
Hugoto a version that resolves this vulnerability.Fixed in 0.165.0 - Configuration
Update Hugo to at least 0.165.0, where tailwindcss is removed from the default security.exec.allow list so it is no longer launched with the default TailwindCSS child-process grant.
Hugo securityConfig.go (Node permission model allow list) security.exec.allow (default) = Remove tailwindcss from the default security.exec.allow list
Event History
Frequently Asked Questions
Which build environments are realistically exposed?
Builds using Hugo 0.162.0 through 0.164.x are exposed when they invoke TailwindCSS and load a Tailwind configuration supplied by a site, theme, module, or starter template. The resulting command execution runs with the privileges of the account performing the build.
What must an attacker control to exploit this?
An attacker needs to introduce JavaScript into a tailwind.config.js file that is loaded during the build, such as through a malicious or untrusted theme, module, or starter template. A user must then build the affected site with TailwindCSS.
Is the default configuration affected?
Yes. In the affected releases, tailwindcss is included in the default security.exec.allow list, causing Hugo to grant the Node child-process permission when launching it. Hugo 0.165.0 removes tailwindcss from that default list.
What can be done before an upgrade is available?
Upgrade to Hugo 0.165.0. If upgrading is not immediately possible, ensure tailwindcss is not present in the effective security.exec.allow configuration, and avoid building projects that use untrusted Tailwind configurations.
How can I assess whether my environment is at risk or may have been affected?
Check the Hugo version, the effective security.exec.allow list, and whether builds load tailwind.config.js files from themes, modules, or templates. The available information does not provide host-level indicators that would confirm whether a prior build was exploited.