
Esecuzione di codice remoto (RCE) nel sistema di controllo missione Yamcs tramite iniezione di statement Java negli identificatori SQL tra virgolette doppie di YarchEsecuzione di codice remoto (RCE) nel sistema di controllo missione Yamcs tramite iniezione di statement Java negli identificatori SQL tra virgolette doppie di Yarch
Proof of concept non armato e documentazione tecnica per CVE-2026-55511, una vulnerabilità autenticata di iniezione di codice Java nel compilatore di espressioni aggregate di Yamcs StreamSQL.
| Campo | Valore |
|---|---|
| Prodotto | Yamcs (org.yamcs:yamcs-core) |
| Advisory | GHSA-3g44-3m7x-cgg2 |
| Debolezza | CWE-94: Controllo improprio della generazione di codice |
| Gravità | Critica, CVSS 3.1: 9.1 |
| Vettore | CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:C/C:H/I:H/A:H |
| Privilegio richiesto | SystemPrivilege.ControlArchiving |
| Versioni corrette | Yamcs 5.13.2 e 5.12.8 |
| Patch principale | b65a3d78178ba99a58b753feda6ecc3b5a694f13 |
Yamcs accetta nomi tra doppi apici per gli oggetti StreamSQL e, nelle versioni interessate, consente quasi qualsiasi carattere all'interno di tali nomi. Espressioni aggregate come sum(...) costruiscono dinamicamente codice sorgente Java utilizzando i nomi delle colonne e compilano tale sorgente con Janino SimpleCompiler.
Il codice vulnerabile applica solo una sanificazione minima dei nomi prima di inserire un nome di colonna in un identificatore Java generato. Un utente autenticato con ControlArchiving può quindi creare un nome di colonna tra apici appositamente costruito, raggiungere il compilatore di espressioni aggregate tramite POST /api/archive/{instance}:executeSql ed eseguire Java influenzato dall'attaccante all'interno della JVM del server Yamcs.
Questo oltrepassa il confine di autorizzazione previsto da Yamcs: ControlArchiving consente la gestione di archivi, tabelle e stream, ma non concede intenzionalmente l'esecuzione arbitraria di codice Java sul server.
| Linea di rilascio | Interessate | Corretta |
|---|---|---|
| 5.13.x | 5.13.1 e precedenti | 5.13.2 |
| 5.12.x | 5.12.7 e precedenti | 5.12.8 |
Aggiornare a Yamcs 5.13.2, 5.12.8 o a una release supportata successiva.
Il flusso di dati vulnerabile è:
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
Tre condizioni si combinano per creare il problema:
S_DOUBLE_QUOTED_IDENTIFIER accetta qualsiasi carattere eccetto CR, LF e ".Expression.fillCode_InputDefVars deriva un nome di variabile Java dal nome della colonna. Il suo helper sanitizeName sostituisce solo / e -.Ciò lascia disponibili caratteri di sintassi Java come punti e virgola, spazi bianchi, parentesi, operatori di assegnazione e punti nel metodo generato newData(Tuple). A differenza di un percorso a espressione nuda, il metodo aggregato fornisce un contesto di istruzioni raggiungibile in cui le istruzioni iniettate possono essere compilate ed eseguite.
Lo sfruttamento richiede un account autenticato in possesso di SystemPrivilege.ControlArchiving. Un account senza tale privilegio viene rifiutato dal controllo di autorizzazione di TableApi.executeSql.
Uno sfruttamento riuscito esegue Java con i privilegi del processo di servizio Yamcs. A seconda dell'isolamento di deployment, ciò può compromettere la riservatezza, l'integrità e la disponibilità dei dati di missione e dell'ambiente host. Il problema non è una RCE non autenticata e di per sé non eleva il processo Yamcs oltre i permessi del sistema operativo o del container.
Il file poc.py incluso è intenzionalmente non armato:
javac e java) per il test benigno del marcatorecd /path/to/yamcs
python3 /path/to/poc.py \
--json /tmp/evidence.json \
--log /tmp/crash_evidence.log \
--expect-crash
Indicatori attesi:
source_chain_confirmed=true
generated_source_injection_present=true
marker_executed=true
evidence/evidence.json: risultati strutturati di catena sorgente e modello Javaevidence/crash_evidence.log: log di validazione concisoLe evidenze incluse sono state prodotte contro il commit del sorgente Yamcs 98a05e95461207c143e4297ec4bb1b5a76e9cb19. Confermano la catena sorgente vulnerabile, l'iniezione nel sorgente generato e l'esecuzione del marcatore benigno.
La correzione a monte è intitolata Avoid RCE through double-quoted identifiers:
b65a3d78178ba99a58b753feda6ecc3b5a694f13, rilasciata in 5.13.28c1070b12c0a6c003903325cb2a1013347e2dbde, rilasciata in 5.12.8La modifica principale restringe gli identificatori tra doppi apici da un set di caratteri quasi illimitato:
< S_DOUBLE_QUOTED_IDENTIFIER: "\"" (~["\n","\r","\""])* "\"" >
a una lista consentita di lettere, cifre, $, _, # e .:
< S_DOUBLE_QUOTED_IDENTIFIER: "\"" (<LETTER> | <DIGIT> | <SPECIAL_CHARS>)+ "\"" >
Questo respinge i caratteri di separazione delle istruzioni e di costruzione delle espressioni richiesti dall'iniezione segnalata, prima che il nome raggiunga la generazione del codice Java. La patch aggiorna anche i file parser generati, la documentazione e un test correlato.
La restrizione può influire sui nomi di oggetti quotati esistenti contenenti spazi o punteggiatura non in lista. Rivedere gli schemi StreamSQL e l'automazione prima di aggiornare o applicare il backport.
CVE-2026-55511 è un punto di ingresso separato da CVE-2026-44632 / GHSA-524g-x36v-9wm6. CVE-2026-44632 riguarda JavaExprAlgorithmExecutionFactory, viene raggiunto tramite la funzionalità di override degli algoritmi del mission database ed è protetto da ChangeMissionDatabase.
Questo problema si trova in org.yamcs.yarch.streamsql, viene raggiunto tramite executeSql ed è protetto da ControlArchiving. La precedente correzione del percorso algoritmi in 5.13.0 / 5.12.7 non ha modificato il compilatore StreamSQL né la sua gestione degli identificatori quotati.
VULNERABILITY_REPORT.md: report di vulnerabilità estesoPATCH_ANALYSIS.md: analisi dettagliata della patch a monte e note di compatibilitàUtilizza questo materiale solo su sistemi di tua proprietà o per i quali hai ricevuto esplicita autorizzazione al test.