[Security] /browse und /move ohne Pfad-Sandboxing #16

Closed
opened 2026-05-27 12:21:05 +02:00 by ferdi2go · 1 comment
Owner

Probleme

a) /browseserver.py:201-214

def browse(path: str = "/home/vchuser"):
    path = os.path.abspath(path)
    if not os.path.isdir(path):
        raise HTTPException(400, ...)

Keine Whitelist. Authentifizierter User kann /etc, /root, fremde Home-Verzeichnisse listen.

b) /moveserver.py:339-359
Kein tempdir-Check. Im Gegensatz zu /download und /preview (in #1 gefixt) fehlt hier die Sandbox.

Fix

ALLOWED_BROWSE_ROOT = "/home/vchuser"
if not os.path.abspath(path).startswith(ALLOWED_BROWSE_ROOT):
    raise HTTPException(403, "Zugriff verweigert")

Fuer /move: gleicher tempdir-Check wie in /download.

## Probleme **a) `/browse`** — `server.py:201-214` ```python def browse(path: str = "/home/vchuser"): path = os.path.abspath(path) if not os.path.isdir(path): raise HTTPException(400, ...) ``` Keine Whitelist. Authentifizierter User kann `/etc`, `/root`, fremde Home-Verzeichnisse listen. **b) `/move`** — `server.py:339-359` Kein tempdir-Check. Im Gegensatz zu `/download` und `/preview` (in #1 gefixt) fehlt hier die Sandbox. ## Fix ```python ALLOWED_BROWSE_ROOT = "/home/vchuser" if not os.path.abspath(path).startswith(ALLOWED_BROWSE_ROOT): raise HTTPException(403, "Zugriff verweigert") ``` Fuer `/move`: gleicher tempdir-Check wie in `/download`.
ferdi2go added the securitypriority: high labels 2026-05-27 12:21:05 +02:00
Author
Owner

Fix umgesetzt in server.py:

  • BROWSE_ROOT = "/home/vchuser" als Sandbox
  • /browse lehnt Pfade ausserhalb mit 403 ab, parent ist None an der Wurzel
  • /move prueft jetzt tempfile.gettempdir()-Praefix (analog /download), 403 bei Mismatch

Manueller Test: /etc und /root -> 403; /home/vchuser, /home/vchuser/projects -> 200; /move mit folder=/home/vchuser -> 403.

Fix umgesetzt in `server.py`: - `BROWSE_ROOT = "/home/vchuser"` als Sandbox - `/browse` lehnt Pfade ausserhalb mit 403 ab, `parent` ist `None` an der Wurzel - `/move` prueft jetzt `tempfile.gettempdir()`-Praefix (analog `/download`), 403 bei Mismatch Manueller Test: `/etc` und `/root` -> 403; `/home/vchuser`, `/home/vchuser/projects` -> 200; `/move` mit folder=`/home/vchuser` -> 403.
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: ferdi2go/OnlyFrames#16