Skip to content

Commit 4a01c85

Browse files
yueyueLCopilot
andauthored
Fix Path Traversal in validate_assignment via Path Normalization (#1978)
* Fix path traversal validate_assignment * refactor: use pathlib for path traversal fix * Update nbgrader/server_extensions/validate_assignment/handlers.py Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --------- Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
1 parent 213e78e commit 4a01c85

1 file changed

Lines changed: 7 additions & 3 deletions

File tree

  • nbgrader/server_extensions/validate_assignment

nbgrader/server_extensions/validate_assignment/handlers.py

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66

77
from tornado import web
88
from textwrap import dedent
9+
from pathlib import Path
910

1011
from jupyter_server.utils import url_path_join as ujoin
1112
from jupyter_server.base.handlers import JupyterHandler
@@ -38,8 +39,11 @@ def load_config(self):
3839
return app.config
3940

4041
def validate_notebook(self, path):
41-
fullpath = os.path.join(self.root_dir, path)
42-
42+
root = Path(self.root_dir).resolve()
43+
target = (root / path).resolve()
44+
if not target.is_relative_to(root):
45+
raise web.HTTPError(403, "Access denied: path outside allowed directory")
46+
fullpath = str(target)
4347
try:
4448
config = self.load_config()
4549
validator = Validator(config=config)
@@ -144,4 +148,4 @@ def load_jupyter_server_extension(nbapp):
144148
webapp.add_handlers(".*$", [
145149
(ujoin(base_url, pat), handler)
146150
for pat, handler in default_handlers
147-
])
151+
])

0 commit comments

Comments
 (0)