Skip to content
Verified reproduction

REPRO-2026-00298: Horilla protected_media composed chain: unauthenticated outside-root file read, with necessity controls for each component defect

REPRO-2026-00298 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-00298.

REPRO-2026-00298 horilla/horilla-hr · github Path Traversal Jul 27, 2026 .txt
Severity HIGH
Confidence HIGH
Reproduced in 54m 42s
Tool calls 254
Spend $3.63
$ pruva-verify REPRO-2026-00298
or curl -O https://pruva.dev/api/v1/reproductions/REPRO-2026-00298/artifacts/bundle/repro/reproduction_steps.sh && chmod +x reproduction_steps.sh && ./reproduction_steps.sh
Run in a VM or disposable container. This exploits a real vulnerability.
02 · The vulnerability

Horilla HR protected_media() view has two independently necessary defects that compose into an unauthenticated arbitrary file read: (1) path traversal via unsanitized os.path.join(MEDIA_ROOT, path) and (2) Referer-based authorization bypass. A single HTTP request with no cookie/session/JWT/bearer, carrying a spoofed Referer header pointing to /login, bypasses auth and escapes MEDIA_ROOT to read any file readable by the Horilla process.

03 · Root cause
04 · Reproduction transcript

The agent's step-by-step process — every tool call, every handoff, the moment the exploit fired.

Loading session...

05 · Artifacts

Scripts, logs, diffs, and output captured during the reproduction.

bundle/repro/reproduction_steps.sh20.6 KB
bundle/repro/rca_report.md10.7 KB
bundle/repro/runtime_manifest.json8.5 KB
bundle/logs/reproduction_steps.log5.3 KB
bundle/repro/evidence/run2/1.6.0/checkout.log0.3 KB
bundle/repro/evidence/run2/1.6.0/cookies.txt0.4 KB
bundle/repro/evidence/run2/1.6.0/create_user.log0.1 KB
bundle/repro/evidence/run2/1.6.0/headers_auth_inroot.txt0.5 KB
bundle/repro/evidence/run2/1.6.0/headers_chain_referer.txt0.5 KB
bundle/repro/evidence/run2/1.6.0/headers_inroot_referer.txt0.7 KB
bundle/repro/evidence/run2/1.6.0/inroot_canary_value.txt0.0 KB
bundle/repro/evidence/run2/1.6.0/login_response.txt0.0 KB
bundle/repro/evidence/run2/1.6.0/login_status.txt0.0 KB
bundle/repro/evidence/run2/1.6.0/makemigrations.log0.0 KB
bundle/repro/evidence/run2/1.6.0/media_root_check.txt0.1 KB
bundle/repro/evidence/run2/1.6.0/migrate.log3.8 KB
bundle/repro/evidence/run2/1.6.0/modified_files.txt0.0 KB
bundle/repro/evidence/run2/1.6.0/outside_canary_value.txt0.1 KB
bundle/repro/evidence/run2/1.6.0/pip_install.log0.3 KB
bundle/repro/evidence/run2/1.6.0/request_auth_inroot.txt0.2 KB
bundle/repro/evidence/run2/1.6.0/request_chain_referer.txt0.2 KB
bundle/repro/evidence/run2/1.6.0/request_inroot_referer.txt0.2 KB
bundle/repro/evidence/run2/1.6.0/response_auth_inroot.txt0.0 KB
bundle/repro/evidence/run2/1.6.0/response_chain_referer.txt50.8 KB
bundle/repro/evidence/run2/1.6.0/response_inroot_referer.txt0.0 KB
bundle/repro/evidence/run2/1.6.0/server.log0.4 KB
bundle/repro/evidence/run2/1.6.0/server_observed_paths.txt0.1 KB
bundle/repro/evidence/run2/1.6.0/status_auth_inroot.txt0.0 KB
bundle/repro/evidence/run2/1.6.0/status_chain_referer.txt0.0 KB
bundle/repro/evidence/run2/1.6.0/status_inroot_referer.txt0.0 KB
bundle/repro/evidence/run2/67ac2056/checkout.log0.3 KB
bundle/repro/evidence/run2/67ac2056/headers_chain_referer.txt0.5 KB
bundle/repro/evidence/run2/67ac2056/headers_inroot_referer.txt0.5 KB
bundle/repro/evidence/run2/67ac2056/inroot_canary_value.txt0.0 KB
bundle/repro/evidence/run2/67ac2056/makemigrations.log0.0 KB
bundle/repro/evidence/run2/67ac2056/media_root_check.txt0.1 KB
bundle/repro/evidence/run2/67ac2056/migrate.log3.8 KB
bundle/repro/evidence/run2/67ac2056/modified_files.txt0.0 KB
bundle/repro/evidence/run2/67ac2056/outside_canary_value.txt0.1 KB
bundle/repro/evidence/run2/67ac2056/pip_install.log0.9 KB
bundle/repro/evidence/run2/67ac2056/request_chain_referer.txt0.2 KB
bundle/repro/evidence/run2/67ac2056/request_inroot_referer.txt0.2 KB
bundle/repro/evidence/run2/67ac2056/response_chain_referer.txt50.8 KB
bundle/repro/evidence/run2/67ac2056/response_inroot_referer.txt0.0 KB
bundle/repro/evidence/run2/67ac2056/server.log0.3 KB
bundle/repro/evidence/run2/67ac2056/server_observed_paths.txt0.1 KB
bundle/repro/evidence/run2/67ac2056/status_chain_referer.txt0.0 KB
bundle/repro/evidence/run2/67ac2056/status_inroot_referer.txt0.0 KB
bundle/repro/evidence/run2/1.5.0/checkout.log0.2 KB
bundle/repro/evidence/run2/1.5.0/cookies.txt0.4 KB
bundle/repro/evidence/run2/1.5.0/create_user.log0.1 KB
bundle/repro/evidence/run2/1.5.0/headers_auth_escape.txt0.5 KB
bundle/repro/evidence/run2/1.5.0/headers_chain_no_referer.txt0.7 KB
bundle/repro/evidence/run2/1.5.0/headers_chain_with_referer.txt0.5 KB
bundle/repro/evidence/run2/1.5.0/headers_inroot_referer.txt0.5 KB
bundle/repro/evidence/run2/1.5.0/inroot_canary_value.txt0.0 KB
bundle/repro/evidence/run2/1.5.0/login_response.txt0.0 KB
bundle/repro/evidence/run2/1.5.0/login_status.txt0.0 KB
bundle/repro/evidence/run2/1.5.0/makemigrations.log0.0 KB
bundle/repro/evidence/run2/1.5.0/media_root_check.txt0.1 KB
bundle/repro/evidence/run2/1.5.0/migrate.log3.8 KB
bundle/repro/evidence/run2/1.5.0/modified_files.txt0.0 KB
bundle/repro/evidence/run2/1.5.0/outside_canary_value.txt0.1 KB
bundle/repro/evidence/run2/1.5.0/pip_install.log0.3 KB
bundle/repro/evidence/run2/1.5.0/request_auth_escape.txt0.2 KB
bundle/repro/evidence/run2/1.5.0/request_chain_no_referer.txt0.2 KB
bundle/repro/evidence/run2/1.5.0/request_chain_with_referer.txt0.2 KB
bundle/repro/evidence/run2/1.5.0/request_inroot_referer.txt0.2 KB
bundle/repro/evidence/run2/1.5.0/response_auth_escape.txt0.1 KB
bundle/repro/evidence/run2/1.5.0/response_chain_no_referer.txt0.0 KB
bundle/repro/evidence/run2/1.5.0/response_chain_with_referer.txt0.1 KB
bundle/repro/evidence/run2/1.5.0/response_inroot_referer.txt0.0 KB
bundle/repro/evidence/run2/1.5.0/server.log0.5 KB
bundle/repro/evidence/run2/1.5.0/server_observed_paths.txt0.1 KB
bundle/repro/evidence/run2/1.5.0/status_auth_escape.txt0.0 KB
bundle/repro/evidence/run2/1.5.0/status_chain_no_referer.txt0.0 KB
bundle/repro/evidence/run2/1.5.0/status_chain_with_referer.txt0.0 KB
bundle/repro/evidence/run2/1.5.0/status_inroot_referer.txt0.0 KB
bundle/repro/evidence/run1/1.6.0/checkout.log0.3 KB
bundle/repro/evidence/run1/1.6.0/cookies.txt0.4 KB
bundle/repro/evidence/run1/1.6.0/create_user.log0.1 KB
bundle/repro/evidence/run1/1.6.0/headers_auth_inroot.txt0.5 KB
bundle/repro/evidence/run1/1.6.0/headers_chain_referer.txt0.5 KB
bundle/repro/evidence/run1/1.6.0/headers_inroot_referer.txt0.7 KB
bundle/repro/evidence/run1/1.6.0/inroot_canary_value.txt0.0 KB
bundle/repro/evidence/run1/1.6.0/login_response.txt0.0 KB
bundle/repro/evidence/run1/1.6.0/login_status.txt0.0 KB
bundle/repro/evidence/run1/1.6.0/makemigrations.log0.0 KB
bundle/repro/evidence/run1/1.6.0/media_root_check.txt0.1 KB
bundle/repro/evidence/run1/1.6.0/migrate.log3.8 KB
bundle/repro/evidence/run1/1.6.0/modified_files.txt0.0 KB
bundle/repro/evidence/run1/1.6.0/outside_canary_value.txt0.1 KB
bundle/repro/evidence/run1/1.6.0/pip_install.log0.3 KB
bundle/repro/evidence/run1/1.6.0/request_auth_inroot.txt0.2 KB
bundle/repro/evidence/run1/1.6.0/request_chain_referer.txt0.2 KB
bundle/repro/evidence/run1/1.6.0/request_inroot_referer.txt0.2 KB
bundle/repro/evidence/run1/1.6.0/response_auth_inroot.txt0.0 KB
bundle/repro/evidence/run1/1.6.0/response_chain_referer.txt50.8 KB
bundle/repro/evidence/run1/1.6.0/response_inroot_referer.txt0.0 KB
bundle/repro/evidence/run1/1.6.0/server.log0.4 KB
bundle/repro/evidence/run1/1.6.0/server_observed_paths.txt0.1 KB
bundle/repro/evidence/run1/1.6.0/status_auth_inroot.txt0.0 KB
bundle/repro/evidence/run1/1.6.0/status_chain_referer.txt0.0 KB
bundle/repro/evidence/run1/1.6.0/status_inroot_referer.txt0.0 KB
bundle/repro/evidence/run1/67ac2056/checkout.log0.3 KB
bundle/repro/evidence/run1/67ac2056/headers_chain_referer.txt0.5 KB
bundle/repro/evidence/run1/67ac2056/headers_inroot_referer.txt0.5 KB
bundle/repro/evidence/run1/67ac2056/inroot_canary_value.txt0.0 KB
bundle/repro/evidence/run1/67ac2056/makemigrations.log0.0 KB
bundle/repro/evidence/run1/67ac2056/media_root_check.txt0.1 KB
bundle/repro/evidence/run1/67ac2056/migrate.log3.8 KB
bundle/repro/evidence/run1/67ac2056/modified_files.txt0.0 KB
bundle/repro/evidence/run1/67ac2056/outside_canary_value.txt0.1 KB
bundle/repro/evidence/run1/67ac2056/pip_install.log0.9 KB
bundle/repro/evidence/run1/67ac2056/request_chain_referer.txt0.2 KB
bundle/repro/evidence/run1/67ac2056/request_inroot_referer.txt0.2 KB
bundle/repro/evidence/run1/67ac2056/response_chain_referer.txt50.8 KB
bundle/repro/evidence/run1/67ac2056/response_inroot_referer.txt0.0 KB
bundle/repro/evidence/run1/67ac2056/server.log0.3 KB
bundle/repro/evidence/run1/67ac2056/server_observed_paths.txt0.1 KB
bundle/repro/evidence/run1/67ac2056/status_chain_referer.txt0.0 KB
bundle/repro/evidence/run1/67ac2056/status_inroot_referer.txt0.0 KB
bundle/repro/evidence/run1/1.5.0/checkout.log0.2 KB
bundle/repro/evidence/run1/1.5.0/cookies.txt0.4 KB
bundle/repro/evidence/run1/1.5.0/create_user.log0.1 KB
bundle/repro/evidence/run1/1.5.0/headers_auth_escape.txt0.5 KB
bundle/repro/evidence/run1/1.5.0/headers_chain_no_referer.txt0.7 KB
bundle/repro/evidence/run1/1.5.0/headers_chain_with_referer.txt0.5 KB
bundle/repro/evidence/run1/1.5.0/headers_inroot_referer.txt0.5 KB
bundle/repro/evidence/run1/1.5.0/inroot_canary_value.txt0.0 KB
bundle/repro/evidence/run1/1.5.0/login_response.txt0.0 KB
bundle/repro/evidence/run1/1.5.0/login_status.txt0.0 KB
bundle/repro/evidence/run1/1.5.0/makemigrations.log0.0 KB
bundle/repro/evidence/run1/1.5.0/media_root_check.txt0.1 KB
bundle/repro/evidence/run1/1.5.0/migrate.log3.8 KB
bundle/repro/evidence/run1/1.5.0/modified_files.txt0.0 KB
bundle/repro/evidence/run1/1.5.0/outside_canary_value.txt0.1 KB
bundle/repro/evidence/run1/1.5.0/pip_install.log0.3 KB
bundle/repro/evidence/run1/1.5.0/request_auth_escape.txt0.2 KB
bundle/repro/evidence/run1/1.5.0/request_chain_no_referer.txt0.2 KB
bundle/repro/evidence/run1/1.5.0/request_chain_with_referer.txt0.2 KB
bundle/repro/evidence/run1/1.5.0/request_inroot_referer.txt0.2 KB
bundle/repro/evidence/run1/1.5.0/response_auth_escape.txt0.1 KB
bundle/repro/evidence/run1/1.5.0/response_chain_no_referer.txt0.0 KB
bundle/repro/evidence/run1/1.5.0/response_chain_with_referer.txt0.1 KB
bundle/repro/evidence/run1/1.5.0/response_inroot_referer.txt0.0 KB
bundle/repro/evidence/run1/1.5.0/server.log0.5 KB
bundle/repro/evidence/run1/1.5.0/server_observed_paths.txt0.1 KB
bundle/repro/evidence/run1/1.5.0/status_auth_escape.txt0.0 KB
bundle/repro/evidence/run1/1.5.0/status_chain_no_referer.txt0.0 KB
bundle/repro/evidence/run1/1.5.0/status_chain_with_referer.txt0.0 KB
bundle/repro/evidence/run1/1.5.0/status_inroot_referer.txt0.0 KB
bundle/repro/validation_verdict.json0.7 KB