Repository navigation
Reject empty required client certificates - #170
Conversation
|
Review cycle round 1: clean review. I traced both server handshake state machines and the certificate-required configuration, including the optional-client-auth paths. Both packet-driven empty-certificate regressions pass ( |
|
Review cycle round 2: clean review of the full PR at a958b4f. The DTLS 1.3 alert uses epoch 3 after server Finished, when application keys are installed; the packet-driven test confirms the client decrypts certificate_required. Both server paths abort pending flights, close, and emit the specified fatal alert on a parsed empty Certificate. The four focused required/optional certificate tests pass. I found no actionable gap. |
|
Related downstream PR: algesten/str0m#1067 This landed fix addresses the empty-client-certificate vulnerability described in str0m PR 1067. All five dimpl-based str0m backends retain the default Verified locally at the landed commit str0m currently depends on dimpl 0.7.4. The 0.7.5 tag predates this fix, so str0m needs a release containing PR 170 before a version bump resolves the reported vulnerability. PR 1067 remains useful defense in depth against a backend emitting connection/keying-material events without a peer certificate. |
## Summary Raise the workspace dependency requirements for dimpl from 0.7.4 to 0.7.6 and sctp-proto from 0.10.5 to 0.10.6, and update Cargo.lock. All workspace crates inherit the updated requirements. dimpl 0.7.6 includes [algesten/dimpl#170](algesten/dimpl#170), which rejects empty client Certificate messages when client authentication is required in DTLS 1.2 and 1.3. str0m retains that requirement in every dimpl backend. A certificate-less peer therefore cannot complete the handshake and bypass the SDP fingerprint check as described in #1067. The upstream fix includes packet-driven regression tests for both protocol versions. This fixes the reported vulnerability and supersedes the proposed fix in #1067. That PR adds a broader str0m-level defense against a backend emitting Connected or keying material without PeerCert; this dependency bump fixes the underlying dimpl behavior instead. Closes #1067.
Summary
require_client_certificate(true)when a client sends an empty Certificate message in DTLS 1.2 or 1.3.handshake_failure(DTLS 1.2) orcertificate_required(DTLS 1.3) alert.