New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

disable TLS negotiation for remotes that fail STARTTLS #770

Closed
msimerson opened this Issue Dec 9, 2014 · 5 comments

Comments

Projects
None yet
3 participants
@msimerson
Member

msimerson commented Dec 9, 2014

the idea

If a remote attempts to connect and fails, cache their IP in an in-memory no-tls object. The next time that IP connects:

  • don't offer STARTTLS
  • remove their IP from the no-tls object

This would:

  • permit mail to make it though from MTAs and MUAs with old/broken SSL/TLS implementations
  • permit Haraka to require more secure TLS settings with less impact
  • automatically enable TLS when those hosts fix/upgrade their TLS

@msimerson msimerson changed the title from disable TLS negotiation for remotes that fail STARTTLS attempts to disable TLS negotiation for remotes that fail STARTTLS Dec 9, 2014

@jaredj

This comment has been minimized.

Show comment
Hide comment
@jaredj

jaredj Dec 9, 2014

Contributor

+1, if someone not currently using Haraka can comment on this as a general MTA proposal :)

Contributor

jaredj commented Dec 9, 2014

+1, if someone not currently using Haraka can comment on this as a general MTA proposal :)

@baudehlo

This comment has been minimized.

Show comment
Hide comment
@baudehlo

baudehlo Dec 9, 2014

Collaborator

Concern: There may be an attack vector whereby a client could be forced to downgrade to plaintext when they never have before. Some sort of protection against that would be useful.

note: MITM makes it already possible to perform this attack, so it would have to be a non-MITM attack vector to be relevant or worse than the current situation.

Collaborator

baudehlo commented Dec 9, 2014

Concern: There may be an attack vector whereby a client could be forced to downgrade to plaintext when they never have before. Some sort of protection against that would be useful.

note: MITM makes it already possible to perform this attack, so it would have to be a non-MITM attack vector to be relevant or worse than the current situation.

@msimerson

This comment has been minimized.

Show comment
Hide comment
@msimerson

msimerson Dec 9, 2014

Member

@msimerson said:

TLS should also have a "require" list as well
such as gmail.com
maybe even "learn" that list automatically, and refuse to connect to remotes
that used to offer STAARTTLS but currently don't

@godsflaw: that is a very good idea given recent downgrade attacks

Member

msimerson commented Dec 9, 2014

@msimerson said:

TLS should also have a "require" list as well
such as gmail.com
maybe even "learn" that list automatically, and refuse to connect to remotes
that used to offer STAARTTLS but currently don't

@godsflaw: that is a very good idea given recent downgrade attacks

@jaredj

This comment has been minimized.

Show comment
Hide comment
@jaredj

jaredj Dec 10, 2014

Contributor

If I'm not mistaken, the original proposal plus the dynamic 'require' list would mean that if two haraka servers were talking to each other and TLS broke:

  • on the first attempt, the sending haraka server would note that the receiving haraka server offered STARTTLS
  • when TLS broke on the first attempt, the receiving haraka server would note that it failed and add the sending server to the no-tls object
  • on the second attempt, the receiving server would not offer STARTTLS; the sending server would refuse to talk to the receiving server because it was no longer offering STARTTLS.

Just sayin'

Contributor

jaredj commented Dec 10, 2014

If I'm not mistaken, the original proposal plus the dynamic 'require' list would mean that if two haraka servers were talking to each other and TLS broke:

  • on the first attempt, the sending haraka server would note that the receiving haraka server offered STARTTLS
  • when TLS broke on the first attempt, the receiving haraka server would note that it failed and add the sending server to the no-tls object
  • on the second attempt, the receiving server would not offer STARTTLS; the sending server would refuse to talk to the receiving server because it was no longer offering STARTTLS.

Just sayin'

@msimerson

This comment has been minimized.

Show comment
Hide comment
@msimerson

msimerson Dec 10, 2014

Member

@jaredj absolutely true. However, that's exactly 0% worse than today, when a failed STARTTLS means email doesn't get delivered (until a human gets involved). With a "don't regress" option, the benefit is rejecting that extremely remote possibility of a MITM attack. I don't think that feature should be enabled by default, but I still think it's a great feature. The tin-foil hat crowd would also approve.

[tls]
; cache list of remotes that successfully STARTTLS with us. Require them to use TLS in the future.
remember_hosts=false

; remember hosts with valid signed certs. Require future connections from these hosts
; to have valid certificates.
remember_trusted_hosts=false

; remember when a host attempts STARTTLS and fails. The next time they connect, don't
; offer STARTTLS option (so message gets delivered). This trades a little bit of security for
; more reliably mail delivery.
disable_for_failed_hosts=true
Member

msimerson commented Dec 10, 2014

@jaredj absolutely true. However, that's exactly 0% worse than today, when a failed STARTTLS means email doesn't get delivered (until a human gets involved). With a "don't regress" option, the benefit is rejecting that extremely remote possibility of a MITM attack. I don't think that feature should be enabled by default, but I still think it's a great feature. The tin-foil hat crowd would also approve.

[tls]
; cache list of remotes that successfully STARTTLS with us. Require them to use TLS in the future.
remember_hosts=false

; remember hosts with valid signed certs. Require future connections from these hosts
; to have valid certificates.
remember_trusted_hosts=false

; remember when a host attempts STARTTLS and fails. The next time they connect, don't
; offer STARTTLS option (so message gets delivered). This trades a little bit of security for
; more reliably mail delivery.
disable_for_failed_hosts=true
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment