Description
Horilla is an HR and CRM software. Prior to 2.0.0, approve_validate_attendance_request at /attendance/approve-validate-attendance-request/ changes attendance_validated, is_validate_request_approved, approved_by, and related pending-request state through an HTTP GET before calling attendance.save(), so Django does not require CSRF validation for the action. An unauthenticated attacker can cause a logged-in manager with attendance.change_attendance to make a top-level request that carries the manager's SameSite=Lax session cookie, silently approving attendance with the victim's privileges and attributing the approval to the victim in the audit trail. This issue is fixed in version 2.0.0.
Published: 2026-09-25
Score: 5.9 Medium
EPSS: < 1% Very Low
KEV: No
Impact: Cross‑Site Request Forgery that enables unauthorized approval of attendance records
Action: Patch
AI Analysis

Impact

This vulnerability is a cross‑site request forgery that allows an unauthenticated attacker to cause a logged‑in manager with attendance.change_attendance permission to unintentionally approve an attendance record. The approve_validate_attendance_request handler processes the approval via an HTTP GET request before invoking attendance.save(), bypassing Django’s CSRF validation. As a result, an attacker can trigger the endpoint with the victim’s session cookie, causing the manager to approve attendance silently and having the approval attributed to the victim in the audit trail.

Affected Systems

The affected product is Horilla HR (horilla:horilla-hr). The issue exists in all releases prior to version 2.0.0. The vulnerability is addressed in version 2.0.0 and later.

Risk and Exploitability

The CVSS score of 5.9 classifies the vulnerability as moderate. EPSS data is unavailable, so the exploitation likelihood cannot be quantified. The vulnerability is not listed in the CISA KEV catalogue. The attack vector is inferred to be web‑based CSRF: an attacker can craft a link or embed a request in a third‑party site to trigger a GET request to /attendance/approve-validate-attendance-request/, and because the session cookie is sent under the SameSite=Lax policy, the victim’s browser will submit the request, leading to unauthorized attendance approval.

Generated by OpenCVE AI on September 25, 2026 at 23:45 UTC.

Remediation

No vendor fix or workaround currently provided.

OpenCVE Recommended Actions

  • Upgrade Horilla HR to version 2.0.0 or newer, where CSRF protection has been added to the attendance approval endpoint.
  • Until an upgrade is possible, modify the application to reject GET requests to /attendance/approve-validate-attendance-request/ or enforce that the request uses POST with a valid CSRF token.
  • Temporarily configure the session cookie to use SameSite=Strict, or ensure that the browser does not send the session cookie on cross‑site GET requests, to mitigate the CSRF risk.

Generated by OpenCVE AI on September 25, 2026 at 23:45 UTC.

Tracking

Sign in to view the affected projects.

Advisories

No advisories yet.

History

Fri, 25 Sep 2026 22:30:00 +0000

Type Values Removed Values Added
Description Horilla is an HR and CRM software. Prior to 2.0.0, approve_validate_attendance_request at /attendance/approve-validate-attendance-request/ changes attendance_validated, is_validate_request_approved, approved_by, and related pending-request state through an HTTP GET before calling attendance.save(), so Django does not require CSRF validation for the action. An unauthenticated attacker can cause a logged-in manager with attendance.change_attendance to make a top-level request that carries the manager's SameSite=Lax session cookie, silently approving attendance with the victim's privileges and attributing the approval to the victim in the audit trail. This issue is fixed in version 2.0.0.
Title Horilla attendance approval endpoint is vulnerable to cross-site request forgery
Weaknesses CWE-352
References
Metrics cvssV4_0

{'score': 5.9, 'vector': 'CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:A/VC:N/VI:H/VA:N/SC:N/SI:N/SA:N'}


Subscriptions

No data.

cve-icon MITRE

Status: PUBLISHED

Assigner: GitHub_M

Published:

Updated: 2026-09-25T22:18:13.406Z

Reserved: 2026-09-04T19:34:03.099Z

Link: CVE-2026-86066

cve-icon Vulnrichment

No data.

cve-icon NVD

Status : Received

Published: 2026-09-25T23:16:54.167

Modified: 2026-09-25T23:16:54.167

Link: CVE-2026-86066

cve-icon Redhat

No data.

cve-icon OpenCVE Enrichment

Updated: 2026-09-25T23:45:18Z

Weaknesses
  • CWE-352

    Cross-Site Request Forgery (CSRF)