CVE-2026-35582
Emissary has an OS Command Injection via Unvalidated IN_FILE_ENDING / OUT_FILE_ENDING in Executrix
Emissary is a P2P based data-driven workflow engine. In versions 8.42.0 and below, Executrix.getCommand() is vulnerable to OS command injection because it interpolates temporary file paths into a /bin/sh -c shell command string without any escaping or input validation. The IN_FILE_ENDING and OUT_FILE_ENDING configuration keys flow directly into these paths, allowing a place author who can write or modify a .cfg file to inject arbitrary shell metacharacters that execute OS commands in the JVM process's security context. The framework already sanitizes placeName via an allowlist before embedding it in the same shell string, but applies no equivalent sanitization to file ending values. No runtime privileges beyond place configuration authorship, and no API or network access, are required to exploit this vulnerability. This is a framework-level defect with no safe mitigation available to downstream implementors, as Executrix provides neither escaping nor documented preconditions against metacharacters in file ending inputs. This issue has been fixed in version 8.43.0.
Attack profile
How easy it is to exploit
- Attack vector
- Local
- Complexity
- Low
- Privileges needed
- Low
- User interaction
- None
What an attacker can affect
- Confidentiality
- High
- Integrity
- High
- Availability
- High
Exploit likelihood
What each source reports
CVE List Score used
8.8
Emissary has an OS Command Injection via Unvalidated IN_FILE_ENDING / OUT_FILE_ENDING in Executrix
Emissary is a P2P based data-driven workflow engine. In versions 8.42.0 and below, Executrix.getCommand() is vulnerable to OS command injection because it interpolates temporary file paths into a /bin/sh -c shell command string without any escaping or input validation. The IN_FILE_ENDING and OUT_FILE_ENDING configuration keys flow directly into these paths, allowing a place author who can write or modify a .cfg file to inject arbitrary shell metacharacters that execute OS commands in the JVM process's security context. The framework already sanitizes placeName via an allowlist before embedding it in the same shell string, but applies no equivalent sanitization to file ending values. No runtime privileges beyond place configuration authorship, and no API or network access, are required to exploit this vulnerability. This is a framework-level defect with no safe mitigation available to downstream implementors, as Executrix provides neither escaping nor documented preconditions against metacharacters in file ending inputs. This issue has been fixed in version 8.43.0.
- Record
CVE-2026-35582- CVSS 3.1
- 8.8 High
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H - Weakness
- CWE-78, CWE-116
- Updated
- 2026-11-02
EUVDEUVD-2026-23628
8.8
Emissary is a P2P based data-driven workflow engine. In versions 8.42.0 and below, Executrix.getCommand() is vulnerable to OS command injection because it interpolates temporary file paths into a /bin/sh -c shell command string without any escaping or input validation. The IN_FILE_ENDING and OUT_FILE_ENDING configuration keys flow directly into these paths, allowing a place author who can write or modify a .cfg file to inject arbitrary shell metacharacters that execute OS commands in the JVM process's security context. The framework already sanitizes placeName via an allowlist before embedding it in the same shell string, but applies no equivalent sanitization to file ending values. No runtime privileges beyond place configuration authorship, and no API or network access, are required to exploit this vulnerability. This is a framework-level defect with no safe mitigation available to downstream implementors, as Executrix provides neither escaping nor documented preconditions against metacharacters in file ending inputs. This issue has been fixed in version 8.43.0.
- Record
EUVD-2026-23628- CVSS 3.1
- 8.8 High
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H - Updated
- 2026-11-02
GitHub AdvisoriesGHSA-3p24-9x7v-7789
8.8
Emissary has an OS Command Injection via Unvalidated IN_FILE_ENDING / OUT_FILE_ENDING in Executrix
Summary
Executrix.getCommand() constructs shell commands by substituting temporary file paths directly into a /bin/sh -c string with no escaping. The IN_FILE_ENDING and OUT_FILE_ENDING configuration keys flow into those paths unmodified. A place author who sets either key to a shell metacharacter sequence achieves arbitrary OS command execution in the JVM's security context when the place processes any payload. No runtime privileges beyond place configuration authorship are required, and no API or network access is needed.
This is a framework-level defect — Executrix provides no escaping mechanism and no validation on file ending values. Downstream implementors have no safe way to use the API as designed.
Root Cause
Step 1 — IN_FILE_ENDING flows into temp path construction without validation
public TempFileNames(String tmpDir, String placeName, String inFileEnding, String outFileEnding) {
base = Long.toString(System.nanoTime());
tempDir = FileManipulator.mkTempFile(tmpDir, placeName);
in = base + inFileEnding; // no sanitization
out = base + outFileEnding; // no sanitization
basePath = tempDir + File.separator + base;
inputFilename = basePath + inFileEnding; // injected value lands here
outputFilename = basePath + outFileEnding; // and here
}
inFileEnding is concatenated directly onto a numeric base to produce inputFilename. No character class, no regex, no escaping.
Step 2 — The injected path is substituted verbatim into a shell string
public String[] getCommand(final String[] tmpNames, final String commandArg,
final int cpuLimit, final int vmSzLimit) {
String c = commandArg;
c = c.replaceAll("<INPUT_PATH>", tmpNames[INPATH]); // contains inFileEnding verbatim
c = c.replaceAll("<OUTPUT_PATH>", tmpNames[OUTPATH]);
c = c.replaceAll("<INPUT_NAME>", tmpNames[IN]);
c = c.replaceAll("<OUTPUT_NAME>", tmpNames[OUT]);
String ulimitv = "";
if (!SystemUtils.IS_OS_MAC) {
ulimitv = "ulimit -v " + vmSzLimit + "; ";
}
return new String[] {"/bin/sh", "-c",
"ulimit -c 0; " + ulimitv + "cd " + tmpNames[DIR] + "; " + c};
}
The final array element is passed to /bin/sh -c. Shell metacharacters in any substituted value are interpreted by the shell.
The identical pattern exists in the TempFileNames overload at Executrix.java:1103-1115.
Step 3 — setInFileEnding() and setOutFileEnding() perform no validation
public void setInFileEnding(final String argInFileEnding) {
this.inFileEnding = argInFileEnding; // accepted as-is
}
public void setOutFileEnding(final String argOutFileEnding) {
this.outFileEnding = argOutFileEnding; // accepted as-is
}
The same absence of validation applies to the IN_FILE_ENDING and OUT_FILE_ENDING keys read from configuration at Executrix.java:121-122.
Contrast: placeName is sanitized, file endings are not
The framework already sanitizes placeName using a strict allowlist:
// Executrix.java:78
protected static final Pattern INVALID_PLACE_NAME_CHARS = Pattern.compile("[^a-zA-Z0-9_-]");
// Executrix.java:148-150
protected static String cleanPlaceName(final String placeName) {
return INVALID_PLACE_NAME_CHARS.matcher(placeName).replaceAll("_");
}
placeName ends up in tmpNames[DIR], which is also embedded in the shell string. The sanitization of placeName demonstrates awareness that these values reach the shell — the…
- Record
GHSA-3p24-9x7v-7789- CVSS 3.1
- 8.8 High
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H - Weakness
- CWE-78, CWE-116
- Updated
- 2026-11-02
NVD
8.8
Emissary is a P2P based data-driven workflow engine. In versions 8.42.0 and below, Executrix.getCommand() is vulnerable to OS command injection because it interpolates temporary file paths into a /bin/sh -c shell command string without any escaping or input validation. The IN_FILE_ENDING and OUT_FILE_ENDING configuration keys flow directly into these paths, allowing a place author who can write or modify a .cfg file to inject arbitrary shell metacharacters that execute OS commands in the JVM process's security context. The framework already sanitizes placeName via an allowlist before embedding it in the same shell string, but applies no equivalent sanitization to file ending values. No runtime privileges beyond place configuration authorship, and no API or network access, are required to exploit this vulnerability. This is a framework-level defect with no safe mitigation available to downstream implementors, as Executrix provides neither escaping nor documented preconditions against metacharacters in file ending inputs. This issue has been fixed in version 8.43.0.
- Record
CVE-2026-35582- CVSS 3.1
- 8.8 High
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H - Weakness
- CWE-78, CWE-116
- Updated
- 2026-11-02
OSV
8.8
Emissary has an OS Command Injection via Unvalidated IN_FILE_ENDING / OUT_FILE_ENDING in Executrix
Emissary is a P2P based data-driven workflow engine. In versions 8.42.0 and below, Executrix.getCommand() is vulnerable to OS command injection because it interpolates temporary file paths into a /bin/sh -c shell command string without any escaping or input validation. The IN_FILE_ENDING and OUT_FILE_ENDING configuration keys flow directly into these paths, allowing a place author who can write or modify a .cfg file to inject arbitrary shell metacharacters that execute OS commands in the JVM process's security context. The framework already sanitizes placeName via an allowlist before embedding it in the same shell string, but applies no equivalent sanitization to file ending values. No runtime privileges beyond place configuration authorship, and no API or network access, are required to exploit this vulnerability. This is a framework-level defect with no safe mitigation available to downstream implementors, as Executrix provides neither escaping nor documented preconditions against metacharacters in file ending inputs. This issue has been fixed in version 8.43.0.
- Record
CVE-2026-35582- CVSS 3.1
- 8.8 High
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H - Weakness
- CWE-116, CWE-78
- Updated
- 2026-11-02
OSVGHSA-3p24-9x7v-7789
8.8
Emissary has an OS Command Injection via Unvalidated IN_FILE_ENDING / OUT_FILE_ENDING in Executrix
Summary
Executrix.getCommand() constructs shell commands by substituting temporary file paths directly into a /bin/sh -c string with no escaping. The IN_FILE_ENDING and OUT_FILE_ENDING configuration keys flow into those paths unmodified. A place author who sets either key to a shell metacharacter sequence achieves arbitrary OS command execution in the JVM's security context when the place processes any payload. No runtime privileges beyond place configuration authorship are required, and no API or network access is needed.
This is a framework-level defect — Executrix provides no escaping mechanism and no validation on file ending values. Downstream implementors have no safe way to use the API as designed.
Root Cause
Step 1 — IN_FILE_ENDING flows into temp path construction without validation
public TempFileNames(String tmpDir, String placeName, String inFileEnding, String outFileEnding) {
base = Long.toString(System.nanoTime());
tempDir = FileManipulator.mkTempFile(tmpDir, placeName);
in = base + inFileEnding; // no sanitization
out = base + outFileEnding; // no sanitization
basePath = tempDir + File.separator + base;
inputFilename = basePath + inFileEnding; // injected value lands here
outputFilename = basePath + outFileEnding; // and here
}
inFileEnding is concatenated directly onto a numeric base to produce inputFilename. No character class, no regex, no escaping.
Step 2 — The injected path is substituted verbatim into a shell string
public String[] getCommand(final String[] tmpNames, final String commandArg,
final int cpuLimit, final int vmSzLimit) {
String c = commandArg;
c = c.replaceAll("<INPUT_PATH>", tmpNames[INPATH]); // contains inFileEnding verbatim
c = c.replaceAll("<OUTPUT_PATH>", tmpNames[OUTPATH]);
c = c.replaceAll("<INPUT_NAME>", tmpNames[IN]);
c = c.replaceAll("<OUTPUT_NAME>", tmpNames[OUT]);
String ulimitv = "";
if (!SystemUtils.IS_OS_MAC) {
ulimitv = "ulimit -v " + vmSzLimit + "; ";
}
return new String[] {"/bin/sh", "-c",
"ulimit -c 0; " + ulimitv + "cd " + tmpNames[DIR] + "; " + c};
}
The final array element is passed to /bin/sh -c. Shell metacharacters in any substituted value are interpreted by the shell.
The identical pattern exists in the TempFileNames overload at Executrix.java:1103-1115.
Step 3 — setInFileEnding() and setOutFileEnding() perform no validation
public void setInFileEnding(final String argInFileEnding) {
this.inFileEnding = argInFileEnding; // accepted as-is
}
public void setOutFileEnding(final String argOutFileEnding) {
this.outFileEnding = argOutFileEnding; // accepted as-is
}
The same absence of validation applies to the IN_FILE_ENDING and OUT_FILE_ENDING keys read from configuration at Executrix.java:121-122.
Contrast: placeName is sanitized, file endings are not
The framework already sanitizes placeName using a strict allowlist:
// Executrix.java:78
protected static final Pattern INVALID_PLACE_NAME_CHARS = Pattern.compile("[^a-zA-Z0-9_-]");
// Executrix.java:148-150
protected static String cleanPlaceName(final String placeName) {
return INVALID_PLACE_NAME_CHARS.matcher(placeName).replaceAll("_");
}
placeName ends up in tmpNames[DIR], which is also embedded in the shell string. The sanitization of placeName demonstrates awareness that these values reach the shell — the…
- Record
GHSA-3p24-9x7v-7789- CVSS 3.1
- 8.8 High
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H - Weakness
- CWE-116, CWE-78
- Updated
- 2026-11-04
OSVopenSUSE-SU-2026:10540-1 No score
Botan-3.11.1-1.1 on GA media
These are all security issues fixed in the Botan-3.11.1-1.1 package on the GA media of openSUSE Tumbleweed.
- Record
openSUSE-SU-2026:10540-1- Updated
- 2026-11-02
OSVUBUNTU-CVE-2026-35582 No score
[Unknown description]
- Record
UBUNTU-CVE-2026-35582- Updated
- 2026-11-02
Affected products
Affected packages
| Package | Affected | Fixed |
|---|---|---|
gov.nsa.emissary:emissaryMaven |
through 8.42.0 | 8.43.0 |
gov.nsa.emissary:emissaryMaven |
before 8.43.0, plus listed versions 8.0.08.1.08.10.08.11.08.11.1 Show 41 moreShow less8.12.08.13.08.14.08.15.08.16.08.17.08.18.08.19.08.19.18.2.08.20.08.21.08.22.08.23.08.24.08.25.08.26.08.27.08.28.08.29.08.3.08.30.08.31.08.32.08.33.08.34.08.35.08.36.08.37.08.38.08.39.08.4.08.40.08.41.08.42.08.5.08.6.08.7.08.7.18.8.08.9.0 |
8.43.0 |
BotanopenSUSE:Tumbleweed From an advisory covering 2 CVEs |
before 3.11.1-1.1 | 3.11.1-1.1 |
History
| Recorded | Changed | Sources |
|---|---|---|
| affected | ||
| facts, references | OSV | |
| affected | ||
| first indexed | CVE List, EUVD, GitHub Advisories, NVD, OSV |
Dates are when Every CVE recorded each change. Upstream dates may differ.
In short
CVE-2026-35582 is a high vulnerability (CVSS 8.8) in Nationalsecurityagency Emissary, published April 3, 2026. No source lists public exploit code. EPSS puts the chance of exploitation in the next 30 days at 0.86%, the 58th percentile. Fixed in gov.nsa.emissary:emissary 8.43.0.
References
github.com/NationalSecurityAgency/emissary/security/advisories/GHSA-3p24-9x7v-7789
github.com/NationalSecurityAgency/emissary/commit/1faf33f2494c0128f250d7d2e8f2da99bbd32ae8
nvd.nist.gov/vuln/detail/CVE-2026-35582
github.com/advisories/GHSA-3p24-9x7v-7789
github.com/CVEProject/cvelistV5/tree/main/cves/2026/35xxx/CVE-2026-35582.json
security-tracker.debian.org/tracker/CVE-2026-35582
Show 7 moreShow less
Left out here: the rest of 2 source descriptions. The JSON record has them.