Currently the security keystores created by ros2 security use a single CA symlinked as both Identity CA and Permissions CA. This opens a security hole where a malicious node can sign its own permissions document:
- The node creates a new
permissions.xml and signs it with its own enclave certificate and private key.
- The node publishes the signed document over DDS as usual.
- Other nodes attempt to verify the signature; since the enclave certificate is signed by the Identity CA, and the Identity CA is the same as the Permissions CA, the signature is accepted.
I don't believe it is possible to work around this with certificate flags; the enclave certificate must have the digitalSignature flag in order to be able to participate in Secure DDS. The solution is to separate the two CA roles into different certificates.
Currently the security keystores created by
ros2 securityuse a single CA symlinked as both Identity CA and Permissions CA. This opens a security hole where a malicious node can sign its own permissions document:permissions.xmland signs it with its own enclave certificate and private key.I don't believe it is possible to work around this with certificate flags; the enclave certificate must have the
digitalSignatureflag in order to be able to participate in Secure DDS. The solution is to separate the two CA roles into different certificates.