CVE-2026-35583: Emissary has a Path Traversal via Blacklist Bypass in Configuration API
Summary
The configuration API endpoint (/api/configuration/{name}) validated configuration names using a blacklist approach that checked for \, /, .., and trailing .. This could potentially be bypassed using URL-encoded variants, double-encoding, or Unicode normalization to achieve path traversal and read configuration files outside the intended directory.
Details
Vulnerable code — Configs.java (line 126)
java protected static String validate(String config) { if (StringUtils.isBlank(config) || config.contains("\\") || config.contains("/") || config.contains("..") || config.endsWith(".")) { throw new IllegalArgumentException("Invalid config name: " + config); } return Strings.CS.appendIfMissing(config.trim(), CONFIGFILEENDING); }
Weakness
The blacklist blocked literal \, /, .., and trailing . but could potentially miss:
- URL-encoded variants (%2e%2e%2f) if decoded after validation - Double-encoded sequences (%252e%252e%252f) - Unicode normalization bypasses - The approach relies on string matching rather than canonical path resolution
Impact
- Potential read access to configuration files outside the intended config directory - Information disclosure of sensitive configuration values
Remediation
Fixed in PR #1292, merged into release 8.39.0.
The blacklist was replaced with an allowlist regex that only permits characters matching ^[a-zA-Z0-9.-]+$:
java protected static final Pattern VALIDCONFIGNAME = Pattern.compile("^[a-zA-Z0-9.-]+$");
protected static String validate(String config) { if (!VALIDCONFIGNAME.matcher(config).matches() || config.contains("..") || config.endsWith(".")) { throw new IllegalArgumentException("Invalid config name: " + config); } return Strings.CS.appendIfMissing(config.trim(), CONFIGFILEENDING); }
This ensures that any character outside the allowed set — including encoded slashes, percent signs, and Unicode sequences — is rejected before the config name reaches the filesystem.
Tests were added to verify that URL-encoded (%2e%2e%2f), double-encoded (%252e%252e%252f), and Unicode (U+002F) traversal attempts are blocked.
Workarounds
If upgrading is not immediately possible, deploy a reverse proxy or WAF rule that rejects requests to /api/configuration/ containing encoded path traversal sequences.
References
- PR #1292 — validate config name with an allowlist - Original report: GHSA-wjqm-p579-x3ww
Other sources
Emissary is a P2P based data-driven workflow engine. Prior to 8.39.0, the configuration API endpoint (/api/configuration/{name}) validated configuration names using a blacklist approach that checked for \, /, .., and trailing .. This could potentially be bypassed using URL-encoded variants, double-encoding, or Unicode normalization to achieve path traversal and read configuration files outside the intended directory. This vulnerability is fixed in 8.39.0.
— MITRE
Affected Software
Event History
Frequently Asked Questions
What is the severity of CVE-2026-35583?
CVE-2026-35583 is classified as a critical severity vulnerability due to its potential for path traversal attacks.
How do I fix CVE-2026-35583?
To resolve CVE-2026-35583, upgrade the Emissary software to version 8.39.0 or later.
Which versions are affected by CVE-2026-35583?
CVE-2026-35583 affects Emissary versions up to and including 8.38.0.
What types of attacks can CVE-2026-35583 facilitate?
CVE-2026-35583 can facilitate path traversal attacks, allowing unauthorized access to file paths.
Is there a workaround for CVE-2026-35583?
There is no official workaround for CVE-2026-35583; the recommended action is to apply the software update.