
Remote Code Execution (RCE) im Yamcs Missionskontrollsystem durch Java Statement Injection in Yarch SQL-Double-Quoted-Identifiers
Nicht-weaponisierter Proof-of-Concept und technische Dokumentation für CVE-2026-55511, eine authentifizierte Java-Code-Injection-Schwachstelle im Yamcs StreamSQL-Aggregat-Ausdrucks-Compiler.
| Feld | Wert |
|---|---|
| Produkt | Yamcs (org.yamcs:yamcs-core) |
| Sicherheitshinweis | GHSA-3g44-3m7x-cgg2 |
| Schwachstelle | CWE-94: Unzureichende Kontrolle der Codeerzeugung |
| Schweregrad | Kritisch, CVSS 3.1: 9.1 |
| Vektor | CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:C/C:H/I:H/A:H |
| Erforderliche Berechtigung | SystemPrivilege.ControlArchiving |
| Behobene Versionen | Yamcs 5.13.2 und 5.12.8 |
| Hauptlinien-Patch | b65a3d78178ba99a58b753feda6ecc3b5a694f13 |
Yamcs akzeptiert doppelt-anführende Namen für StreamSQL-Objekte und erlaubt in betroffenen Versionen fast jedes Zeichen in diesen Namen. Aggregatausdrücke wie sum(...) konstruieren dynamisch Java-Quellcode unter Verwendung von Spaltennamen und kompilieren diesen mit Janino SimpleCompiler.
Der anfällige Code wendet nur eine minimale Namensbereinigung an, bevor ein Spaltenname in eine generierte Java-Kennung eingefügt wird. Ein authentifizierter Benutzer mit ControlArchiving kann daher einen manipulierten, in Anführungszeichen gesetzten Spaltennamen erstellen, über POST /api/archive/{instance}:executeSql den Aggregat-Compiler erreichen und von Angreifern beeinflusstes Java in der Yamcs-Server-JVM ausführen.
Dies überschreitet die beabsichtigte Yamcs-Autorisierungsgrenze: ControlArchiving erlaubt die Verwaltung von Archiven, Tabellen und Streams, gewährt aber nicht absichtlich die Ausführung beliebigen Java-Codes auf dem Server.
| Release-Linie | Betroffen | Behoben |
|---|---|---|
| 5.13.x | 5.13.1 und früher | 5.13.2 |
| 5.12.x | 5.12.7 und früher | 5.12.8 |
Aktualisieren Sie auf Yamcs 5.13.2, 5.12.8 oder eine neuere unterstützte Version.
Der anfällige Datenfluss ist:
POST /api/archive/{instance}:executeSql
-> TableApi.executeSql
-> Yarch StreamSQL parser
-> double-quoted object name
-> SelectExpression aggregate binding
-> SumExpression.aggregateFillCode_newData
-> Expression.fillCode_InputDefVars
-> CompilableAggregateExpression.getCompiledAggregate
-> Janino SimpleCompiler.cook
-> attacker-influenced Java executes in the Yamcs JVM
Drei Bedingungen kombinieren sich, um das Problem zu erzeugen:
S_DOUBLE_QUOTED_IDENTIFIER akzeptiert jedes Zeichen außer CR, LF und ".Expression.fillCode_InputDefVars leitet einen Java-Variablennamen aus dem Spaltennamen ab. Der Hilfsprogramm sanitizeName ersetzt nur / und -.Dies lässt Java-Syntaxzeichen wie Semikolons, Leerzeichen, Klammern, Zuweisungsoperatoren und Punkte in der generierten Methode newData(Tuple) verfügbar. Im Gegensatz zu einem Bare-Expression-Pfad bietet die Aggregatmethode einen erreichbaren Anweisungskontext, in dem injizierte Anweisungen kompiliert und ausgeführt werden können.
Die Ausnutzung erfordert ein authentifiziertes Konto mit SystemPrivilege.ControlArchiving. Ein Konto ohne diese Berechtigung wird von der Autorisierungsprüfung TableApi.executeSql abgelehnt.
Eine erfolgreiche Ausnutzung führt Java mit den Berechtigungen des Yamcs-Dienstprozesses aus. Abhängig von der Bereitstellungsisolation kann dies die Vertraulichkeit, Integrität und Verfügbarkeit von Missionsdaten und der Host-Umgebung beeinträchtigen. Das Problem ist keine nicht authentifizierte RCE und erhöht nicht von selbst die Berechtigungen des Yamcs-Prozesses über seine Betriebssystem- oder Containerberechtigungen hinaus.
Das enthaltene poc.py ist absichtlich nicht weaponisiert:
javac und java) für den harmlosen Markertestcd /path/to/yamcs
python3 /path/to/poc.py \
--json /tmp/evidence.json \
--log /tmp/crash_evidence.log \
--expect-crash
Erwartete Indikatoren:
source_chain_confirmed=true
generated_source_injection_present=true
marker_executed=true
evidence/evidence.json: strukturierte Quellketten- und Java-Modellergebnisseevidence/crash_evidence.log: prägnantes ValidierungsprotokollDer enthaltene Nachweis wurde gegen den Yamcs-Quellcommit 98a05e95461207c143e4297ec4bb1b5a76e9cb19 erstellt. Er bestätigt die anfällige Quellkette, die Injektion von generiertem Quellcode und die Ausführung des harmlosen Markers.
Der Upstream-Fix trägt den Titel Avoid RCE through double-quoted identifiers:
b65a3d78178ba99a58b753feda6ecc3b5a694f13, veröffentlicht in 5.13.28c1070b12c0a6c003903325cb2a1013347e2dbde, veröffentlicht in 5.12.8Die Kernänderung schränkt doppelt-anführende Bezeichner von einem fast uneingeschränkten Zeichensatz ein:
< S_DOUBLE_QUOTED_IDENTIFIER: "\"" (~["\n","\r","\""])* "\"" >
auf eine Freigabeliste von Buchstaben, Ziffern, $, _, # und .:
< S_DOUBLE_QUOTED_IDENTIFIER: "\"" (<LETTER> | <DIGIT> | <SPECIAL_CHARS>)+ "\"" >
Dies weist die anweisungstrennenden und ausdrucksbildenden Zeichen zurück, die für die gemeldete Injektion erforderlich sind, bevor der Name die Java-Codegenerierung erreicht. Der Patch aktualisiert auch generierte Parser-Dateien, Dokumentation und einen zugehörigen Test.
Die Einschränkung kann vorhandene in Anführungszeichen gesetzte Objektnamen beeinträchtigen, die Leerzeichen oder nicht erlaubte Satzzeichen enthalten. Überprüfen Sie StreamSQL-Schemata und Automatisierungen vor dem Upgrade oder Backport.
CVE-2026-55511 ist ein separater Einstiegspunkt von CVE-2026-44632 / GHSA-524g-x36v-9wm6. CVE-2026-44632 betrifft JavaExprAlgorithmExecutionFactory, wird durch die Funktionalität zum Überschreiben von Algorithmen der Missionsdatenbank erreicht und ist durch ChangeMissionDatabase geschützt.
Dieses Problem befindet sich in org.yamcs.yarch.streamsql, wird über executeSql erreicht und ist durch ControlArchiving geschützt. Die frühere 5.13.0 / 5.12.7 Algorithmus-Pfad-Korrektur hat den StreamSQL-Compiler oder seine Behandlung von in Anführungszeichen gesetzten Bezeichnern nicht geändert.
VULNERABILITY_REPORT.md: erweiterter SchwachstellenberichtPATCH_ANALYSIS.md: detaillierte Upstream-Patch-Analyse und KompatibilitätshinweiseVerwenden Sie dieses Material nur in Systemen, die Ihnen gehören oder für die Sie ausdrücklich zur Prüfung autorisiert sind.