|
During zero DDS evaluation we have found a possible security issue described in the annexed report. |
Replies: 1 comment
|
Thank you again, @swarm59, for tracing this across the PKI, security-profile, runtime, and participant-creation layers. You were exactly right: the identity-adjusted GUID prefix was computed correctly, but the public Rust participant path did not actually apply it to the participant announced on the wire.
This is fixed on Your report also exposed a deeper architectural problem: the security GUID requirement was enforced only by convention and differed between entry points. The C API already passed an adjusted prefix in one path, while the public Rust API did not, and a caller constructing The follow-up therefore added a fail-closed invariant at the common The regression coverage uses real OpenSSL identities and signed governance/permissions material, constructs participants through the public Rust factory path, independently recomputes the §9.3.3 prefix, verifies the prefix announced by the runtime, and confirms that two secured participants complete discovery. Separate tests cover unsecured, missing-prefix, mismatched-prefix, matching-prefix, and secured-FFI construction cases. One evidence boundary is worth stating explicitly: these regressions prove the public ZeroDDS API wiring and the on-wire §9.3.3 value. We are not presenting the public GitHub Actions run alone as a fresh live CycloneDDS or Fast DDS handshake for this exact pure-Rust construction path; that remains separate cross-vendor interoperability evidence. The complete public I am closing this discussion as fixed. If a secured participant created through current Your continued careful review has helped us turn a single missing assignment into an invariant that now protects every secured participant-creation path. |
Thank you again, @swarm59, for tracing this across the PKI, security-profile, runtime, and participant-creation layers. You were exactly right: the identity-adjusted GUID prefix was computed correctly, but the public Rust participant path did not actually apply it to the participant announced on the wire.
SecurityProfile::from_filesstored the §9.3.3-adjusted GUID, whileRuntimeConfig::with_security_bundleinitially copied only the security gate.DomainParticipant::new_with_runtimetherefore fell back to a random GUID prefix. A conforming peer can reject that participant because the GUID inc.pdatais not derived from the identity certificate, preventing secured discovery from completing.T…