Skip to content

Commit 015d203

Browse files
committed
Improve tests, move them and create qhelp examples
1 parent 2392be0 commit 015d203

File tree

8 files changed

+143
-33
lines changed

8 files changed

+143
-33
lines changed
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
from flask import request, Flask
2+
import ldap
3+
4+
5+
@app.route("/bind_example")
6+
def bind_example():
7+
dn = request.args['dc']
8+
search_filter = request.args['search']
9+
10+
ldap_connection = ldap.initialize("ldap://127.0.0.1:1337")
11+
ldap_connection.bind('cn=root', "")
12+
user = ldap_connection.search_s(dn, ldap.SCOPE_SUBTREE, search_filter)
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
from ldap3 import Server, Connection, ALL
2+
from flask import request, Flask
3+
4+
5+
@app.route("/passwordNone")
6+
def passwordNone():
7+
dn = request.args['dc']
8+
search_filter = request.args['search']
9+
10+
srv = Server('servername', get_info=ALL)
11+
conn = Connection(srv, user='user_dn', password=None)
12+
status, result, response, _ = conn.search(dn, search_filter)
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
from flask import request, Flask
2+
import ldap
3+
import os
4+
5+
6+
@app.route("/bind_example")
7+
def bind_example():
8+
dn = request.args['dc']
9+
search_filter = request.args['search']
10+
11+
ldap_connection = ldap.initialize("ldap://127.0.0.1:1337")
12+
ldap_connection.bind('cn=root', os.environ.get('LDAP_PASSWORD'))
13+
user = ldap_connection.search_s(dn, ldap.SCOPE_SUBTREE, search_filter)

python/ql/src/experimental/Security/CWE-287/tests/3_auth_good.py renamed to python/ql/src/experimental/Security/CWE-287/examples/auth_good_3.py

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,6 @@
22
from flask import request, Flask
33
import os
44

5-
app = Flask(__name__)
6-
75

86
@app.route("/passwordFromEnv")
97
def passwordFromEnv():
@@ -14,7 +12,3 @@ def passwordFromEnv():
1412
conn = Connection(srv, user='user_dn',
1513
password=os.environ.get('LDAP_PASSWORD'))
1614
status, result, response, _ = conn.search(dn, search_filter)
17-
return result
18-
19-
# if __name__ == "__main__":
20-
# app.run(debug=True)

python/ql/src/experimental/Security/CWE-287/tests/auth_bad.py renamed to python/ql/test/experimental/query-tests/Security/CWE-287/auth_bad_2.py

Lines changed: 29 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -4,48 +4,64 @@
44
app = Flask(__name__)
55

66

7-
@app.route("/simple_bind")
8-
def simple_bind():
7+
@app.route("/simple_bind_example")
8+
def simple_bind_example():
9+
"""
10+
A RemoteFlowSource is used directly as DN and search filter while the bind's password
11+
is not set
12+
"""
13+
914
dn = request.args['dc']
1015
search_filter = request.args['search']
1116

1217
ldap_connection = ldap.initialize("ldap://127.0.0.1:1337")
1318
ldap_connection.simple_bind('cn=root')
1419
user = ldap_connection.search_s(dn, ldap.SCOPE_SUBTREE, search_filter)
15-
return user[0]
1620

1721

18-
@app.route("/simple_bind_s")
19-
def simple_bind_s():
22+
@app.route("/simple_bind_s_example")
23+
def simple_bind_s_example():
24+
"""
25+
A RemoteFlowSource is used directly as DN and search filter while the bind's password
26+
is not set
27+
"""
28+
2029
dn = request.args['dc']
2130
search_filter = request.args['search']
2231

2332
ldap_connection = ldap.initialize("ldap://127.0.0.1:1337")
2433
ldap_connection.simple_bind_s('cn=root')
2534
user = ldap_connection.search_s(dn, ldap.SCOPE_SUBTREE, search_filter)
26-
return user[0]
2735

2836

29-
@app.route("/bind_s")
30-
def bind_s():
37+
@app.route("/bind_s_example")
38+
def bind_s_example():
39+
"""
40+
A RemoteFlowSource is used directly as DN and search filter while the bind's password
41+
is set to None
42+
"""
43+
3144
dn = request.args['dc']
3245
search_filter = request.args['search']
3346

3447
ldap_connection = ldap.initialize("ldap://127.0.0.1:1337")
3548
ldap_connection.bind_s('cn=root', None)
3649
user = ldap_connection.search_s(dn, ldap.SCOPE_SUBTREE, search_filter)
37-
return user[0]
3850

3951

40-
@app.route("/bind")
41-
def bind():
52+
@app.route("/bind_example")
53+
def bind_example():
54+
"""
55+
A RemoteFlowSource is used directly as DN and search filter while the bind's password
56+
is set to None
57+
"""
58+
4259
dn = request.args['dc']
4360
search_filter = request.args['search']
4461

4562
ldap_connection = ldap.initialize("ldap://127.0.0.1:1337")
46-
ldap_connection.bind('cn=root', None)
63+
ldap_connection.bind('cn=root', "")
4764
user = ldap_connection.search_s(dn, ldap.SCOPE_SUBTREE, search_filter)
48-
return user[0]
4965

5066

5167
# if __name__ == "__main__":

python/ql/src/experimental/Security/CWE-287/tests/3_auth_bad.py renamed to python/ql/test/experimental/query-tests/Security/CWE-287/auth_bad_3.py

Lines changed: 25 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,24 +6,47 @@
66

77
@app.route("/passwordNone")
88
def passwordNone():
9+
"""
10+
A RemoteFlowSource is used directly as DN and search filter while the connection's password
11+
is set to None
12+
"""
13+
914
dn = request.args['dc']
1015
search_filter = request.args['search']
1116

1217
srv = Server('servername', get_info=ALL)
1318
conn = Connection(srv, user='user_dn', password=None)
1419
status, result, response, _ = conn.search(dn, search_filter)
15-
return result
20+
21+
22+
@app.route("/passwordEmpty")
23+
def passwordEmpty():
24+
"""
25+
A RemoteFlowSource is used directly as DN and search filter while the connection's password
26+
is empty
27+
"""
28+
29+
dn = request.args['dc']
30+
search_filter = request.args['search']
31+
32+
srv = Server('servername', get_info=ALL)
33+
conn = Connection(srv, user='user_dn', password="")
34+
status, result, response, _ = conn.search(dn, search_filter)
1635

1736

1837
@app.route("/notPassword")
1938
def notPassword():
39+
"""
40+
A RemoteFlowSource is used directly as DN and search filter while the connection's password
41+
is not set
42+
"""
43+
2044
dn = request.args['dc']
2145
search_filter = request.args['search']
2246

2347
srv = Server('servername', get_info=ALL)
2448
conn = Connection(srv, user='user_dn')
2549
status, result, response, _ = conn.search(dn, search_filter)
26-
return result
2750

2851

2952
# if __name__ == "__main__":

python/ql/src/experimental/Security/CWE-287/tests/auth_good.py renamed to python/ql/test/experimental/query-tests/Security/CWE-287/auth_good_2.py

Lines changed: 28 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -5,48 +5,64 @@
55
app = Flask(__name__)
66

77

8-
@app.route("/simple_bind")
9-
def simple_bind():
8+
@app.route("/simple_bind_example")
9+
def simple_bind_example():
10+
"""
11+
A RemoteFlowSource is used directly as DN and search filter while the bind's password
12+
is an environment variable
13+
"""
14+
1015
dn = request.args['dc']
1116
search_filter = request.args['search']
1217

1318
ldap_connection = ldap.initialize("ldap://127.0.0.1:1337")
1419
ldap_connection.simple_bind('cn=root', os.environ.get('LDAP_PASSWORD'))
1520
user = ldap_connection.search_s(dn, ldap.SCOPE_SUBTREE, search_filter)
16-
return user[0]
1721

1822

19-
@app.route("/simple_bind_s")
20-
def simple_bind_s():
23+
@app.route("/simple_bind_s_example")
24+
def simple_bind_s_example():
25+
"""
26+
A RemoteFlowSource is used directly as DN and search filter while the bind's password
27+
is an environment variable
28+
"""
29+
2130
dn = request.args['dc']
2231
search_filter = request.args['search']
2332

2433
ldap_connection = ldap.initialize("ldap://127.0.0.1:1337")
2534
ldap_connection.simple_bind_s('cn=root', os.environ.get('LDAP_PASSWORD'))
2635
user = ldap_connection.search_s(dn, ldap.SCOPE_SUBTREE, search_filter)
27-
return user[0]
2836

2937

30-
@app.route("/bind_s")
31-
def bind_s():
38+
@app.route("/bind_s_example")
39+
def bind_s_example():
40+
"""
41+
A RemoteFlowSource is used directly as DN and search filter while the bind's password
42+
is an environment variable
43+
"""
44+
3245
dn = request.args['dc']
3346
search_filter = request.args['search']
3447

3548
ldap_connection = ldap.initialize("ldap://127.0.0.1:1337")
3649
ldap_connection.bind_s('cn=root', os.environ.get('LDAP_PASSWORD'))
3750
user = ldap_connection.search_s(dn, ldap.SCOPE_SUBTREE, search_filter)
38-
return user[0]
3951

4052

41-
@app.route("/bind")
42-
def bind():
53+
@app.route("/bind_example")
54+
def bind_example():
55+
"""
56+
A RemoteFlowSource is used directly as DN and search filter while the bind's password
57+
is an environment variable
58+
"""
59+
4360
dn = request.args['dc']
4461
search_filter = request.args['search']
4562

4663
ldap_connection = ldap.initialize("ldap://127.0.0.1:1337")
4764
ldap_connection.bind('cn=root', os.environ.get('LDAP_PASSWORD'))
4865
user = ldap_connection.search_s(dn, ldap.SCOPE_SUBTREE, search_filter)
49-
return user[0]
5066

5167
# if __name__ == "__main__":
5268
# app.run(debug=True)
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
from ldap3 import Server, Connection, ALL
2+
from flask import request, Flask
3+
import os
4+
5+
app = Flask(__name__)
6+
7+
8+
@app.route("/passwordFromEnv")
9+
def passwordFromEnv():
10+
"""
11+
A RemoteFlowSource is used directly as DN and search filter while the connection's password
12+
is an environment variable
13+
"""
14+
15+
dn = request.args['dc']
16+
search_filter = request.args['search']
17+
18+
srv = Server('servername', get_info=ALL)
19+
conn = Connection(srv, user='user_dn',
20+
password=os.environ.get('LDAP_PASSWORD'))
21+
status, result, response, _ = conn.search(dn, search_filter)
22+
23+
# if __name__ == "__main__":
24+
# app.run(debug=True)

0 commit comments

Comments
 (0)