python.lang.security.audit.insecure-transport.urllib.insecure-openerdirector-open.insecure-openerdirector-open
semgrep
Author
7,311
Download Count*
License
Detected an unsecured transmission channel. 'OpenerDirector.open(...)' is being used with 'http://'. Use 'https://' instead to secure the channel.
Run Locally
Run in CI
Defintion
rules:
- id: insecure-openerdirector-open
message: Detected an unsecured transmission channel. 'OpenerDirector.open(...)'
is being used with 'http://'. Use 'https://' instead to secure the
channel.
metadata:
owasp:
- A03:2017 - Sensitive Data Exposure
- A02:2021 - Cryptographic Failures
cwe:
- "CWE-319: Cleartext Transmission of Sensitive Information"
references:
- https://docs.python.org/3/library/urllib.request.html#urllib.request.OpenerDirector.open
category: security
technology:
- urllib
subcategory:
- audit
likelihood: LOW
impact: LOW
confidence: LOW
license: Commons Clause License Condition v1.0[LGPL-2.1-only]
vulnerability_class:
- Mishandled Sensitive Information
severity: WARNING
languages:
- python
fix-regex:
regex: "[Hh][Tt][Tt][Pp]://"
replacement: https://
count: 1
pattern-either:
- pattern: urllib.request.OpenerDirector(...).open("=~/[Hh][Tt][Tt][Pp]://.*/",
...)
- patterns:
- pattern-inside: |
$OPENERDIRECTOR = urllib.request.OpenerDirector(...)
...
- pattern: $OPENERDIRECTOR.open("=~/[Hh][Tt][Tt][Pp]://.*/", ...)
- patterns:
- pattern-inside: |
$OPENERDIRECTOR = urllib.request.OpenerDirector(...)
...
- pattern: |
$URL = "=~/[Hh][Tt][Tt][Pp]://.*/"
...
$OPENERDIRECTOR.open($URL, ...)
- pattern: |
$URL = "=~/[Hh][Tt][Tt][Pp]://.*/"
...
urllib.request.OpenerDirector(...).open($URL, ...)
- patterns:
- pattern-inside: |
def $FUNC(..., $URL = "=~/[Hh][Tt][Tt][Pp]://.*/", ...):
...
- pattern-either:
- pattern: urllib.request.OpenerDirector(...).open($URL, ...)
- patterns:
- pattern-inside: |
$OPENERDIRECTOR = urllib.request.OpenerDirector(...)
...
- pattern: $OPENERDIRECTOR.open($URL, ...)
Examples
insecure-openerdirector-open.py
from urllib.request import OpenerDirector
def test1():
od = OpenerDirector()
# ruleid: insecure-openerdirector-open
od.open("http://example.com")
def test1_ok():
od = OpenerDirector()
# ok: insecure-openerdirector-open
od.open("https://example.com")
def test2():
od = OpenerDirector()
# ruleid: insecure-openerdirector-open
url = "http://example.com"
# ruleid: insecure-openerdirector-open
od.open(url)
def test2_ok():
od = OpenerDirector()
# ok: insecure-openerdirector-open
url = "https://example.com"
od.open(url)
def test3():
# ruleid: insecure-openerdirector-open
OpenerDirector().open("http://example.com")
def test3_ok():
# ok: insecure-openerdirector-open
OpenerDirector().open("https://example.com")
def test4():
# ruleid: insecure-openerdirector-open
url = "http://example.com"
# ruleid: insecure-openerdirector-open
OpenerDirector().open(url)
def test4_ok():
# ok: insecure-openerdirector-open
url = "https://example.com"
OpenerDirector().open(url)
def test5(url = "http://example.com"):
# ruleid: insecure-openerdirector-open
OpenerDirector().open(url)
def test5_ok(url = "https://example.com"):
# ok: insecure-openerdirector-open
OpenerDirector().open(url)
def test6(url = "http://example.com"):
od = OpenerDirector()
# ruleid: insecure-openerdirector-open
od.open(url)
def test6_ok(url = "https://example.com"):
od = OpenerDirector()
# ok: insecure-openerdirector-open
od.open(url)
Short Link: https://sg.run/qxKz