-
Notifications
You must be signed in to change notification settings - Fork 451
/
Copy pathactions.py
62 lines (52 loc) · 1.96 KB
/
actions.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
import pickle
import base64
from pathlib import Path
import subprocess
from flask import Blueprint, request, jsonify, session
bp = Blueprint("actions", __name__)
@bp.route("/message", methods=["POST"])
def log_entry():
user_info = session.get("user_info", None)
if user_info is None:
return jsonify({"error": "no user_info found in session"})
access_level = user_info[2]
if access_level > 2:
return jsonify({"error": "access level < 2 is required for this action"})
filename_param = request.form.get("filename")
if filename_param is None:
return jsonify({"error": "filename parameter is required"})
text_param = request.form.get("text")
if text_param is None:
return jsonify({"error": "text parameter is required"})
user_id = user_info[0]
user_dir = "data/" + str(user_id)
user_dir_path = Path(user_dir)
if not user_dir_path.exists():
user_dir_path.mkdir()
filename = filename_param + ".txt"
path = Path(user_dir + "/" + filename)
with path.open("w", encoding="utf-8") as open_file:
# vulnerability: Directory Traversal
open_file.write(text_param)
return jsonify({"success": True})
@bp.route("/grep_processes")
def grep_processes():
name = request.args.get("name")
# vulnerability: Remote Code Execution
res = subprocess.run(
["ps aux | grep " + name + " | awk '{print $11}'"],
shell=True,
capture_output=True,
)
if res.stdout is None:
return jsonify({"error": "no stdout returned"})
out = res.stdout.decode("utf-8")
names = out.split("\n")
return jsonify({"success": True, "names": names})
@bp.route("/deserialized_descr", methods=["POST"])
def deserialized_descr():
pickled = request.form.get('pickled')
data = base64.urlsafe_b64decode(pickled)
# vulnerability: Insecure Deserialization
deserialized = pickle.loads(data)
return jsonify({"success": True, "description": str(deserialized)})