Skip to content

GHSA-9WJX-4J4R-FF8W: Verified Reproduction

GHSA-9WJX-4J4R-FF8W: Reported Horilla protected media Referer authentication bypass

GHSA-9WJX-4J4R-FF8W is verified against horilla/horilla-hr · github. Vulnerability class: Auth Bypass. This high reproduction includes runnable sandbox proof, artifacts, and a plain-text agent view under REPRO-2026-00296.

REPRO-2026-00296 horilla/horilla-hr · github Auth Bypass Jul 26, 2026 .txt
Severity
HIGH
Confidence
HIGH
Reproduced in
77m 9s
Tool calls
276
Spend
$16.04
01 · Overview

What Is GHSA-9WJX-4J4R-FF8W?

GHSA-9WJX-4J4R-FF8W is a high-severity Auth Bypass vulnerability affecting horilla/horilla-hr. Pruva has independently reproduced it and publishes a verified, runnable proof-of-concept (reproduction REPRO-2026-00296).

02 · Severity & CVSS

GHSA-9WJX-4J4R-FF8W Severity

GHSA-9WJX-4J4R-FF8W is rated high severity.

HIGH threat level

High — serious impact or readily exploitable. Prioritize remediation.

How to Reproduce GHSA-9WJX-4J4R-FF8W

$ pruva-verify REPRO-2026-00296
or curl -O https://www.pruva.dev/api/v1/reproductions/REPRO-2026-00296/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.
06 · Proof of Reproduction

Proof of Reproduction for GHSA-9WJX-4J4R-FF8W

Authorization bypass — reproduced
  • reached the target end-to-end
  • full exploit chain demonstrated
  • on the real production code path
  • high confidence
  • the upstream fix blocks the same trigger
Trigger

Unauthenticated Referer header 'http://attacker.invalid/login' and private in-root /media/<path> URL

Attack chain
  1. /media/private-data/20260722T055646Z-13223/vuln-1-secret.txt
Runnable proof: reproduction_steps.sh
Captured evidence: pip install fixed 7fb44184827cf327 20260722T055646Z 13223
How the agent worked 650 events · 276 tool calls · 1h 17m
1h 17mDuration
276Tool calls
196Reasoning steps
650Events
16Dead-ends
Agent activity over 1h 17m
Support
18
Repro
380
Judge
52
Variant
195
Verify
1
0:0077:09

Root Cause and Exploit Chain for GHSA-9WJX-4J4R-FF8W

Versions: version reproduced: tag 1.5.0, commit 61bd5173220d19925ad8220db9152a75c881ea73.Fixed: version verified: tag 1.6.0, commit b3bd29d15819cbece45c58e6268ddd0614e387d6; source fix commit b6eaec1386d8b8741a42fe7c78f318f073375791 is an ancestor of the fixed tag.
  • Affected version reproduced: tag 1.5.0, commit 61bd5173220d19925ad8220db9152a75c881ea73.
  • Fixed version verified: tag 1.6.0, commit b3bd29d15819cbece45c58e6268ddd0614e387d6; source fix commit b6eaec1386d8b8741a42fe7c78f318f073375791 is an ancestor of the fixed tag.
  • Risk level and consequences: high severity authorization bypass. An unauthenticated attacker who knows or can guess a private in-root media path can read that file without a cookie, session, bearer token, JWT, or any application credential. This run demonstrated unauthorized read of a randomly generated private canary under MEDIA_ROOT and did not demonstrate traversal, account takeover, session forgery, or code execution.

Impact Parity

  • Disclosed/claimed maximum impact: authz_bypass / unauthorized read of an exact nonpublic in-root media file via attacker-controlled Referer on the real Horilla /media/<path> route.
  • Reproduced impact from this run: full production-path authz_bypass. Horilla 1.5.0 denied the private canary with no Referer but returned HTTP 200 and the exact canary body when only Referer: http://attacker.invalid/login was added. Horilla 1.6.0 denied both requests while still serving a generated public liveness asset.
  • Parity: full.
  • Not demonstrated: path traversal, broader arbitrary file read outside MEDIA_ROOT, authenticated privilege changes, account takeover, session forgery, denial of service, or code execution.

Root Cause

In Horilla 1.5.0, protected_media(request, path) computes:

referer_path = urlparse(request.META.get("HTTP_REFERER", "")).path

and then skips the authentication/JWT check when referer_path is one of several public pages such as /login. Because Referer is fully controlled by the HTTP client and is not an authentication boundary, an unauthenticated attacker can set a cross-origin value whose path is /login. The view then falls through to:

return FileResponse(open(media_path, "rb"))

for any existing media path not under the small exempted folder list. The source evidence in bundle/artifacts/horilla_referer_bypass/20260722T055646Z-13223/source/protected_media_hunks.log shows this vulnerable logic in tag 1.5.0 and the fixed 1.6.0 logic. The fixed version removes public-page Referer authorization and instead permits only explicit public media path prefixes, uses safe_join(settings.MEDIA_ROOT, path), and requires an authenticated user or valid JWT for all nonpublic media paths. The known fix commit is b6eaec1386d8b8741a42fe7c78f318f073375791.

Reproduction Steps

  1. Run bundle/repro/reproduction_steps.sh from any directory, optionally with PRUVA_ROOT=/path/to/bundle.
  2. The script reads bundle/project_cache_context.json, reuses or creates /pruva/project-cache/repo, verifies the vulnerable and fixed tag commits, installs each tag's own requirements.txt into isolated dependency directories, prepares migrated SQLite runtime templates, starts real Horilla Django manage.py runserver containers, and sends attacker-process curl --path-as-is requests to the real /media/<path> route.
  3. For each of two clean attempts per role, the script creates a new private canary under a nonpublic MEDIA_ROOT/private-data/<run>/... path and a public liveness canary under MEDIA_ROOT/base/icon/.... It records requests, responses, curl traces, container logs, source identities, and modified-file inventories.
  4. Expected evidence: vulnerable attempts show public liveness 200, baseline private request with no Referer 302 denied with no canary in the body, and spoofed Referer: http://attacker.invalid/login 200 with response body equal to the private canary. Fixed attempts show public liveness 200 while both baseline and spoofed private requests return 302 and do not contain the canary.

Evidence

  • Main reproduction script: bundle/repro/reproduction_steps.sh.
  • Latest successful runtime manifest: bundle/repro/runtime_manifest.json.
  • Latest structured verdict: bundle/repro/validation_verdict.json.
  • Latest complete successful proof directory: bundle/artifacts/horilla_referer_bypass/20260722T055646Z-13223/.
  • Matrix summary: bundle/artifacts/horilla_referer_bypass/20260722T055646Z-13223/matrix_summary.json with "all_oracles_passed": true.
  • Source comparison: bundle/artifacts/horilla_referer_bypass/20260722T055646Z-13223/source/protected_media_hunks.log.
  • Per-attempt request/response artifacts include:
    • Vulnerable attempt 1 request pair: attempts/vuln_1/baseline_no_referer_request.txt and attempts/vuln_1/trigger_spoofed_referer_request.txt.
    • Vulnerable attempt 1 body evidence: attempts/vuln_1/private_canary.txt and attempts/vuln_1/trigger_spoofed_referer_response_body.bin match exactly.
    • Fixed attempt controls: attempts/fixed_1/attempt_result.json and attempts/fixed_2/attempt_result.json show both private requests denied and the public liveness route working.
  • Key latest matrix results:
{
  "all_oracles_passed": true,
  "attempt_results": [
    {"role": "fixed", "attempt": 1, "public_status": "200", "baseline_status": "302", "trigger_status": "302", "oracle_passed": true},
    {"role": "fixed", "attempt": 2, "public_status": "200", "baseline_status": "302", "trigger_status": "302", "oracle_passed": true},
    {"role": "vuln", "attempt": 1, "public_status": "200", "baseline_status": "302", "trigger_status": "200", "oracle_passed": true},
    {"role": "vuln", "attempt": 2, "public_status": "200", "baseline_status": "302", "trigger_status": "200", "oracle_passed": true}
  ]
}
  • The final script revision was executed successfully twice consecutively. The latest run completed at 2026-07-22T06:00:10Z and the prior successful run completed at 2026-07-22T05:56:08Z.

Recommendations / Next Steps

  • Upgrade Horilla deployments to version 1.6.0 or later, or apply fix commit b6eaec1386d8b8741a42fe7c78f318f073375791 if maintaining a downstream branch.
  • Do not use Referer, Origin, or other client-controlled metadata as an authorization decision for protected media.
  • Keep a strict allowlist of genuinely public media prefixes and require a real authenticated user/session or valid token for every other media path.
  • Retain path containment checks such as Django safe_join(settings.MEDIA_ROOT, path) and verify that only regular files under MEDIA_ROOT can be opened.
  • Add regression tests at the real HTTP route level: absent Referer, cross-origin /login Referer, same-origin public pages, authenticated access, JWT access, and public-prefix liveness should all be covered.

Additional Notes

  • Idempotency confirmation: bundle/repro/reproduction_steps.sh passed two consecutive clean runs. Each run creates fresh random private and public canaries and clean per-attempt SQLite databases.
  • Runtime accommodations: to start the tagged application in this clean environment, the script installs each tag's dependencies and prepares SQLite migrations using manage.py makemigrations for the Horilla project apps before migrate --run-syncdb. It records modified-file inventories. It does not modify base/views.py, base/urls.py, routing, middleware, authentication logic, or file-open behavior.
  • The attacker requests are made by curl from outside the Horilla Django process, do not follow redirects, and explicitly record that no cookie or authorization header is sent.

GHSA-9WJX-4J4R-FF8W Reproduction Transcript

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

Full session Replay every step — scrub the timeline or play it back.

Event 1/40
0:002:03
0:00
session startedgpt-5.5 · GHSA-9WJX-4J4R-FF8W · REPRO-20
0:08
0:08
0:15
0:21
web search
0:22
web search
0:25
0:32
0:32
0:33
web search
1:20
1:20
1:20
extract_facts
no facts extracted
1:21
1:21
supportclaim_contract
1:30
1:30
1:36
1:36
1:36
1:36
1:41
1:41
1:41
1:41
1:54
2:03
2:03

Artifacts and Evidence for GHSA-9WJX-4J4R-FF8W

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

bundle/artifacts/horilla_referer_bypass/20260722T055646Z-13223/attempts/fixed_1/public_liveness_curl_stderr.txt0.0 KB
bundle/repro/reproduction_steps.sh26.6 KB
bundle/repro/rca_report.md8.0 KB
bundle/repro/runtime_manifest.json14.4 KB
bundle/logs/reproduction_steps.log2.6 KB
bundle/logs/reproduction_steps_20260722T055646Z-13223.log2.6 KB
bundle/artifacts/horilla_referer_bypass/20260722T055646Z-13223/matrix_summary.json1.6 KB
bundle/artifacts/horilla_referer_bypass/20260722T055646Z-13223/source/vuln_source_identity.json1.8 KB
bundle/artifacts/horilla_referer_bypass/20260722T055646Z-13223/source/protected_media_hunks.log2.7 KB
bundle/artifacts/horilla_referer_bypass/20260722T055646Z-13223/prepared_runtime/vuln/prepare_runtime.log27.3 KB
bundle/artifacts/horilla_referer_bypass/20260722T055646Z-13223/prepared_runtime/fixed/prepare_runtime.log27.3 KB
bundle/artifacts/horilla_referer_bypass/20260722T055646Z-13223/attempts/vuln_1/attempt_result.json0.3 KB
bundle/artifacts/horilla_referer_bypass/20260722T055646Z-13223/attempts/vuln_1/container_inspect.json10.4 KB
bundle/artifacts/horilla_referer_bypass/20260722T055646Z-13223/attempts/vuln_1/health_response_headers.txt0.5 KB
bundle/artifacts/horilla_referer_bypass/20260722T055646Z-13223/attempts/fixed_1/trigger_spoofed_referer_curl_stderr.txt0.0 KB
bundle/artifacts/horilla_referer_bypass/20260722T055646Z-13223/attempts/fixed_1/trigger_spoofed_referer_meta.json1.1 KB
bundle/artifacts/horilla_referer_bypass/20260722T055646Z-13223/attempts/fixed_1/modified_file_inventory_after_startup.txt0.0 KB
bundle/artifacts/horilla_referer_bypass/20260722T055646Z-13223/attempts/vuln_2/private_canary.txt0.1 KB
bundle/artifacts/horilla_referer_bypass/20260722T055646Z-13223/attempts/vuln_2/public_canary.txt0.1 KB
bundle/artifacts/horilla_referer_bypass/20260722T055646Z-13223/attempts/vuln_2/attempt_setup.json0.4 KB
bundle/artifacts/horilla_referer_bypass/20260722T055646Z-13223/attempts/fixed_1/server_final.log0.8 KB
bundle/artifacts/horilla_referer_bypass/20260722T055646Z-13223/attempts/vuln_2/server_startup.log0.4 KB
bundle/artifacts/horilla_referer_bypass/20260722T055646Z-13223/attempts/vuln_2/container_id.txt0.1 KB
bundle/artifacts/horilla_referer_bypass/20260722T055646Z-13223/attempts/vuln_2/container_inspect.json10.4 KB
bundle/artifacts/horilla_referer_bypass/20260722T055646Z-13223/attempts/vuln_2/health_response_headers.txt0.5 KB
bundle/artifacts/horilla_referer_bypass/20260722T055646Z-13223/attempts/vuln_2/health_response_body.txt0.0 KB
bundle/artifacts/horilla_referer_bypass/20260722T055646Z-13223/attempts/vuln_2/public_liveness_request.txt0.2 KB
bundle/artifacts/horilla_referer_bypass/20260722T055646Z-13223/attempts/vuln_2/public_liveness_response_headers.txt0.6 KB
bundle/artifacts/horilla_referer_bypass/20260722T055646Z-13223/attempts/vuln_2/public_liveness_response_body.bin0.1 KB
bundle/artifacts/horilla_referer_bypass/20260722T055646Z-13223/attempts/vuln_2/public_liveness_curl_trace.txt1.6 KB
bundle/artifacts/horilla_referer_bypass/20260722T055646Z-13223/attempts/vuln_2/public_liveness_curl_stderr.txt0.0 KB
bundle/artifacts/horilla_referer_bypass/20260722T055646Z-13223/attempts/vuln_2/public_liveness_meta.json0.9 KB
bundle/artifacts/horilla_referer_bypass/20260722T055646Z-13223/attempts/vuln_2/baseline_no_referer_request.txt0.2 KB
bundle/artifacts/horilla_referer_bypass/20260722T055646Z-13223/attempts/vuln_2/baseline_no_referer_response_headers.txt0.7 KB
bundle/artifacts/horilla_referer_bypass/20260722T055646Z-13223/attempts/vuln_2/baseline_no_referer_response_body.bin0.0 KB
bundle/artifacts/horilla_referer_bypass/20260722T055646Z-13223/attempts/vuln_2/baseline_no_referer_curl_trace.txt1.7 KB
bundle/artifacts/horilla_referer_bypass/20260722T055646Z-13223/attempts/vuln_2/baseline_no_referer_curl_stderr.txt0.0 KB
bundle/artifacts/horilla_referer_bypass/20260722T055646Z-13223/attempts/vuln_2/baseline_no_referer_meta.json1.1 KB
bundle/artifacts/horilla_referer_bypass/20260722T055646Z-13223/attempts/vuln_2/trigger_spoofed_referer_request.txt0.2 KB
bundle/artifacts/horilla_referer_bypass/20260722T055646Z-13223/attempts/vuln_2/trigger_spoofed_referer_response_headers.txt0.5 KB
bundle/artifacts/horilla_referer_bypass/20260722T055646Z-13223/attempts/vuln_2/trigger_spoofed_referer_response_body.bin0.1 KB
bundle/artifacts/horilla_referer_bypass/20260722T055646Z-13223/attempts/vuln_2/trigger_spoofed_referer_curl_trace.txt1.6 KB
bundle/artifacts/horilla_referer_bypass/20260722T055646Z-13223/attempts/vuln_2/server_final.log0.8 KB
bundle/artifacts/horilla_referer_bypass/20260722T055646Z-13223/attempts/vuln_2/trigger_spoofed_referer_curl_stderr.txt0.0 KB
bundle/artifacts/horilla_referer_bypass/20260722T055646Z-13223/attempts/vuln_2/trigger_spoofed_referer_meta.json0.9 KB
bundle/artifacts/horilla_referer_bypass/20260722T055646Z-13223/attempts/vuln_2/modified_file_inventory_after_startup.txt0.0 KB
bundle/artifacts/horilla_referer_bypass/20260722T055646Z-13223/attempts/fixed_2/private_canary.txt0.1 KB
bundle/artifacts/horilla_referer_bypass/20260722T055646Z-13223/attempts/fixed_2/public_canary.txt0.1 KB
bundle/artifacts/horilla_referer_bypass/20260722T055646Z-13223/attempts/fixed_2/attempt_setup.json0.4 KB
bundle/artifacts/horilla_referer_bypass/20260722T055646Z-13223/attempts/fixed_2/container_id.txt0.1 KB
bundle/artifacts/horilla_referer_bypass/20260722T055646Z-13223/attempts/fixed_2/container_inspect.json10.4 KB
bundle/artifacts/horilla_referer_bypass/20260722T055646Z-13223/attempts/fixed_2/health_response_headers.txt0.5 KB
bundle/artifacts/horilla_referer_bypass/20260722T055646Z-13223/attempts/fixed_2/health_response_body.txt0.0 KB
bundle/artifacts/horilla_referer_bypass/20260722T055646Z-13223/attempts/fixed_2/public_liveness_request.txt0.2 KB
bundle/artifacts/horilla_referer_bypass/20260722T055646Z-13223/attempts/fixed_2/server_startup.log0.4 KB
bundle/artifacts/horilla_referer_bypass/20260722T055646Z-13223/attempts/fixed_2/public_liveness_response_headers.txt0.6 KB
bundle/artifacts/horilla_referer_bypass/20260722T055646Z-13223/attempts/fixed_2/public_liveness_response_body.bin0.1 KB
bundle/artifacts/horilla_referer_bypass/20260722T055646Z-13223/attempts/fixed_2/public_liveness_curl_trace.txt1.6 KB
bundle/artifacts/horilla_referer_bypass/20260722T055646Z-13223/attempts/fixed_2/baseline_no_referer_response_body.bin0.0 KB
bundle/artifacts/horilla_referer_bypass/20260722T055646Z-13223/attempts/fixed_2/baseline_no_referer_curl_trace.txt1.7 KB
bundle/artifacts/horilla_referer_bypass/20260722T055646Z-13223/attempts/fixed_2/baseline_no_referer_curl_stderr.txt0.0 KB
bundle/artifacts/horilla_referer_bypass/20260722T055646Z-13223/attempts/fixed_2/baseline_no_referer_meta.json1.1 KB
bundle/artifacts/horilla_referer_bypass/20260722T055646Z-13223/attempts/fixed_2/trigger_spoofed_referer_request.txt0.2 KB
bundle/artifacts/horilla_referer_bypass/20260722T055646Z-13223/attempts/fixed_2/trigger_spoofed_referer_response_headers.txt0.7 KB
bundle/artifacts/horilla_referer_bypass/20260722T055646Z-13223/attempts/fixed_2/trigger_spoofed_referer_response_body.bin0.0 KB
bundle/artifacts/horilla_referer_bypass/20260722T055646Z-13223/attempts/fixed_2/trigger_spoofed_referer_curl_trace.txt1.8 KB
bundle/artifacts/horilla_referer_bypass/20260722T055646Z-13223/attempts/fixed_2/trigger_spoofed_referer_curl_stderr.txt0.0 KB
bundle/artifacts/horilla_referer_bypass/20260722T055646Z-13223/attempts/fixed_2/trigger_spoofed_referer_meta.json1.1 KB
bundle/artifacts/horilla_referer_bypass/20260722T055646Z-13223/attempts/fixed_2/modified_file_inventory_after_startup.txt0.0 KB
bundle/artifacts/horilla_referer_bypass/20260722T055646Z-13223/attempts/fixed_2/server_final.log0.8 KB
bundle/repro/validation_verdict.json0.7 KB
bundle/artifacts/horilla_referer_bypass/20260722T055646Z-13223/source/fixed_source_identity.json1.9 KB
bundle/artifacts/horilla_referer_bypass/20260722T055646Z-13223/attempts/vuln_2/attempt_result.json0.3 KB
bundle/artifacts/horilla_referer_bypass/20260722T055646Z-13223/attempts/fixed_1/attempt_result.json0.3 KB
bundle/artifacts/horilla_referer_bypass/20260722T055646Z-13223/attempts/fixed_2/attempt_result.json0.3 KB
bundle/artifacts/horilla_referer_bypass/20260722T055646Z-13223/attempts/vuln_1/private_canary.txt0.1 KB
bundle/artifacts/horilla_referer_bypass/20260722T055646Z-13223/cache_context_resolved.json0.2 KB
bundle/artifacts/horilla_referer_bypass/20260722T055646Z-13223/source/vuln_worktree_head.txt0.0 KB
bundle/artifacts/horilla_referer_bypass/20260722T055646Z-13223/source/fixed_worktree_head.txt0.0 KB
bundle/artifacts/horilla_referer_bypass/20260722T055646Z-13223/attempts/vuln_1/container_id.txt0.1 KB
bundle/artifacts/horilla_referer_bypass/20260722T055646Z-13223/attempts/vuln_1/health_response_body.txt0.0 KB
bundle/artifacts/horilla_referer_bypass/20260722T055646Z-13223/attempts/vuln_1/server_startup.log0.4 KB
bundle/artifacts/horilla_referer_bypass/20260722T055646Z-13223/attempts/vuln_1/public_liveness_request.txt0.2 KB
bundle/artifacts/horilla_referer_bypass/20260722T055646Z-13223/attempts/vuln_1/public_liveness_response_headers.txt0.6 KB
bundle/artifacts/horilla_referer_bypass/20260722T055646Z-13223/attempts/vuln_1/public_liveness_response_body.bin0.1 KB
bundle/artifacts/horilla_referer_bypass/20260722T055646Z-13223/attempts/vuln_1/public_liveness_curl_trace.txt1.6 KB
bundle/artifacts/horilla_referer_bypass/20260722T055646Z-13223/attempts/vuln_1/public_liveness_curl_stderr.txt0.0 KB
bundle/artifacts/horilla_referer_bypass/20260722T055646Z-13223/attempts/vuln_1/server_final.log0.8 KB
bundle/artifacts/horilla_referer_bypass/20260722T055646Z-13223/attempts/fixed_1/attempt_setup.json0.4 KB
bundle/artifacts/horilla_referer_bypass/20260722T055646Z-13223/attempts/fixed_1/container_id.txt0.1 KB
bundle/artifacts/horilla_referer_bypass/20260722T055646Z-13223/attempts/fixed_1/container_inspect.json10.4 KB
bundle/artifacts/horilla_referer_bypass/20260722T055646Z-13223/attempts/fixed_1/health_response_headers.txt0.5 KB
bundle/artifacts/horilla_referer_bypass/20260722T055646Z-13223/attempts/fixed_1/health_response_body.txt0.0 KB
bundle/artifacts/horilla_referer_bypass/20260722T055646Z-13223/attempts/fixed_1/server_startup.log0.4 KB
bundle/artifacts/horilla_referer_bypass/20260722T055646Z-13223/attempts/fixed_1/trigger_spoofed_referer_curl_trace.txt1.8 KB
bundle/artifacts/horilla_referer_bypass/20260722T055646Z-13223/attempts/fixed_2/public_liveness_curl_stderr.txt0.0 KB
bundle/artifacts/horilla_referer_bypass/20260722T055646Z-13223/attempts/vuln_1/baseline_no_referer_request.txt0.2 KB
bundle/artifacts/horilla_referer_bypass/20260722T055646Z-13223/attempts/vuln_1/baseline_no_referer_response_headers.txt0.7 KB
bundle/artifacts/horilla_referer_bypass/20260722T055646Z-13223/attempts/vuln_1/trigger_spoofed_referer_request.txt0.2 KB
bundle/artifacts/horilla_referer_bypass/20260722T055646Z-13223/attempts/vuln_1/trigger_spoofed_referer_response_headers.txt0.5 KB
bundle/artifacts/horilla_referer_bypass/20260722T055646Z-13223/attempts/vuln_1/trigger_spoofed_referer_response_body.bin0.1 KB
bundle/artifacts/horilla_referer_bypass/20260722T055646Z-13223/attempts/fixed_1/trigger_spoofed_referer_request.txt0.2 KB
bundle/artifacts/horilla_referer_bypass/20260722T055646Z-13223/attempts/fixed_1/trigger_spoofed_referer_response_headers.txt0.7 KB
bundle/logs/pip_install_vuln_f86e9625862fa828_20260722T055646Z-13223.log0.2 KB
bundle/artifacts/horilla_referer_bypass/20260722T055646Z-13223/deps/vuln_f86e9625862fa828_pip_freeze.txt2.1 KB
bundle/logs/pip_install_fixed_7fb44184827cf327_20260722T055646Z-13223.log0.2 KB
bundle/artifacts/horilla_referer_bypass/20260722T055646Z-13223/deps/fixed_7fb44184827cf327_pip_freeze.txt2.1 KB
bundle/artifacts/horilla_referer_bypass/20260722T055646Z-13223/prepared_runtime/vuln/modified_file_inventory_after_prepare.txt0.0 KB
bundle/artifacts/horilla_referer_bypass/20260722T055646Z-13223/prepared_runtime/fixed/modified_file_inventory_after_prepare.txt0.0 KB
bundle/artifacts/horilla_referer_bypass/20260722T055646Z-13223/attempts/vuln_1/public_canary.txt0.1 KB
bundle/artifacts/horilla_referer_bypass/20260722T055646Z-13223/attempts/vuln_1/attempt_setup.json0.4 KB
bundle/artifacts/horilla_referer_bypass/20260722T055646Z-13223/attempts/vuln_1/public_liveness_meta.json0.9 KB
bundle/artifacts/horilla_referer_bypass/20260722T055646Z-13223/attempts/vuln_1/baseline_no_referer_response_body.bin0.0 KB
bundle/artifacts/horilla_referer_bypass/20260722T055646Z-13223/attempts/vuln_1/baseline_no_referer_curl_trace.txt1.7 KB
bundle/artifacts/horilla_referer_bypass/20260722T055646Z-13223/attempts/vuln_1/baseline_no_referer_curl_stderr.txt0.0 KB
bundle/artifacts/horilla_referer_bypass/20260722T055646Z-13223/attempts/vuln_1/baseline_no_referer_meta.json1.1 KB
bundle/artifacts/horilla_referer_bypass/20260722T055646Z-13223/attempts/vuln_1/trigger_spoofed_referer_curl_trace.txt1.6 KB
bundle/artifacts/horilla_referer_bypass/20260722T055646Z-13223/attempts/vuln_1/trigger_spoofed_referer_curl_stderr.txt0.0 KB
bundle/artifacts/horilla_referer_bypass/20260722T055646Z-13223/attempts/vuln_1/trigger_spoofed_referer_meta.json0.9 KB
bundle/artifacts/horilla_referer_bypass/20260722T055646Z-13223/attempts/vuln_1/modified_file_inventory_after_startup.txt0.0 KB
bundle/artifacts/horilla_referer_bypass/20260722T055646Z-13223/attempts/fixed_1/private_canary.txt0.1 KB
bundle/artifacts/horilla_referer_bypass/20260722T055646Z-13223/attempts/fixed_1/public_canary.txt0.1 KB
bundle/artifacts/horilla_referer_bypass/20260722T055646Z-13223/attempts/fixed_1/public_liveness_request.txt0.2 KB
bundle/artifacts/horilla_referer_bypass/20260722T055646Z-13223/attempts/fixed_1/public_liveness_response_headers.txt0.6 KB
bundle/artifacts/horilla_referer_bypass/20260722T055646Z-13223/attempts/fixed_1/public_liveness_response_body.bin0.1 KB
bundle/artifacts/horilla_referer_bypass/20260722T055646Z-13223/attempts/fixed_1/public_liveness_curl_trace.txt1.6 KB
bundle/artifacts/horilla_referer_bypass/20260722T055646Z-13223/attempts/fixed_1/public_liveness_meta.json0.9 KB
bundle/artifacts/horilla_referer_bypass/20260722T055646Z-13223/attempts/fixed_1/baseline_no_referer_request.txt0.2 KB
bundle/artifacts/horilla_referer_bypass/20260722T055646Z-13223/attempts/fixed_1/baseline_no_referer_response_headers.txt0.7 KB
bundle/artifacts/horilla_referer_bypass/20260722T055646Z-13223/attempts/fixed_1/baseline_no_referer_response_body.bin0.0 KB
bundle/artifacts/horilla_referer_bypass/20260722T055646Z-13223/attempts/fixed_1/baseline_no_referer_curl_trace.txt1.7 KB
bundle/artifacts/horilla_referer_bypass/20260722T055646Z-13223/attempts/fixed_1/baseline_no_referer_curl_stderr.txt0.0 KB
bundle/artifacts/horilla_referer_bypass/20260722T055646Z-13223/attempts/fixed_1/baseline_no_referer_meta.json1.1 KB
bundle/artifacts/horilla_referer_bypass/20260722T055646Z-13223/attempts/fixed_1/trigger_spoofed_referer_response_body.bin0.0 KB
bundle/artifacts/horilla_referer_bypass/20260722T055646Z-13223/attempts/fixed_2/public_liveness_meta.json0.9 KB
bundle/artifacts/horilla_referer_bypass/20260722T055646Z-13223/attempts/fixed_2/baseline_no_referer_request.txt0.2 KB
bundle/artifacts/horilla_referer_bypass/20260722T055646Z-13223/attempts/fixed_2/baseline_no_referer_response_headers.txt0.7 KB
08 · How to Fix

How to Fix GHSA-9WJX-4J4R-FF8W

Coming soon

Step-by-step mitigation and hardening guidance for GHSA-9WJX-4J4R-FF8W — configuration checks, workarounds where no patch exists, and how to verify you're protected — is on the way.

10 · FAQ

FAQ: GHSA-9WJX-4J4R-FF8W

Is GHSA-9WJX-4J4R-FF8W exploitable?

Yes. Pruva independently reproduced GHSA-9WJX-4J4R-FF8W in horilla/horilla-hr and verified the exploit fires end-to-end in a sandboxed environment. A runnable proof-of-concept script and the full agent transcript are on this page (reproduction REPRO-2026-00296).

How severe is GHSA-9WJX-4J4R-FF8W?

GHSA-9WJX-4J4R-FF8W is rated high severity.

How can I reproduce GHSA-9WJX-4J4R-FF8W?

Pruva provides a verified reproduction script on this page. Download it and run it inside an isolated environment such as a container or virtual machine — never against production. The reproduction was confirmed end-to-end by Pruva's automated agents.

Is the GHSA-9WJX-4J4R-FF8W reproduction verified?

Yes. Pruva reproduced GHSA-9WJX-4J4R-FF8W with high confidence in a sandboxed environment, capturing the full agent transcript and artifacts as evidence.
11 · References

References for GHSA-9WJX-4J4R-FF8W

Authoritative sources for GHSA-9WJX-4J4R-FF8W — official vulnerability databases and the upstream advisory. Pruva's reproduction verifies the issue firsthand; these are the primary records to corroborate it.