Description
Description of the false positive
LGTM currently suggests to set the specific protocol version in SSLContext
which has been deprecated in Python >=3.6:
ssl.PROTOCOL_TLSv1_2
Selects TLS version 1.2 as the channel encryption protocol. This is the most modern version, and probably the best choice for maximum protection, if both sides can speak it. Available only with openssl version 1.0.1+.
...
Deprecated since version 3.6: OpenSSL has deprecated all version specific protocols. Use the default protocolPROTOCOL_TLS
with flags likeOP_NO_SSLv3
instead.
In addition, Python >=3.7 deprecated the use of flags and introduced a new API:
ssl.OP_NO_TLSv1
Prevents a TLSv1 connection. This option is only applicable in conjunction with PROTOCOL_TLS. It prevents the peers from choosing TLSv1 as the protocol version.
...
Deprecated since version 3.7: The option is deprecated since OpenSSL 1.1.0, use the newSSLContext.minimum_version
andSSLContext.maximum_version
instead.
I think that an updated rule should check for the presence of either SSLContext.options
or SSLContext.minimum_version
. Though, this might get a bit complex as all of those settings can be used together:
The attributes
maximum_version
,minimum_version
andSSLContext.options
all affect the supported SSL and TLS versions of the context. The implementation does not prevent invalid combination. For example a context withOP_NO_TLSv1_2
in options and maximum_version set toTLSVersion.TLSv1_2
will not be able to establish a TLS 1.2 connection.
URL to the alert on the project page on LGTM.com