pyLoad Has Incomplete Fix for CVE-2026-33509 -storage_folder Bypass via Session Directory in pyLoad
Summary
The fix for CVE-2026-33509 prevents setting storage_folder inside PKGDIR or userdir, but does NOT protect the Flask session directory (/tmp/pyLoad/flask). An authenticated attacker can set storage_folder to the session directory and download session files of other users via /files/get/, leading to account takeover.
Details
The fix in src/pyload/core/api/__init__.py:
directories = [PKGDIR, userdir]
if any(directories[0].startswith(d) for d in directories[1:]):
return # blocked
But the Flask session directory is:
session_storage_path = os.path.join(api.get_cachedir(), "flask")
# = /tmp/pyLoad/flask ← NOT blocked by fix
Attack Chain
- Attacker (admin) sets
storage_folder = /tmp/pyLoad/flask - Fix does NOT block this —
/tmp/pyLoad/flasknot insidePKGDIRoruserdir - Attacker requests
GET /files/get/<victim_session_filename> send_from_directory('/tmp/pyLoad/flask', session_file)serves victim's session- Attacker uses stolen session → Account Takeover
PoC
<img width="592" height="408" alt="POC" src="https://github.com/user-attachments/assets/936b9f56-325b-437d-9edd-e0d5bb995187" />import os
PKGDIR = "/usr/lib/python3/dist-packages/pyload"
userdir = os.path.expanduser("~/.pyload")
session_dir = "/tmp/pyLoad/flask"
correct_case = lambda x: x
directories = [
correct_case(os.path.join(os.path.realpath(d), ""))
for d in [session_dir, PKGDIR, userdir]
]
blocked = any(directories[0].startswith(d) for d in directories[1:])
print(f"Fix blocks session_dir: {blocked}")
# Output: Fix blocks session_dir: False ← BYPASS CONFIRMED
Impact
Authenticated admin can steal sessions of other users → Account Takeover.
Suggested Fix
blocked_dirs = [PKGDIR, userdir, api.get_cachedir()]
directories = [
os.path.join(os.path.realpath(d), "")
for d in [value] + blocked_dirs
]
if any(directories[0].startswith(d) for d in directories[1:]):
return
Czego dotyczy
Kliknij technologię, aby zobaczyć wszystkie dotyczące jej podatności.
| Platforma | Paczka | Podatne wersje | Poprawka w wersji |
|---|---|---|---|
| Python (PyPI) | pyload-ng | <= 0.5.0b3.dev99 | brak poprawki |
Odnośniki
- Wektor CVSS
CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:H/I:H/A:N- Słabość (CWE)
CWE-706- Platforma
- Python (PyPI)
- Paczka
pyload-ng- Ujawniono
- 14.05.2026
- Aktualizacja
- 11.10.2026 14:18
Źródła i licencje
OSV / GitHub Advisory Database - PYSEC-2026-2998 - PyPA Advisory Database; CC BY 4.0
OSV / GitHub Advisory Database - GHSA-w727-595x-pc3r - CC BY 4.0
Historia podatności: pyload-ng
Wszystkie opisane podatności tej paczki (Python (PyPI)), od najnowszej. Widać, czy to jednorazowa wpadka, czy paczka, której trzeba pilnować.
- Wszystkich wpisów
- 58
- Pierwsza → ostatnia
- 01.2023 10.2026
- Bez poprawki
- 24
- Wykorzystywana w atakach
- 0
Rozkład istotności
- Krytyczna 9
- Wysoka 23
- Średnia 25
- Niska 1
Ujawnienia w latach
- 2023: 9
- 2024: 8
- 2025: 8
- 2026: 33
-
pyLoad Has Incomplete Fix for CVE-2026-33509 -storage_folder Bypass via Session Directory in pyLoad ten wpis
Dowiedz się, które podatności dotyczą Twojej aplikacji
Po podłączeniu integracji DockRay i włączeniu raportowania oprogramowania DockRay porównuje zgłoszone wersje komponentów ze znanymi podatnościami i powiadamia o potwierdzonych dopasowaniach. Zakres zależy od obsługiwanej technologii i dostępnych biuletynów.