Summary
Yamcs's WebSocket subscription handlers omit the privilege checks their REST siblings enforce
Advisory details
Asset / scope: Yamcs 5.12.7 WebSocket topics (packets, algorithm-status, mdb-changes)
Summary
Several WebSocket subscription handlers do not perform the privilege check that their REST counterparts enforce, so a principal subscribing over WebSocket receives data the REST API would have scoped or denied.
Root cause
packets(PacketsApi.subscribePackets) performs noReadPacketcheck, while the REST siblings do (listPackets:128,streamPackets:256,subscribeContainers:538). A principal with a narrowReadPacketscope receives the raw binary of all TM packets on the processor.algorithm-status(ProcessingApi.subscribeAlgorithmStatus) performs no check, while RESTgetAlgorithmStatusenforcescheckObjectPrivileges(ReadAlgorithm, ...)(:467).mdb-changes(MdbOverrideApi.subscribeMdbChanges) performs no check, while base MDB reads requireGetMissionDatabase.
Remediation
Bring each WebSocket subscription handler to parity with its REST sibling's privilege check
(ReadPacket, ReadAlgorithm, GetMissionDatabase). This is the same declarative fail-closed fix as
Report 1.
Supporting material
Subsystem source audit of the WS-vs-REST authorization parity. Available on request.
--
Disclosure and credit
This was found by Cipher / Causal Security - https://causalsecurity.com/. We are coordinating disclosure via this report and request CVEs where you agree they qualify. We propose the 90-day window stated in your security policy. We might publish a write-up after a fix and the agreed window.
References
- https://github.com/advisories/GHSA-fwww-cp23-7f5g
- https://github.com/yamcs/yamcs/security/advisories/GHSA-fwww-cp23-7f5g
- https://github.com/yamcs/yamcs/commit/0691731846c5a0aca81b88fabbd2cd51d56fe076
- https://github.com/yamcs/yamcs/commit/12864af555e6ca4941b01c1f1217859cc0492ce0
- https://github.com/yamcs/yamcs/releases/tag/yamcs-5.12.8
- https://github.com/yamcs/yamcs/releases/tag/yamcs-5.13.2
Related vulnerabilities
All Supply chain →- CRITICALCVE-2026-73842
OpenChoreo: cluster-gateway internal proxy performs no caller authentication and is not read-only — data-plane Secret disclosure and arbitrary Kubernetes mutation
- HIGHCVE-2026-72795
SiYuan: Embedded (transclusion) block content is returned without publish-access filtering, leaking private and password-protected document content to anonymous readers
- MEDIUMCVE-2026-72796
SiYuan: Static-file routes bypass the publish-access controls enforced on the REST API, exposing templates, snippets and export artifacts to anonymous readers
- MEDIUMCVE-2026-72797
SiYuan: getEncryptedNotebookStatus discloses names and current lock/unlock state of all encrypted notebooks to anonymous readers
- HIGHCVE-2026-72798
SiYuan: Publish-access filter on renderAttributeView leaves related-database content unfiltered and fails open on non-block first columns
- MEDIUMCVE-2026-72799
SiYuan: Missing publish-access filter on the HPath/path-resolution endpoints discloses the private document tree to anonymous readers