Skip to main content

Horilla HR CVE-2026-71483

| EUVDEUVD-2026-87364 HIGH
Cross-site Scripting (XSS) (CWE-79)
2026-09-25 security-advisories@github.com
8.5
CVSS 4.0 · Vendor: github
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Access
    Craft malicious search-parameter link
  2. Delivery
    Phish to authenticated Horilla user
  3. Exploit
    Victim opens employee filter view
  4. Execution
    Payload reflected via jQuery .html()
  5. Persist
    Script executes in victim session
  6. Impact
    Hijack session data/actions with victim privileges

Vulnerability Assessment

Weakness
CWE
OWASP Top 10:2025
A05:2025 - Injection
ASVS 5.0
V1 - Encoding and Sanitization Output encoding, context-aware escaping
MITRE ATT&CK

2 techniques across 2 tactics: Initial Access, Execution

The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up.

Exploitation Conditions

Exploitation requires a victim who is already an authenticated Horilla employee or administrator to click an attacker-crafted link and load /employee/employee-filter-view (the employee filter view); the search parameter is reflected unescaped through jQuery .html() in employee/templates/employee_nav.html. The attacker themselves needs no account (PR:N), but the flaw is limited by mandatory user interaction (UI:A/UI:R) - a valid, active victim session must reach the vulnerable view - and by the product being pre-1.6.0. There is no default-configuration unauthenticated impact; the payload only executes in the browser of the tricked, logged-in user.

Impact

This is a reflected cross-site scripting flaw (CWE-79) confirmed by the vendor's GitHub Security Advisory (GHSA-rw86-x8hq-xgwh) and the one-line fix commit (jQuery .html() → .text() in employee_nav.html). The provided CVSS 4.0 vector (AV:N/AC:L/AT:N/PR:N/UI:A) correctly captures that the attacker is unauthenticated (PR:N) and merely crafts/delivers a link, but that the payload only fires when a victim with an active session interacts (UI:A) - i.e. an authenticated employee or admin must open the malicious link and reach the employee filter. No EPSS score, CISA KEV entry, or public exploit code is present in the input, so the correct status is: no public exploit identified at time of analysis. The 8.5 score is driven by VC:H/VI:H, which is arguably overstated for reflected XSS - real-world impact is theft of browser-visible session data and actions bound to the victim's privileges (classic CVSS 3.1 ~6.1 with C:L/I:L, S:C, UI:R), not full system confidentiality/integrity compromise. Net: a genuine but interaction-gated, targeted-phishing-style issue in a niche product - moderate priority, not a mass-exploitation threat, and no evidence of active exploitation.

Exploit ScenarioDerived

An attacker crafts a URL for /employee/employee-filter-view whose search parameter contains a malicious script payload and phishes it to a logged-in Horilla user. When the victim opens the link and reaches the employee filter, the value is reflected via jQuery .html() and executes in their session, letting the attacker read session-visible data or perform actions as that employee/administrator. No public proof-of-concept is referenced in the available data.

This Week Schedule remediation this week. Why: HIGH severity (CVSS 7.0-8.9).
Patch available 0.3% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – Sep 25, 2026

Reflected cross-site scripting in Horilla HR (horilla-hr) before 1.6.0 allows a remote, unauthenticated attacker to execute arbitrary JavaScript in the browser of an authenticated employee or administrator by tricking that user into opening a crafted link to /employee/employee-filter-view. The search parameter is written into the DOM through jQuery's .html() in employee/templates/employee_nav.html, so the injected markup is rendered and executed rather than displayed as text; because the payload runs in the victim's session, the attacker can read browser-visible session data and perform actions with the victim's application privileges. There is no public exploit identified at time of analysis and the flaw is not confirmed actively exploited (CISA KEV); impact is capped at the client/browser layer (VC:H/VI:H but VA:N and no scope change to the server in the vendor's CVSS 4.0 vector, with our independent assessment scoring CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:N).

RemediationAI

Vendor-released patch: 1.6.0 - upgrade Horilla HR to version 1.6.0 or later, which contains the one-line correction of jQuery .html() to .text() in employee/templates/employee_nav.html (see commit 39ed01306341a1f6b7702df2825ab5431b5401a9 and advisory GHSA-rw86-x8hq-xgwh at https://github.com/horilla/horilla-hr/security/advisories/GHSA-rw86-x8hq-xgwh). If upgrading immediately is not possible, the surgical workaround is to apply the same source change directly - replace $('.search_text').html(this.value) with $('.search_text').text(this.value) in employee_nav.html and redeploy - which fully removes the sink but requires managing a local fork until 1.6.0 is installed; alternatively, add a strict Content-Security-Policy that disallows inline and untrusted script sources, accepting that this may break existing inline scripts and that legacy browsers may not enforce it consistently. Because exploitation requires the victim to click an attacker-supplied link while authenticated, session hardening (short session lifetimes, HttpOnly and SameSite cookies, re-authentication for sensitive actions) reduces the value of a successful payload but does not remove the flaw, and server-side sanitization/encoding of the search parameter before it reaches the template is a reasonable defense-in-depth measure that does not by itself replace the client-side fix.

Affected VersionsENISA

horilla-hr < 1.6.0

Affected Packages

euvd horilla_hr fix: 1.6.0

Source: OSV (Open Source Vulnerabilities)

Affects your stack

Affects 1 package in euvd

Checking this CVE against your own stacks and servers is part of the Basic plan and up.

Technical ContextAI · show details

The vulnerability is a classic reflected cross-site scripting (CWE-79) caused by unsafe DOM manipulation in a Django-templated front end. In Horilla HR's employee navigation template (employee/templates/employee_nav.html), the value of the search parameter from the /employee/employee-filter-view endpoint was passed to jQuery's .html() method, which parses the supplied string as HTML and inserts it into the DOM. Any script-capable markup in that string therefore executes in the origin of the Horilla instance. The root cause is the well-known semantic difference between jQuery .html() (HTML parsing) and .text() (literal text insertion); the vendor's fix commit 39ed01306341a1f6b7702df2825ab5431b5401a9 changes the call from $('.search_text').html(this.value) to $('.search_text').text(this.value), eliminating the HTML interpretation. Because the sink is on the client side in a template served to authenticated users, the attacker does not need a Horilla account to craft the URL, but the payload only fires when a logged-in employee or administrator loads the vulnerable employee filter view within their existing session.

Know when Python gets its next vulnerability

  • Watch products and get an email when something new is published
  • Check this CVE against your own stack and servers
  • Exploit and PoC references, threat intelligence from 22 sources

No credit card · 7-day full trial

Severity by source

Vendor (github) PRIMARY 8.5 HIGH
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:A/VC:H/VI:H/VA:N/SC:N/SI:N/SA:N
vuln.today AI 6.1 MEDIUM

Reflected XSS delivered via link (AV:N/AC:L/PR:N) requiring victim click (UI:R); executes in victim's origin (S:C) yielding limited session data/action compromise (C:L/I:L), no availability impact.

3.1 AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:N
4.0 AV:N/AC:L/AT:N/PR:N/UI:A/VC:L/VI:L/VA:N/SC:N/SI:N/SA:N

Primary rating from Vendor (github).

CVSS VectorVendor: github

Attack Vector
Network
Attack Complexity
Low
Attack Requirements
None
Privileges Required
None
User Interaction
Active
Vulnerable system: Confidentiality
High
Vulnerable system: Integrity
High
Vulnerable system: Availability
None
Subsequent system: Confidentiality
None
Subsequent system: Integrity
None
Subsequent system: Availability
None

Lifecycle Timeline

2
Patch available
Sep 25, 2026 - 23:19 EUVD
CVE Published
Sep 25, 2026 - 22:18 cve.org
HIGH 8.5

DescriptionCVE.org

Horilla is an HR and CRM software. Prior to 1.6.0, the search parameter at /employee/employee-filter-view is reflected by jQuery .html() in employee/templates/employee_nav.html without HTML neutralization. An external attacker can craft and deliver a link that causes JavaScript to execute when an authenticated employee or administrator reaches the employee filter, allowing access to browser-visible session data and actions with the victim's application privileges. This issue is fixed in version 1.6.0.

Technical POC Analysis

CWE-79, reflected cross-site scripting.

Full technical POC analysis - root cause, step-by-step exploitation and patch breakdown - is part of the Pro and Business plans.

Executive ViewAI

Why It Matters

Horilla HR installations running releases earlier than 1.6.0 are exposed to a reflected cross-site scripting flaw that allows an unauthenticated attacker to run arbitrary JavaScript inside the browser session of any logged-in employee or HR administrator who is tricked into opening a crafted link. Because the injected code executes with the victim's own application privileges, the people most at risk are HR staff and administrators whose sessions can reach personnel records, payroll data, and privileged administrative functions. The flaw requires no attacker authentication and no server-side compromise, so exposure depends largely on whether employees can be induced to click a malicious link, making user awareness and web-layer filtering as important as patching in the near term.

Business Impact: High
Compensating Controls

No vendor-released patch identified at time of analysis. Interim mitigations: deploy WAF or reverse-proxy filtering that blocks script-bearing payloads targeting the search parameter on /employee/employee-filter-view; enforce a strict Content Security Policy to limit inline script execution in the HR application; restrict external exposure of Horilla HR to VPN or trusted networks where feasible; shorten session lifetimes and require re-authentication for sensitive HR functions; and deliver targeted phishing-awareness guidance to employees and administrators about crafted links into HR pages.

Threat Intelligence Overview

EPSS Score
0.3%
Top 82% exploitable
Prevalence
Low
niche open-source HR/CRM product, limited enterprise deployment footprint
Data Quality
6 sources
Confidence: High
EUVD NVD CVE.org EPSS Vulnrichment GitHub VulDB

How this decision was reached

The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.

SignalValue
Severity HIGH
CISA KEV No
Public POC No
EPSS 0.3%
Patch available Yes
Active threat No
Deciding rule
HIGH severity (CVSS 7.0-8.9)
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision
Scheduled
Exploitation
Poc
System Exposure· derived
Open
Automatable
No
Human Impact
High
Technical Impact
Total

Priority Score

42
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +42
PoC: 0
Weaponized: 0
Threat intel: 0
Gov advisory: 0

Attack Technique

Cross-Site Scripting occurs when an application accepts untrusted data and sends it to a web browser without proper validation or encoding.

More in Python

View all
CVE-2025-24016 CRITICAL POC
9.9 Feb 10

Wazuh SIEM platform versions 4.4.0 through 4.9.0 contain an unsafe deserialization vulnerability in the DistributedAPI t

CVE-2025-27520 CRITICAL POC
9.8 Apr 04

BentoML version 1.4.2 and earlier contains an unauthenticated remote code execution vulnerability through insecure deser

CVE-2025-2945 CRITICAL POC
9.9 Apr 03

pgAdmin 4 contains critical remote code execution vulnerabilities in the Query Tool download and Cloud Deployment endpoi

CVE-2013-5093 MEDIUM POC
6.8 Sep 27

The renderLocalView function in render/views.py in graphite-web in Graphite 0.9.5 through 0.9.10 uses the pickle Python

CVE-2025-32375 CRITICAL POC
9.8 Apr 09

BentoML is a Python library for building online serving systems optimized for AI apps and model inference. Rated critica

CVE-2014-0224 HIGH POC
7.4 Jun 05

OpenSSL before 0.9.8za, 1.0.0 before 1.0.0m, and 1.0.1 before 1.0.1h does not properly restrict processing of ChangeCiph

CVE-2024-21644 HIGH POC
7.5 Jan 08

pyLoad download manager version prior to 0.5.0b3.dev77 exposes the Flask SECRET_KEY through an unauthenticated endpoint.

CVE-2026-33017 CRITICAL POC
9.3 Mar 17

Langflow (a visual LLM pipeline builder) contains a critical unauthenticated code execution vulnerability (CVE-2026-3301

CVE-2017-9462 HIGH POC
8.8 Jun 06

In Mercurial before 4.1.3, "hg serve --stdio" allows remote authenticated users to launch the Python debugger, and conse

CVE-2026-49869 CRITICAL POC
10.0 Jun 26

Unauthenticated remote code execution affects Kestra OSS (the open-source event-driven orchestration platform) prior to

CVE-2026-39987 CRITICAL POC
9.3 Apr 08

Unauthenticated remote code execution in Marimo ≤0.20.4 allows attackers to execute arbitrary system commands via the `/

CVE-2024-21645 MEDIUM POC
5.3 Jan 08

pyLoad is the free and open-source Download Manager written in pure Python. Rated medium severity (CVSS 5.3), this vulne

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy