CVE-2026-24036

5.3 MEDIUM

📋 TL;DR

This vulnerability in Horilla HRMS allows unauthenticated attackers to view unpublished job postings through an exposed API endpoint. Organizations using Horilla versions 1.4.0 and above are affected, potentially leaking sensitive hiring information and allowing unauthorized access to application workflows.

💻 Affected Systems

Products:
  • Horilla HRMS
Versions: 1.4.0 and above (before 1.5.0)
Operating Systems: All
Default Config Vulnerable: ⚠️ Yes
Notes: Affects all deployments with the recruitment module enabled. The vulnerability exists in the default configuration.

📦 What is this software?

⚠️ Risk & Real-World Impact

🔴

Worst Case

Competitors or malicious actors access confidential hiring plans, internal restructuring details, and sensitive job descriptions, potentially leading to business intelligence theft and disruption of recruitment processes.

🟠

Likely Case

Unauthorized individuals discover unpublished job roles, apply to positions not meant for public viewing, and cause confusion among legitimate candidates while exposing internal hiring strategies.

🟢

If Mitigated

With proper authentication controls, only authorized HR personnel can access draft job postings, maintaining confidentiality of hiring processes.

🌐 Internet-Facing: HIGH
🏢 Internal Only: MEDIUM

🎯 Exploit Status

Public PoC: ✅ No
Weaponized: LIKELY
Unauthenticated Exploit: ⚠️ Yes
Complexity: LOW

Exploitation requires only HTTP GET requests to the vulnerable endpoint. No authentication or special tools needed.

🛠️ Fix & Mitigation

✅ Official Fix

Patch Version: 1.5.0

Vendor Advisory: https://github.com/horilla-opensource/horilla/security/advisories/GHSA-q4xr-w96p-3vg7

Restart Required: Yes

Instructions:

1. Backup your Horilla database and configuration. 2. Download Horilla version 1.5.0 from the official repository. 3. Replace existing installation files with the new version. 4. Restart the Horilla application server. 5. Verify the fix by testing the vulnerable endpoint.

🔧 Temporary Workarounds

Web Server Access Control

all

Block unauthenticated access to the vulnerable endpoint using web server configuration

# For Apache: add to .htaccess or virtual host config
<Location "/recruitment/recruitment-details/">
    Require valid-user
</Location>
# For Nginx: add to server block
location /recruitment/recruitment-details/ {
    auth_basic "Restricted";
    auth_basic_user_file /etc/nginx/.htpasswd;
}

Firewall Rule

linux

Block external access to the vulnerable endpoint using network firewall rules

# Example iptables rule to block external access
sudo iptables -A INPUT -p tcp --dport 80 -m string --string "/recruitment/recruitment-details/" --algo bm -j DROP
# For Windows Firewall: Create inbound rule blocking traffic to port 80/443 with URL pattern

🧯 If You Can't Patch

  • Implement strict network segmentation to isolate the HRMS application from external networks
  • Deploy a Web Application Firewall (WAF) with rules to block unauthenticated access to recruitment endpoints

🔍 How to Verify

Check if Vulnerable:

Send an unauthenticated HTTP GET request to http://[horilla-host]/recruitment/recruitment-details/[any-id]/ and check if draft job posting data is returned.

Check Version:

Check the Horilla admin panel or inspect the application's version file. For command line: grep -r "version" /path/to/horilla/ | grep -i "1.4"

Verify Fix Applied:

After patching, attempt the same unauthenticated request. It should return an authentication error or 404 instead of job posting data.

📡 Detection & Monitoring

Log Indicators:

  • Multiple unauthenticated GET requests to /recruitment/recruitment-details/ endpoints
  • Access logs showing successful 200 responses to recruitment endpoints without authentication headers

Network Indicators:

  • Unusual traffic patterns to recruitment endpoints from external IPs
  • HTTP GET requests to sequential recruitment IDs without authentication

SIEM Query:

source="horilla_access.log" AND uri="/recruitment/recruitment-details/*" AND NOT (user!="-" OR auth!="-") AND response="200"

🔗 References

📤 Share & Export