Skip to content

Commit 1ecd9e8

Browse files
committed
Python: Add test cases for BindToAllInterfaces FNs
Adds test cases from #21582 demonstrating false negatives: - Address stored in class attribute (`self.bind_addr`) - `os.environ.get` with insecure default value - `gevent.socket` (alternative socket module)
1 parent 824d004 commit 1ecd9e8

File tree

1 file changed

+32
-0
lines changed

1 file changed

+32
-0
lines changed

python/ql/test/query-tests/Security/CVE-2018-1281/BindToAllInterfaces_test.py

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,3 +24,35 @@
2424
# IPv6
2525
s = socket.socket(socket.AF_INET6, socket.SOCK_STREAM)
2626
s.bind(("::", 8080)) # $ Alert[py/bind-socket-all-network-interfaces]
27+
28+
29+
# FN cases from https://github.com/github/codeql/issues/21582
30+
31+
# Address stored in a class attribute
32+
class Server:
33+
def __init__(self):
34+
self.bind_addr = '0.0.0.0'
35+
self.port = 31137
36+
37+
def start(self):
38+
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
39+
s.bind((self.bind_addr, self.port)) # $ MISSING: Alert[py/bind-socket-all-network-interfaces]
40+
41+
server = Server()
42+
server.start()
43+
44+
# os.environ.get with insecure default
45+
import os
46+
host = os.environ.get('APP_HOST', '0.0.0.0')
47+
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
48+
s.bind((host, 8080)) # $ MISSING: Alert[py/bind-socket-all-network-interfaces]
49+
50+
# gevent.socket (alternative socket module)
51+
from gevent import socket as gsocket
52+
gs = gsocket.socket(gsocket.AF_INET, gsocket.SOCK_STREAM)
53+
gs.bind(('0.0.0.0', 31137)) # $ MISSING: Alert[py/bind-socket-all-network-interfaces]
54+
55+
# eventlet.green.socket (another alternative socket module)
56+
from eventlet.green import socket as esocket
57+
es = esocket.socket(esocket.AF_INET, esocket.SOCK_STREAM)
58+
es.bind(('0.0.0.0', 31137)) # $ MISSING: Alert[py/bind-socket-all-network-interfaces]

0 commit comments

Comments
 (0)