There's this note for CVE-2021-3449:
> A server is only vulnerable if it has TLSv1.2 and renegotiation enabled (which is the default configuration).
Disabling client-initiated renegotiation is a standard security measure checked by internet.nl for web/mail servers.
Conversation
Client-initiated renegotiation is disabled by default in nginx since November 2009. It should be disabled elsewhere too and should really be disabled by default in a future major version OpenSSL. It's unnecessary attack surface and has been known to be for a very long time.
3
2
7
Curious, why does github.com/terorie/cve-20 then crash nginx? I also though that disabling client initiated reneg should be enough, can you shed some light on this ?
2
2
I just connected to a modern NGINX server with fairly stock config using “s_client -tls1_2 -connect” and it reports renegotiation is supported. Weird.
1
I would suspect that to refer to server renegotiation though. Can you run ssllabs (ssllabs.com/ssltest/) against that instance? I probably looks like the attached photo
2
1
My guess is that to be protected one needs to set SSL_OP_NO_RENEGOTIATION which is not the nginx default.
mailman.nginx.org/pipermail/ngin
Instead, I think nginx by default cancels renegotiation via SSL_CTX_set_info_callback, which is too late.
2
1
6
There was also this follow up: github.com/nginx/nginx/co So I think every new nginx should have SSL_OP_NO_RENEGOTIATION set by default (if compiled against new enough openssl), which makes me think that there is no way to disable renegotiation in a way that prevents the exploit?
1
Ok, SSL_OP_NO_RENEGOTIATION is probably simply to new for most stable distributions. Gotta check that later.
1
Quote Tweet
Replying to @FiloSottile
They disable it via SSL_OP_NO_RENEGOTIATION since hg.nginx.org/nginx/rev/dcab. 3 years ago isn't all that recent.
They have a mainline release and an LTS release. The SSL_OP_NO_RENEGOTIATION. It got into mainline in 1.15.4 and the LTS branch in 1.16.0. Current LTS release is 1.18.
1
Yes but that is new, your initial comment that it got disabled in 2009 was kinda confusing since it is not enough to prevent that issue...
1
I wasn't aware that the implementation of disabling it didn't work until 2018. I tested nginx stable and nginx mainline to confirm it worked the way I remembered and didn't check obsolete versions.



