Don't report DROWN from TLS 1.0 and TLS 1.1 alone - #29
Draft
cursor[bot] wants to merge 1 commit into
Draft
Conversation
CVE-2016-0800 requires SSLv2. The analyzer cannot negotiate SSLv2, so treating any two deprecated protocols as confirmed DROWN marked typical TLS 1.0+1.1 hosts CRITICAL with grade F. Only emit DROWN when SSLv2 is actually in the deprecated list. Co-authored-by: dmitryflynn <dmitryflynn@users.noreply.github.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Bug and impact
check_drown()treated any host with two or more deprecated TLS versions as confirmed DROWN (CVE-2016-0800, CRITICAL, CVSS 9.8), which forced TLS grade F.Python cannot negotiate SSLv2, and the only deprecated versions the analyzer can actually probe are TLS 1.0 and TLS 1.1. A typical legacy stack that still offers both therefore got a false CRITICAL on every TLS scan — including hosts that have never spoken SSLv2.
Trigger: scan any host that successfully handshakes TLS 1.0 and TLS 1.1 (very common).
probe_protocols()puts both indeprecated;len(deprecated) >= 2fired DROWN.Root cause
The DROWN heuristic used
len(deprecated) >= 2as a stand-in for SSLv2 because SSLv2 cannot be tested from Python. TLS 1.0 + TLS 1.1 is not DROWN. DROWN requires SSLv2 on the host or a shared RSA key with an SSLv2 server.Fix
Only emit the DROWN finding when
SSLv2is actually present in the deprecated list. TLS 1.0/1.1 remain MEDIUM deprecated-protocol findings and still grade D when both are present.Validation
python3 -m pytest test_tls.py test_hardening.py -q— 61 passed