Skip to content

Commit 0c0ad67

Browse files
authored
Document the vulnerabilities (#10)
1 parent 86a24d5 commit 0c0ad67

File tree

7 files changed

+40
-0
lines changed

7 files changed

+40
-0
lines changed

README.md

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,3 +25,33 @@ pip install -r requirements.txt
2525
FLASK_APP=run.py flask run
2626
```
2727

28+
### Vulnerabilities
29+
30+
This project contains the following vulnerabilities:
31+
32+
- Remote Code Execution
33+
- SQL injection
34+
- XSS
35+
- Insecure Deserialization
36+
- Directory Traversal
37+
- Open Redirect
38+
- Sensitive Data Exposure
39+
- Broken Access Control
40+
- Security Misconfiguration
41+
42+
You can find each one in the codebase by grepping for the string
43+
`vulnerability`:
44+
45+
```
46+
$ grep vulnerability . -R -n | grep -v README
47+
./flask_webgoat/actions.py:43: # vulnerability: Remote Code Execution
48+
./flask_webgoat/users.py:37: # vulnerability: SQL Injection
49+
./flask_webgoat/auth.py:17: # vulnerability: SQL Injection
50+
./flask_webgoat/ui.py:14: # vulnerability: XSS
51+
./flask_webgoat/actions.py:60: # vulnerability: Insecure Deserialization
52+
./flask_webgoat/actions.py:35: # vulnerability: Directory Traversal
53+
./flask_webgoat/auth.py:45: # vulnerability: Open Redirect
54+
./flask_webgoat/__init__.py:12: # vulnerability: Sensitive Data Exposure
55+
./run.py:7: # vulnerability: Broken Access Control
56+
./run.py:9: # vulnerability: Security Misconfiguration
57+
```

flask_webgoat/__init__.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99

1010
def query_db(query, args=(), one=False, commit=False):
1111
with sqlite3.connect(DB_FILENAME) as conn:
12+
# vulnerability: Sensitive Data Exposure
1213
conn.set_trace_callback(print)
1314
cur = conn.cursor().execute(query, args)
1415
if commit:

flask_webgoat/actions.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,13 +32,15 @@ def log_entry():
3232
filename = filename_param + ".txt"
3333
path = Path(user_dir + "/" + filename)
3434
with path.open("w", encoding="utf-8") as open_file:
35+
# vulnerability: Directory Traversal
3536
open_file.write(text_param)
3637
return jsonify({"success": True})
3738

3839

3940
@bp.route("/grep_processes")
4041
def grep_processes():
4142
name = request.args.get("name")
43+
# vulnerability: Remote Code Execution
4244
res = subprocess.run(
4345
["ps aux | grep " + name + " | awk '{print $11}'"],
4446
shell=True,
@@ -55,5 +57,6 @@ def grep_processes():
5557
def deserialized_descr():
5658
pickled = request.form.get('pickled')
5759
data = base64.urlsafe_b64decode(pickled)
60+
# vulnerability: Insecure Deserialization
5861
deserialized = pickle.loads(data)
5962
return jsonify({"success": True, "description": str(deserialized)})

flask_webgoat/auth.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ def login():
1414
400,
1515
)
1616

17+
# vulnerability: SQL Injection
1718
query = (
1819
"SELECT id, username, access_level FROM user WHERE username = '%s' AND password = '%s'"
1920
% (username, password)
@@ -41,6 +42,7 @@ def login_and_redirect():
4142
query = "SELECT id, username, access_level FROM user WHERE username = ? AND password = ?"
4243
result = query_db(query, (username, password), True)
4344
if result is None:
45+
# vulnerability: Open Redirect
4446
return redirect(url)
4547
session["user_info"] = (result[0], result[1], result[2])
4648
return jsonify({"success": True})

flask_webgoat/ui.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ def search():
1111
query_param = request.args.get("query")
1212
if query_param is None:
1313
message = "please provide the query parameter"
14+
# vulnerability: XSS
1415
return render_template("error.html", message=message)
1516

1617
try:

flask_webgoat/users.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ def create_user():
3434
402,
3535
)
3636

37+
# vulnerability: SQL Injection
3738
query = (
3839
"INSERT INTO user (username, password, access_level) VALUES ('%s', '%s', %d)"
3940
% (username, password, int(access_level))

run.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,9 @@
44

55
@app.after_request
66
def add_csp_headers(response):
7+
# vulnerability: Broken Access Control
78
response.headers['Access-Control-Allow-Origin'] = '*'
9+
# vulnerability: Security Misconfiguration
810
response.headers['Content-Security-Policy'] = "script-src 'self' 'unsafe-inline'"
911
return response
1012

0 commit comments

Comments
 (0)