GOV.NSA.EMISSARY:EMISSARY · CVE-2026-35571 · Package
FIX → 8.39.0
Emissary's navigation template rendered configured link values into href attributes without checking the URL scheme. An administrator who can edit navItems can store a javascript: link that runs script in the browser of other signed-in users who click it, enabling cookie theft and actions as the victim.
first public Apr 6, 2026 · 1 source
Check it with your coding agent
It checks your repository and tells you if you’re affected, with the fix.
Teams running the Emissary web interface where administrators can edit navigation configuration. The risk needs an admin account to plant the link and a logged-in user to click it. Deployments that never edit navItems, or that only use http, https or relative links, are lower risk.
Not affected if default-config, no-admin-navitems-edits
Who cares cwe-79, emissary, java, maven, self-hosted
8.39.0; releases up to and including 8.38.0 are affected.navItems configuration for any link value that is not http://, https://, or a / relative path.Mustache navigation templates interpolated configuration-controlled link values
directly into href attributes without URL scheme validation. An administrator
who could modify the navItems configuration could inject javascript: URIs,
enabling stored cross-site scripting (XSS) against other authenticated users
viewing the Emissary web interface.
nav.mustache (line 10){{#navItems}}
<li class="nav-item">
<a class="nav-link" href="{{link}}">{{display}}</a>
</li>
{{/navItems}}
The {{link}} value was rendered without any scheme validation. Mustache's
default HTML escaping protects against injection of new HTML tags but does
not prevent javascript: URIs in attributes, since
contains no characters that HTML-escaping would alter.
Are you affected?
Tell InfraStack what you run. It checks this one, and every next one, against your stack.
Ask from here. InfraStack checks the affected versions against your stack and answers in your inbox.
InfraStack checks the affected versions against your stack and answers in Slack, with the evidence and the fix.
Upgrade to 8.39.0
8.39.0 or later.hrefjavascript:An administrator sets a navigation item's link to:
javascript:alert(document.cookie)
Any authenticated user who clicks the navigation link executes the script in their browser context.
navItems
configurationFixed in PR #1293, merged into release 8.39.0.
NavAction.javaAn allowlist regex was added that only permits http://, https://, or
site-relative (/) URLs:
private static final Pattern VALID_LINK = Pattern.compile("^(https?:/)?/.*");
private static boolean isValidLink(String link) {
if (!VALID_LINK.matcher(link).matches()) {
logger.warn("Skipping invalid navigation link '{}'", link);
return false;
}
return true;
}
Invalid links are logged and silently dropped from the rendered navigation.
nav.mustacheAdded rel="noopener noreferrer" to all navigation link anchor tags as a
defense-in-depth measure:
<a class="nav-link" href="{{link}}" rel="noopener noreferrer">{{display}}</a>
Tests were added to verify that javascript: and ftp:// URIs are rejected
while http://, https://, and site-relative (/path) links are accepted.
If upgrading is not immediately possible, audit the navigation configuration
to ensure all navItems link values use only http://, https://, or
relative (/) URL schemes.
This page as .md · .json · CVSS:3.1/AV:N/AC:L/PR:H/UI:R/S:C/C:L/I:L/A:N
GitHub Advisory Database, CC-BY 4.0. Posts quoted belong to their authors.