Skip to main content

RUSTSEC-2023-0071 reviewed exception

Runtime reachability

The native broker resolves rsa 0.10.0-rc.18 only through krabka-security 0.7.0 -> krabka-sspi 0.23.0; krabka-sspi also reaches the same RSA crate through picky 7.0.0-rc.26. The RSA crate is therefore present in production binaries and cargo audit correctly reports it.

The advisory applies to attacker-observable timing of RSA PKCS#1 v1.5 private key decryption. The broker’s SSPI integration does not accept an RSA key or certificate. Its GSSAPI server loads AES-256 service keys from a keytab and calls the Kerberos acceptor; its inter-broker client loads an AES-256 principal key and calls the Kerberos initiator. RSA private-key operations belong to the SSPI PKINIT, PKU2U, smart-card, and certificate-key surfaces, none of which the broker constructs or exposes. Kafka network tokens can reach Kerberos ticket processing, but cannot select those other SSPI packages or supply an RSA private key. Consequently the vulnerable decryption oracle is not reachable in any currently supported broker authentication configuration.

Exception and regression boundary

krabka-security and krabka-client-core put SSPI behind an opt-in gssapi feature, so a default build of either compiles no rsa. The broker turns the feature on in crates/broker/Cargo.toml, because it serves GSSAPI and dials other brokers with it, so the broker binary still contains rsa and the exception stays. Removing RSA here would remove supported GSSAPI authentication or require a large fork of a sibling crate. Until upstream can isolate the dependency, the security workflow passes exactly --ignore RUSTSEC-2023-0071 to cargo audit, which ignores no other advisory, and deny.toml carries the same entry for cargo deny.

aspect check-rustsec-2023-0071 (.aspect/check_rustsec_2023_0071.axl) pins the reviewed versions of rsa, picky, krabka-sspi and krabka-security, resolves the graph with every feature enabled, and asserts the complete normal reverse edge at the vulnerable boundary: rsa <- {krabka-sspi, picky}, picky <- krabka-sspi, and krabka-sspi <- krabka-security. Any version or parent change fails CI and requires a fresh reachability review. Removal of any package also fails so the exception must be removed rather than becoming stale.

Residual risk and downstream coordination

The conclusion depends on the reviewed SSPI and security implementations, not on a constant-time guarantee in rsa. A future path that accepts certificate credentials, enables PKINIT/PKU2U or smart cards, or adds another RSA parent must not reuse this exception.

krabka-protocol made its GSSAPI dependency optional (krabka-protocol#71), and its docs/rustsec-2023-0071.md covers the client initiator as well. Coordinate with krabka-sspi to expose a Kerberos-only feature that excludes RSA, PKINIT, PKU2U, smart-card, and certificate-private-key code. Remove the audit exception and this version-pin check as soon as an RSA-free feature or patched upstream release is available.