REPRO-2026-00299: Horilla protected_media public-prefix normalization bypass: unauthenticated private in-root read on the repaired release
REPRO-2026-00299 is verified against horilla/horilla-hr · github vulnerability class: Path Traversal This high reproduction includes runnable sandbox proof, artifacts, and a plain-text agent view under REPRO-2026-00299.
pruva-verify REPRO-2026-00299 curl -O https://pruva.dev/api/v1/reproductions/REPRO-2026-00299/artifacts/bundle/repro/reproduction_steps.sh && chmod +x reproduction_steps.sh && ./reproduction_steps.sh Horilla's protected_media() view makes the authorization decision using path.startswith() on the RAW request path, while the filesystem decision uses safe_join(settings.MEDIA_ROOT, path) on the CANONICAL path. When an attacker requests /../../, the raw path passes the allowlist prefix check (authorization granted), but the filesystem normalizes the dot segments and serves a private in-root media file. The resolved file never leaves MEDIA_ROOT, so safe_join() is satisfied. This is NOT path traversal.
The agent's step-by-step process — every tool call, every handoff, the moment the exploit fired.
Loading session...
Scripts, logs, diffs, and output captured during the reproduction.