github / github/codeql

py/insecure-protocol missing urllib3 ssl_version tracking & false positive on secure defaults

Open
#21,666 0 comments 0 reactions 0 assignees View on GitHub
Dominant language
CodeQL
Stars
10.1k
Forks
2.1k
Avg merge
2d 15h
Merged PRs (30d)
141

Description

1. The analysis only inspects standard SSL and pyOpenSSL module constructors and fails to detect insecure ssl_version arguments passed to widely used libraries like urllib3.PoolManager.
2. It seems ssl.create_default_context() is incorrectly flagged as vulnerable; it is the best default for the client as per the doc.

```python
import ssl
import socket
from urllib3.poolmanager import PoolManager

sock = socket.socket()

# FN: use urllib3 PoolManager with explicit insecure ssl_version
pool_mgr = PoolManager(ssl_version=ssl.PROTOCOL_TLSv1)

# FP: https://docs.python.org/3/library/ssl.html#ssl-security
ctx = ssl.create_default_context()
ctx.wrap_socket(sock, server_hostname='example.com')
```

Contributor guide

Open the contributing guide

Research direction

Start at the py/insecure-protocol query entry point and use the Python example to trace how SSL version arguments are detected. Confirm that urllib3.PoolManager with an insecure ssl_version is reported while ssl.create_default_context() is not, then add or update the relevant query tests.

Written by the indexing model from the issue text.

Assessment

Tech stack
python
Domain
security
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Quiet
Clarity
Mostly clear
Newbie friendliness
48/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.