Hi,
Please forgive me if this is not the correct place to make this posting and 
let me know the correct place instead.

Want to discuss the impacts from the implementation of the proposal 
crypto/tls: disable RSA key exchange cipher suites by default #63413 and 
possible ways forward beyond go change some code (whilst it may fix the 
issue in the short term, has certain drawbacks, takes time, and is 
impractical in some cases).

This proposal was introduced in Go Version 1.22 for crypto/tls and brought 
a significant behavioural change impacting client server connectivity with 
very little announcement.

People are seeing TLS handshake failures causing complete failure of 
connectivity and not knowing where the issue is. As tooling starts to take 
on the 1.22 / 1.23 Golang changes, the impacts from this change are now 
bubbling to the surface.

I can see why the motivation behind the change is from a good place. There 
are weaknesses in using TLS with RSA encrypted key exchange. However, the 
change as implemented is producing poor outcomes.

>From a high level perspective, it is far better to protect communication 
with possibly vulnerable encryption than being completely in the clear. 
However this breakage is encouraging some people to revert to in clear 
connectivity for lacking (unknowing) a better option.

Reading through the original proposal it appears considerations of change 
impact narrowly focused on Internet connected clients and servers and did 
not consider the various audience groups impacted by the proposed (and now 
accepted) change.

This change is now causing one of the more costly failure types, that being 
in the field failures.

What can be done now this proposal is implemented?

Can the proposal and its implementation be reversed? Or removed and 
reintroduced with better communication?

There are several areas of concern and possible remediation needed.

1. Scope of impact.

The proposal itself mentions insufficient metrics to understand current 
usage of TLS RSA KEX in the wild and discussion was limited to Internet 
clients and servers.

Such usage in fact includes:

   - Embedded web servers
   - Server out of band remote management (iLOMs etc)
   - Older web acceleration / proxy servers
   - Other protocol proxy servers (LDAP, IMAP etc)
   - Golang monitoring systems monitoring older type of servers


Most of the above usage will not appear in Internet cipher suite usage 
statistics.

2. Documentation.

There is insufficient documentation around this high impact change.

Existing documentation is limited to:

   - A small mention in release notes
   - The proposal itself
   - A couple of support tickets


There is no documentation or workarounds written up or referenced to 
support non programmers impacted by this change. This is a behavioural 
change in Golang, so relying on vendor / OSS documentation to percolate 
through is insufficient. Often such projects are only discovering issues at 
the same time as end users. The significance of the one line release note 
statement is easy to miss.

3. Impact of change.

The change completely breaks client server connectivity where TLS RSA KEX 
is the only supported cipher suite. The high impact coupled with lack of 
documentation, especially aimed at non programmers (think 
System/Network/DevOps administrators), is causing undesirable behaviours 
and poor security posture as the people balance the breakage against other 
competing goals. Some outcomes observed include:


   - Revert communications to clear text (really not a desirable outcome 
   but it has happened)
   - Bypass the broken system
   - Revert to older implementation and mark system / application as high 
   risk for upgrade. (Effectively blocking all changes)


This is not a good security outcome. Even reasonable encryption is better 
than no encryption and lots of encryption implementations do not guarantee 
PFS which was one of the two major motivations behind this proposal change.

4. Ongoing support of legacy cipher suites.

There needs to be some guarantees made for:

   - Keeping GODEBUG=tlsrsakex=1 for a certain time period to allow 
   vendors, implementations and impacted communities to move forward. I would 
   expect several years, like 5 or more, may be in order.
   - Keeping older and deprecated cipher suites available for legacy 
   applications accessibility.
   
As it stands, I am not aware of current policies where something hidden 
behind GODEBUG is maintained for any set length of time. There is a risk 
here of the tlsrsakex=1 workaround breaking in future (even tomorrow) and 
requiring yet further interventions or removal of Golang applications.

The systems impacted are often older, lower powered, potentially out of 
support and remain needing access at the highest security standard that 
existed at their time of implementation. Looking to vendor's / OSS for 
updates to said systems in such ecosystems is a very long process.

5. Improvements to the Proposal methodology.

This is an interesting case, as reading through Golang's documentation 
around proposals has lots of info about the process of proposal being 
accepted and implemented, but very little to nothing about post proposal 
acceptance and implementation ongoing review. 

The procedure basically stops at the it is implemented, released and done 
stage. Whereas the lifecycle of the proposal is in fact only just starting 
as the proposal's implementation is now introduced into the wild.

Maybe these issues could be a good candidate case for sparking discussions 
on improving proposal considerations and post implementation review.

Regards,

Creaky

-- 
You received this message because you are subscribed to the Google Groups 
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to golang-nuts+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/golang-nuts/97106c1f-efdc-4eeb-9eea-19325999f503n%40googlegroups.com.

Reply via email to