Skip to content
Security & Trust

Hugo update fixes ways an untrusted theme could pull files into a site

Static sites run no code for visitors, but the build step still trusts every theme and module it loads.

W
WebPulse Newsroom
AI-assisted · 4 min read
Share on X LinkedIn
Hugo update fixes ways an untrusted theme could pull files into a site

AI-generated image for WebPulse. About our images

Key finding

Hugo CVEs recorded in NIST NVD: 9 total, 8 in the last 12 months (Source: WebPulse analysis of NIST NVD, CPE-matched (refreshed September 29, 2026))

A static website feels safe because nothing runs when a visitor arrives. The pages are built in advance. But the build itself is a place where code and files meet, and that is where the latest Hugo release spends its security effort.

What Hugo fixed

Hugo is an open-source tool that builds websites from templates and themes. Its maintainers released v0.167.0 on September 28, 2026. The release notes describe several hardening fixes. They say none are known to be exploited. They add that anyone who builds sites with untrusted themes or modules should upgrade.

Four of the fixes show the pattern. First, the Sass compiler, which turns style files into CSS, resolved some imports on its own and followed symlinks (file shortcuts). A theme could import a file from outside the project and get its content into the published CSS.

Second, the ESBuild JavaScript tool did the same for imports not found in the assets folder. Third, a symlinked directory in a theme could expose files outside the module. Fourth, explicit heading IDs went unescaped into the table of contents links, which allowed what the notes call attribute breakout.

Hugo now checks these imports against its own list of allowed read locations. The release does not say any site leaked anything.

The risk sits in the build, not the server

This shows where the trust decision lives. A theme is not a picture on a page. It is closer to a contractor given a key to your office so they can decorate. Most will stay in the rooms they were hired for. The fixes exist because a theme could reach past them.

The exit route matters too. The build output is public. In the Sass case, a file read during the build could end up in a stylesheet anyone can download. Teams that count a static site as low risk may not have asked what the build machine can read.

9 total, 8 in the last 12 months
Hugo CVEs recorded in NIST NVD
Source: WebPulse analysis of NIST NVD, CPE-matched (refreshed September 29, 2026)
0
Hugo entries in CISA's Known Exploited Vulnerabilities catalog
Source: WebPulse analysis of NIST NVD and CISA KEV (refreshed September 29, 2026)

Read these counts with care. They are Hugo's own totals and say nothing about how it compares with other tools. The release notes give no CVE IDs for these fixes, so the counts may or may not include them. The zero KEV count fits the maintainers' statement that none of the fixes are known to be exploited.

Upgrade changes to test first

The release also changes behavior that could surprise a working site. The default baseURL is now https://example.org/ instead of empty. The maintainers say this mostly affects new and test sites. Sites that relied on the empty default for relative URLs must set it explicitly.

The root cleanDestinationDir setting is deprecated in favour of build.cleanDestinationDir.enable. Files named .git in the publish directory are now kept by default. The eq function now treats 1 and 1.0 as equal. Automatic page summaries may change for some pages.

None known exploited
Hugo release v0.167.0 security statement
Source: gohugoio/hugo release notes, GitHub (September 28, 2026)

Questions for your team

Who approves the themes and modules our sites pull in, and does anyone review them after the first install?

What files can our build machines read? Do they hold credentials that a theme should never see?

Do any of our sites depend on the empty baseURL, the old cleanup setting or the old eq behavior? Who tests these before we upgrade?

A site with no live code is not a site with no trust decisions. The decision simply moves to the build, and someone should own it.

Produced by the WebPulse Newsroom with AI assistance from the original reporting credited below, and checked against that source by our editorial review. How we use AI.
Original reporting: GitHub (gohugoio/hugo).

Share this insight